Commit b31efdbd authored by 黄福新's avatar 黄福新

[add] 新增信号优化服务

parent 8ed85e44
This diff is collapsed.
package net.wanji.opt;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.transaction.annotation.EnableTransactionManagement;
/**
* @author
*/
@SpringBootApplication(scanBasePackages = "net.wanji.opt")
@MapperScan(basePackages = "net.wanji.opt.dao.mapper")
@EnableTransactionManagement
@EnableScheduling
@EnableAsync
//@EnableDiscoveryClient
public class SignalOptimizeApplication {
public static void main(String[] args) {
SpringApplication.run(SignalOptimizeApplication.class, args);
}
}
package net.wanji.opt.common;
public class Constants {
/**
* 系统缩写
*/
public static final String SYSTEM_ABBR = "OPT";
/**
* 否
*/
public static final Integer NO = 0;
/**
* 是
*/
public static final Integer YES = 1;
/**
* 分隔符:下划线
**/
public static final String SEPARATOR_UNDER_LINE = "_";
/**
* 分隔符:逗号
**/
public static final String SEPARATOR_COMMA = ",";
/**
* 分隔符:减号
**/
public static final String SEPARATOR_MINUS = "-";
/**
* 分隔符:冒号
**/
public static final String SEPARATOR_COLON = ":";
/**
* 相位(灯态)锁定
*/
public static final Integer LOCK_RUNNING_CONTROL = 12;
/**
* 相位(灯态)解锁: 0-多时段控制模式
*/
public static final Integer UNLOCK_RUNNING_CONTROL = 13;
/**
* 恢复正常方案: 0-多时段控制模式
*/
public static final Integer NORMAL_RUNNING_CONTROL = 0;
/**
* 关灯
*/
public static final Integer CLOSE_LIGHT_CONTROL = 1;
/**
* 黄闪
*/
public static final Integer YELLOW_LIGHT_CONTROL = 2;
/**
* 手动全红
*/
public static final Integer ALL_RED_CONTROL = 3;
/**
* 定周期控制
*/
public static final Integer FIXED_CYCLE_MODE = 4;
/**
* 步进控制
*/
public static final Integer STEP_CONTROL = 10;
/**
* 取消步进
*/
public static final Integer CANCEL_STEP_CONTROL = 11;
}
\ No newline at end of file
package net.wanji.opt.common;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import java.io.Serializable;
/**
* @Description: [API响应结果封装]
* @author hfx
* @version 1.0
* Created on 2019/4/28 19:45
*/
@Data
@Accessors(chain = true)
@NoArgsConstructor
@AllArgsConstructor
public class Result implements Serializable {
private Integer status;
private String msg;
private Object data;
public static Result success() {
return new Result(ResultCode.SUCCESS.getStatus(), ResultCode.SUCCESS.getMsg(), null);
}
public static Result fail() {
return new Result(ResultCode.FAIL.getStatus(), ResultCode.FAIL.getMsg(), null);
}
public static Result success(Object data) {
return new Result(ResultCode.SUCCESS.getStatus(), ResultCode.SUCCESS.getMsg(), data);
}
public static Result fail(String msg) {
return new Result(ResultCode.FAIL.getStatus(), msg, null);
}
public static Result fail(Integer status, String msg) {
return new Result(status, msg, null);
}
}
package net.wanji.opt.common;
/**
* 响应码枚举,参考HTTP状态码的语义
*/
public enum ResultCode {
SUCCESS(200, "操作成功"),
FAIL(400, "操作失败"),
UNAUTHORIZED(401, "未认证,签名错误"),
INVALID(403, "token无效"),
NOT_FOUND(404, "接口不存在"),
INTERNAL_SERVER_ERROR(500, "服务器内部错误");
private int status;
private String msg;
ResultCode(int status, String msg) {
this.status = status;
this.msg = msg;
}
public int getStatus() {
return status;
}
public String getMsg() {
return msg;
}
}
package net.wanji.opt.common.enums;
public enum CrossStatusEnum {
NORMAL(0, "正常"),
UNBALANCE(1, "失衡"),
CONGESTION(2, "拥堵"),
SPILLOVER(3, "溢出"),
DEADLOCK(4, "死锁");
private Integer code;
private String name;
private CrossStatusEnum(Integer code, String name) {
this.code = code;
this.name = name;
}
public Integer getCode() {
return this.code;
}
public String getName() {
return this.name;
}
}
package net.wanji.opt.common.util;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
/**
* @ClassName BeanListUtils
* @Description
* @Author
* @Date 2022/01/17 10:08
* @Version 1.0
*/
public class BeanListUtils {
public static <T> ArrayList beanToList(T bean) throws NoSuchFieldException, IllegalAccessException {
ArrayList<String> list = new ArrayList<String>();
if (bean == null)
return null;
Field[] fields = bean.getClass().getDeclaredFields();
for (Field field : fields) {
Field f = bean.getClass().getDeclaredField(field.getName());
f.setAccessible(true);
Object o = f.get(bean);
list.add(o.toString());
}
return list;
}
/**
*
* 将dto和entity之间的属性互相转换,dto中属性一般为String等基本类型,
* 但是entity中可能有复合主键等复杂类型,需要注意同名问题
* @param src
* @param target
*/
public static Object populate(Object src, Object target) {
Method[] srcMethods = src.getClass().getMethods();
Method[] targetMethods = target.getClass().getMethods();
for (Method m : srcMethods) {
String srcName = m.getName();
if (srcName.startsWith("get")) {
try {
Object result = m.invoke(src);
for (Method mm : targetMethods) {
String targetName = mm.getName();
if (targetName.startsWith("set")
&& targetName.substring(3, targetName.length())
.equals(srcName.substring(3, srcName.length()))) {
mm.invoke(target, result);
}
}
} catch (Exception e) {
}
}
}
return target;
}
/**
*
* dto集合和实体类集合间的互相属性映射
*
* @param src
* @param target
* @param targetClass
* @return
*/
@SuppressWarnings("unchecked")
public static <S, T> List<T> populateList(List<S> src, List<T> target, Class<?> targetClass) {
for (int i = 0; i < src.size(); i++) {
try {
Object object = targetClass.newInstance();
target.add((T) object);
populate(src.get(i), object);
} catch (Exception e) {
continue;// 某个方法反射异常
}
}
return target;
}
}
package net.wanji.opt.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.ClientHttpRequestFactory;
import org.springframework.http.client.SimpleClientHttpRequestFactory;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.web.client.RestTemplate;
import java.nio.charset.StandardCharsets;
@Configuration
public class RestTemplateConfig {
@Bean
public RestTemplate restTemplate(ClientHttpRequestFactory factory) {
RestTemplate restTemplate = new RestTemplate(factory);
restTemplate.getMessageConverters().set(1,new StringHttpMessageConverter(StandardCharsets.UTF_8));
return restTemplate;
}
@Bean
public ClientHttpRequestFactory simpleClientHttpRequestFactory() {
SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
factory.setConnectTimeout(30000);
factory.setReadTimeout(30000);
return factory;
}
}
\ No newline at end of file
package net.wanji.opt.config;
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.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
@Configuration
@EnableSwagger2
public class Swagger2 {
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
//为当前包路径
.apis(RequestHandlerSelectors.basePackage("net.wanji.opt.controller"))
.paths(PathSelectors.any())
.build();
}
//构建 api文档的详细信息函数,注意这里的注解引用的是哪个
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
//页面标题
.title("万集科技-城市交通信号优化系统")
//创建人
.contact(new Contact("test", "#", "signal-opt@wanji.net.cn"))
//版本号
.version("1.0.0")
//描述
.description("城市交通信号优化系统API")
.build();
}
}
\ No newline at end of file
package net.wanji.opt.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebConfigurer implements WebMvcConfigurer {
/**
* 跨域支持
* @param registry
*/
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowedMethods("GET", "POST", "DELETE", "PUT")
.allowedHeaders("*")
.maxAge(3600 * 24);
}
}
\ No newline at end of file
package net.wanji.opt.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.server.standard.ServerEndpointExporter;
/**
* @author duanruiming
* @date 2023/01/06 8:55
*/
@Configuration
public class WebSocketConfig {
/**
* 注入ServerEndpointExporter,
* 这个bean会自动注册使用了@ServerEndpoint注解声明的Websocket endpoint
*/
@Bean
public ServerEndpointExporter serverEndpointExporter() {
return new ServerEndpointExporter();
}
}
package net.wanji.opt.dao.cache;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.support.atomic.RedisAtomicLong;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.Date;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;
@Component
public class RedisDao {
/**
* 注入redisTemplate
*/
@Resource
private RedisTemplate<String, Object> redisTemplate;
/**
* @description: 判断是否存在Key
* @param key redis的Key
* @return boolean true:有 false:无
*/
public boolean hasKey(String key) {
return redisTemplate.hasKey(key);
}
/**
* @description: 添加字符串
* @param key redis的Key
* @param value 添加redis的value
*/
public void set(String key, String value) {
redisTemplate.opsForValue().set(key, value);
}
/**
* @description: 添加对象
* @param key redis的Key
* @param object 添加redis的value
*/
public void set(String key, Object object) {
redisTemplate.opsForValue().set(key, object);
}
/**
* @description: 添加带生命周期的对象
* @param key redis的Key
* @param object 添加redis的value
* @param seconds 失效时间
*/
public void setAndExpire(String key, Object object, int seconds) {
redisTemplate.opsForValue().set(key, object);
redisTemplate.expire(key, seconds, TimeUnit.SECONDS);
}
/**
* @description: 添加带生命周期的对象
* @param key redis的Key
* @param value 添加redis的value
* @param seconds 失效时间
*/
public void setAndExpire(String key, String value, int seconds) {
redisTemplate.opsForValue().set(key, value);
redisTemplate.expire(key, seconds, TimeUnit.SECONDS);
}
/**
* @description: 获取对象
* @param key redis的Key
* @return Object 返回对象
*/
public Object get(String key) {
return redisTemplate.opsForValue().get(key);
}
/**
* @description: 存入redis的hash
* @param key redis的Key
* @param field 字段值
* @param value 存入的值
*/
public void setHash(String key, String field, String value) {
redisTemplate.opsForHash().put(key, field, value);
}
/**
* @description: 存入redis的hash
* @param key redis的Key
* @param field 字段值
* @param value 存入的值
*/
public void setHash(String key, String field, Object value) {
redisTemplate.opsForHash().put(key, field, value);
}
/**
* @description: 根据key和字段值获取内容值
* @param key redis的Key
* @param field 字段值
* @return String 返回字符串
*/
public String getHash(String key, String field) {
return (String)redisTemplate.opsForHash().get(key, field);
}
/**
* @description: 根据field删除值
* @param key redis的Key
* @param field 字段值
*/
public void delHashMap(String key, String field) {
redisTemplate.boundHashOps(key).delete(field);
}
/**
* @description: 存入hash集合
* @param key redis的Key
* @param hashmap 存入的Map集合
*/
public void setHashMap(String key, Map<String, Object> hashmap){
redisTemplate.opsForHash().putAll(key, hashmap);;
}
/**
* @description: 取出hash集合
* @param key redis的Key
* @return Map<Object, Object> 返回Map集合
*/
public Map<Object, Object> getHashMap(String key) {
return redisTemplate.opsForHash().entries(key);
}
/**
* @description: 存入redis的Set
* @param key redis的Key
* @param object 对象
*/
public void setSet(String key,Object object){
redisTemplate.opsForSet().add(key, object);
}
/**
* @description: 获取redis的Set
* @param key redis的Key
* @return Set<Object> Set集合
*/
public Set<Object> getSet(String key){
return redisTemplate.opsForSet().members(key);
}
/**
* @discription: 查看值是否是set成员
* @param key set的key
* @param value set的成员
* @return 是否是set成员
*/
public Boolean isSetMember(String key, Object value) {
return redisTemplate.opsForSet().isMember(key, value);
}
/**
* @description:设置key的过期时间,endTime格式:yyyy-MM-dd hh:mm:ss
* @param key redis的Key
* @param endTime 结束时间
*/
public void setExpire(String key, Date endTime) {
long seconds = endTime.getTime() - System.currentTimeMillis();
redisTemplate.expire(key, (int) (seconds / 1000), TimeUnit.SECONDS);
}
/**
* @description: 设置key的过期时间
* @param key redis的Key
* @param time 过期时间(秒)
*/
public void setExpire(String key, int time) {
redisTemplate.expire(key, time, TimeUnit.SECONDS);
}
/**
* <p>Discription:获取key的过期时间
* @param key redis的Key
* @return 过期时间(秒)
*/
public Long getExpire(String key) {
return redisTemplate.getExpire(key, TimeUnit.SECONDS);
}
/**
* @description: 在redis消息队列队尾插入数据
* @param key redis的Key
* @param object 添加的对象
*/
public void tailPush(String key, Object object){
redisTemplate.opsForList().rightPush(key, object);
}
/**
* @description: 在redis消息队列对头插入数据
* @param key redis的Key
* @param object 添加的对象
*/
public void headPush(String key,Object object){
redisTemplate.opsForList().leftPush(key, object);
}
/**
* @description: 在redis消息队列队尾删除数据
* @param key redis的Key
* @return Object 删除的对象
*/
public Object tailPop(String key){
return redisTemplate.opsForList().rightPop(key);
}
/**
* @description: 在redis消息队列队头删除数据
* @param key redis的Key
* @return Object 删除的对象
*/
public Object headPop(String key){
return redisTemplate.opsForList().leftPop(key);
}
/**
* @description: 删除redis的值
* @param key redis的Key
*/
public void del(String key) {
if (hasKey(key)) {
redisTemplate.delete(key);
}
}
/**
* @description: 清理redis缓存
*/
public void flushDB(){
redisTemplate.getConnectionFactory().getConnection().flushDb();
}
/**
* 自增ID
* @param key 建
* @param liveTime 过期时间
* @return 自增结果
*/
public Long getIncr(String key, long liveTime) {
RedisAtomicLong entityIdCounter = new RedisAtomicLong(key, redisTemplate.getConnectionFactory());
Long increment = entityIdCounter.getAndIncrement();
if ((null == increment || increment.longValue() == 0) && liveTime > 0) {//初始设置过期时间
entityIdCounter.expire(liveTime, TimeUnit.MILLISECONDS);//单位毫秒
}
return increment;
}
/**
* 获取全部Redis的key
* @return
*/
public Set<String> keys() {
return redisTemplate.keys("*");
}
}
package net.wanji.opt.dao.mapper;
import net.wanji.opt.po.base.CrossInfoPO;
import net.wanji.opt.query.CrossQuery;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* @author hfx
* @date 2023/1/12 13:24
* @desc CrossInfoMapper
*/
@Repository
public interface CrossInfoMapper {
/**
* 查询路口列表信息
* @param query
* @return
*/
List<CrossInfoPO> listCrossInfo(CrossQuery query);
}
package net.wanji.opt.dao.mapper;
import net.wanji.opt.po.base.CrossLightsPO;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* @author hfx
* @date 2023/1/13 14:43
* @desc CrossLightsMapper
*/
@Repository
public interface CrossLightsMapper {
/**
* 查询灯组基础信息列表
* @return
*/
List<CrossLightsPO> listCrossLights();
}
package net.wanji.opt.dao.mapper;
import net.wanji.opt.po.base.CrossPhaseLightsPO;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* @author hfx
* @date 2023/1/18 14:25
* @desc CrossPhaseLightsMapper
*/
@Repository
public interface CrossPhaseLightsMapper {
/**
* 查询相位灯组信息
* @return
*/
List<CrossPhaseLightsPO> listCrossPhaseLights();
}
package net.wanji.opt.dao.mapper;
import net.wanji.opt.po.base.CrossPhasePO;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* @author hfx
* @date 2023/1/13 10:54
* @desc CrossPhaseMapper
*/
@Repository
public interface CrossPhaseMapper {
/**
* 查询相位基础信息列表
* @return
*/
List<CrossPhasePO> listCrossPhase();
}
package net.wanji.opt.dao.mapper;
import net.wanji.opt.po.base.CrossPlanPO;
import net.wanji.opt.po.base.CrossSchemePO;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* @author hfx
* @date 2023/1/17 16:06
* @desc CrossPlanMapper
*/
@Repository
public interface CrossPlanMapper {
/**
* 查询计划基础信息列表
* @param crossId
* @return
*/
List<CrossPlanPO> listCrossPlanInfo(String crossId);
}
package net.wanji.opt.dao.mapper;
import net.wanji.opt.po.base.CrossSchedulesPO;
import net.wanji.opt.po.base.CrossSchedulesPlanPO;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* @author hfx
* @date 2023/1/17 16:06
* @desc CrossSchedulesMapper
*/
@Repository
public interface CrossSchedulesMapper {
/**
* 查询调度基础信息列表
* @param crossId
* @return
*/
List<CrossSchedulesPO> listCrossSchedulesInfo(String crossId);
/**
* 查询调度计划信息列表
* @param crossId
* @return
*/
List<CrossSchedulesPlanPO> listSchedulesPlan(String crossId, String schedulesId);
}
package net.wanji.opt.dao.mapper;
import net.wanji.opt.po.base.CrossSchemePO;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* @author hfx
* @date 2023/1/17 14:49
* @desc CrossSchemeMapper
*/
@Repository
public interface CrossSchemeMapper {
/**
* 查询方案基础信息列表
* @param crossId
* @return
*/
List<CrossSchemePO> listCrossSchemeInfo(String crossId);
}
package net.wanji.opt.dao.mapper;
import net.wanji.opt.po.base.CrossSectionPO;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* @author hfx
* @date 2023/1/17 17:35
* @desc CrossSectionMapper
*/
@Repository
public interface CrossSectionMapper {
/**
* 查询时段基础信息列表
* @return
*/
List<CrossSectionPO> listCrossSectionInfo();
}
package net.wanji.opt.dao.mapper;
import net.wanji.opt.po.base.LaneInfoPO;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* @author hfx
* @date 2023/1/13 14:43
* @desc LaneInfoMapper
*/
@Repository
public interface LaneInfoMapper {
/**
* 查询车道基础信息列表
* @return
*/
List<LaneInfoPO> listLaneInfo();
}
package net.wanji.opt.dao.mapper;
import net.wanji.opt.po.base.CrossLightsPO;
import net.wanji.opt.po.base.LaneLightsPO;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* @author hfx
* @date 2023/1/13 14:43
* @desc LaneLightsMapper
*/
@Repository
public interface LaneLightsMapper {
/**
* 查询灯组车道列表信息
* @return
*/
List<LaneLightsPO> listLightLane();
}
package net.wanji.opt.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
* @author hfx
* @date 2023/1/12 09:11
* @desc 路口实时数据
*/
@Data
@ApiModel(value = "CrossDataRealtimeDTO", description = "路口实时数据")
public class CrossDataRealtimeDTO {
@ApiModelProperty(name = "路口ID",notes = "")
private String crossId;
@ApiModelProperty(name = "路口状态:0正常;1失衡;2拥堵;3溢出;4死锁",notes = "")
private Integer status;
@ApiModelProperty(name = "交通流量(辆)",notes = "")
private Integer flow;
@ApiModelProperty(name = "平均速度(km/h)",notes = "")
private Double speed;
@ApiModelProperty(name = "停车次数(次)",notes = "")
private Double stopTimes;
@ApiModelProperty(name = "延误时间(秒)",notes = "")
private Integer delayTime;
@ApiModelProperty(name = "饱和度",notes = "")
private Double sturation;
@ApiModelProperty(name = "数据批次",notes = "")
private Integer batchTime;
@ApiModelProperty(name = "路口方向列表",notes = "")
List<CrossDirInfoDTO> dirList;
@ApiModelProperty(name = "路口转向列表",notes = "")
List<CrossTurnInfoDTO> turnList;
}
package net.wanji.opt.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @author hfx
* @date 2023/1/12 9:15
* @desc 路口方向
*/
@Data
public class CrossDirInfoDTO {
@ApiModelProperty(name = "路口方向ID",notes = "")
private String crossDirId;
@ApiModelProperty(name = "路口方向类型:1北;2东北;3东;4东南;5南;6西南;7西;8西北",notes = "")
private Integer dirType;
@ApiModelProperty(name = "进出口类型:1进口;2出口",notes = "")
private Integer inOutType;
@ApiModelProperty(name = "路口ID",notes = "")
private String crossId;
}
package net.wanji.opt.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
* @author hfx
* @date 2023/1/12 09:11
* @desc 路口基础信息
*/
@Data
@ApiModel(value = "CrossInfoDTO", description = "路口基础信息")
public class CrossInfoDTO {
@ApiModelProperty(name = "路口ID",notes = "")
private String id;
@ApiModelProperty(name = "路口名称",notes = "")
private String name;
@ApiModelProperty(name = "路口类型",notes = "")
private Integer type;
@ApiModelProperty(name = "路口级别",notes = "")
private Integer level;
@ApiModelProperty(name = "行政区划代码",notes = "")
private Integer areaCode;
@ApiModelProperty(name = "路口位置",notes = "")
private String location;
@ApiModelProperty(name = "是否信控路口:1是;0否",notes = "")
private Integer isSignal;
@ApiModelProperty(name = "是否启动优化:1是;0否",notes = "")
private Integer isStart;
@ApiModelProperty(name = "是否下发方案:1是;0否",notes = "")
private Integer isSend;
}
package net.wanji.opt.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import net.wanji.opt.po.base.LaneInfoPO;
import java.util.List;
/**
* @author hfx
* @date 2023/01/12 13:29:39
* @desc 灯组信息
*/
@Data
public class CrossLightsDTO {
@ApiModelProperty(name = "灯组ID",notes = "")
private Integer id;
@ApiModelProperty(name = "灯组号",notes = "")
private String lightsNo;
@ApiModelProperty(name = "灯组类型:机动车(1圆饼灯;2左转灯;3直行灯;4右转灯;5掉头灯;);" +
"非机动车(10非机动车灯;11左转灯;12直行灯;13右转灯;14掉头灯);" +
"20行人灯;21行人进口灯;22行人出口灯;" +
"30公交专用灯",notes = "")
private Integer type;
@ApiModelProperty(name = "灯组放行方向:1北;2东北;3东;4东南;5南;6西南;7西;8西北",notes = "")
private Integer dir;
@ApiModelProperty(name = "灯组序号",notes = "")
private Integer sort;
@ApiModelProperty(name = "路口ID",notes = "")
private String crossId;
@ApiModelProperty(name = "相位ID",notes = "")
private Integer phaseId;
@ApiModelProperty(name = "车道信息",notes = "")
private List<LaneInfoDTO> laneInfos;
}
package net.wanji.opt.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
* @author hfx
* @date 2023/01/12 13:29:39
* @desc 路口相位基础信息
*/
@Data
public class CrossPhaseDTO {
@ApiModelProperty(name = "相位ID",notes = "")
private Integer id;
@ApiModelProperty(name = "相位号",notes = "")
private String phaseNo;
@ApiModelProperty(name = "相位名称",notes = "")
private String name;
@ApiModelProperty(name = "相位序号",notes = "")
private Integer sort;
@ApiModelProperty(name = "路口ID",notes = "")
private String crossId;
@ApiModelProperty(name = "路口方向:1北;2东北;3东;4东南;5南;6西南;7西;8西北",notes = "")
private Integer dirType;
@ApiModelProperty(name = "路口转向:u掉头;l左转;s直行;r右转",notes = "")
private Integer turnType;
@ApiModelProperty(name = "方案ID",notes = "")
private Integer schemeId;
@ApiModelProperty(name = "环号",notes = "")
private Integer ringNo;
@ApiModelProperty(name = "组号",notes = "")
private Integer groupNo;
@ApiModelProperty(name = "相位类型 1实相位 2虚相位 3伴随相位",notes = "")
private Integer type;
@ApiModelProperty(name = "控制模式:1定周期;2绿灯;3黄灯;4红灯;5关灯;6绿闪;7黄闪;8红闪",notes = "")
private Integer controlMode;
@ApiModelProperty(name = "相位时间",notes = "")
private Integer phaseTime;
@ApiModelProperty(name = "绿灯时间",notes = "")
private Integer greenTime;
@ApiModelProperty(name = "绿闪时间",notes = "")
private Integer greenFlashTime;
@ApiModelProperty(name = "行闪时间",notes = "")
private Integer pedFlashTime;
@ApiModelProperty(name = "黄灯时间",notes = "")
private Integer yellowTime;
@ApiModelProperty(name = "红灯时间",notes = "")
private Integer redTime;
@ApiModelProperty(name = "最小绿灯时间",notes = "")
private Integer minGreenTime;
@ApiModelProperty(name = "最大绿灯时间",notes = "")
private Integer maxGreenTime;
@ApiModelProperty(name = "灯组信息",notes = "")
List<CrossLightsDTO> lightsInfos;
}
package net.wanji.opt.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
* @author hfx
* @date 2023/1/17 16:21
* @desc 路口调度信息
*/
@Data
public class CrossSchedulesDTO {
@ApiModelProperty(name = "调度ID",notes = "")
private Integer schedulesId;
@ApiModelProperty(name = "调度名称",notes = "")
private String schedulesName;
@ApiModelProperty(name = "状态:1执行;0未执行",notes = "")
private Integer status;
@ApiModelProperty(name = "星期:1周一,2周二,3周三,4周四,5周五,6周六,7周日,0特殊日期",notes = "")
private Integer week;
@ApiModelProperty(name = "特殊日期",notes = "")
private String specialDate;
@ApiModelProperty(name = "计划ID",notes = "")
private Integer planId;
@ApiModelProperty(name = "计划号",notes = "")
private String planNo;
@ApiModelProperty(name = "路口ID",notes = "")
private String crossId;
@ApiModelProperty(name = "时段信息",notes = "")
List<CrossSectionDTO> sectionInfos;
}
package net.wanji.opt.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
* @author hfx
* @date 2023/01/12 13:29:39
* @desc 路口方案基础信息
*/
@Data
public class CrossSchemeDTO {
@ApiModelProperty(name = "方案ID",notes = "")
private Integer id;
@ApiModelProperty(name = "方案号",notes = "")
private String schemeNo;
@ApiModelProperty(name = "方案名称",notes = "")
private String name;
@ApiModelProperty(name = "路口ID",notes = "")
private String crossId;
@ApiModelProperty(name = "周期(秒)",notes = "")
private Integer cycle;
@ApiModelProperty(name = "协调相位ID",notes = "")
private Integer coordPhase;
@ApiModelProperty(name = "相位差",notes = "")
private Integer offset;
@ApiModelProperty(name = "相位信息",notes = "")
private List<CrossPhaseDTO> phaseInfos;
}
package net.wanji.opt.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @author hfx
* @date 2023/1/17 16:14
* @desc CrossSectionDTO
*/
@Data
public class CrossSectionDTO {
@ApiModelProperty(name = "时段ID",notes = "")
private Integer id;
@ApiModelProperty(name = "时段号",notes = "")
private String sectionNo;
@ApiModelProperty(name = "开始时间",notes = "")
private String startTime;
@ApiModelProperty(name = "结束时间",notes = "")
private String endTime;
@ApiModelProperty(name = "计划ID",notes = "")
private Integer planId;
@ApiModelProperty(name = "路口ID",notes = "")
private String crossId;
@ApiModelProperty(name = "方案ID",notes = "")
private Integer scemeId;
@ApiModelProperty(name = "控制模式:1定周期;2绿波协调;3黄闪;4全红;5关灯;6单点自适应;7全感应;8半感应;",notes = "")
private Integer control_mode;
}
package net.wanji.opt.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
* @author hfx
* @date 2023/1/12 09:11
* @desc 路口实时数据
*/
@Data
public class CrossTurnDataRealtimeDTO {
@ApiModelProperty(name = "转向ID",notes = "")
private String turnId;
@ApiModelProperty(name = "转向类型:u掉头;l左转;s直行;r右转;",notes = "")
private Integer turnType;
@ApiModelProperty(name = "驶入方向:1北;2东北;3东;4东南;5南;6西南;7西;8西北",notes = "")
private Integer inDir;
@ApiModelProperty(name = "驶出方向:1北;2东北;3东;4东南;5南;6西南;7西;8西北",notes = "")
private Integer outDir;
@ApiModelProperty(name = "路口ID",notes = "")
private String crossId;
@ApiModelProperty(name = "交通流量(辆)",notes = "")
private Integer flow;
@ApiModelProperty(name = "平均速度(km/h)",notes = "")
private Double speed;
@ApiModelProperty(name = "驶入速度(km/h)",notes = "")
private Double inSpeed;
@ApiModelProperty(name = "驶出速度(km/h)",notes = "")
private Double outSpeed;
@ApiModelProperty(name = "排队长度(米)",notes = "")
private Double queueLength;
@ApiModelProperty(name = "停车次数(次)",notes = "")
private Double stopTimes;
@ApiModelProperty(name = "延误时间(秒)",notes = "")
private Integer delayTime;
@ApiModelProperty(name = "饱和度",notes = "")
private Double sturation;
@ApiModelProperty(name = "车头间距(米)",notes = "")
private Double vehheadDist;
@ApiModelProperty(name = "车头时距(秒)",notes = "")
private Double vehheadTime;
@ApiModelProperty(name = "数据批次(10位时间戳)",notes = "")
private Integer batchTime;
}
package net.wanji.opt.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @author hfx
* @date 2023/1/12 9:15
* @desc 路口转向
*/
@Data
public class CrossTurnInfoDTO {
@ApiModelProperty(name = "转向ID",notes = "")
private String turnId;
@ApiModelProperty(name = "转向类型:u掉头;l左转;s直行;r右转;",notes = "")
private Integer turnType;
@ApiModelProperty(name = "驶入方向:1北;2东北;3东;4东南;5南;6西南;7西;8西北",notes = "")
private Integer inDir;
@ApiModelProperty(name = "驶出方向:1北;2东北;3东;4东南;5南;6西南;7西;8西北",notes = "")
private Integer outDir;
@ApiModelProperty(name = "路口ID",notes = "")
private String crossId;
}
package net.wanji.opt.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @author hfx
* @date 2023/1/13 19:03
* @desc 车道信息
*/
@Data
public class LaneInfoDTO {
@ApiModelProperty(name = "车道ID",notes = "")
private String id;
@ApiModelProperty(name = "车道代码",notes = "")
private String code;
@ApiModelProperty(name = "车道序号,从左车道开始编号11、12、13...",notes = "")
private Integer sort;
@ApiModelProperty(name = "车道类型:1路段车道;2进口车道;3出口车道;4左转弯待转区;6直行待行区",notes = "")
private Integer type;
@ApiModelProperty(name = "车道方向:1北;2东北;3东;4东南;5南;6西南;7西;8西北",notes = "")
private Integer dir;
@ApiModelProperty(name = "车道转向",notes = "")
private Integer turn;
@ApiModelProperty(name = "车道类别:1机动车;2非机动车;3公交专用;4可变;5潮汐",notes = "")
private Integer category;
@ApiModelProperty(name = "路段编号",notes = "")
private String rid;
@ApiModelProperty(name = "路口ID",notes = "")
private String crossId;
@ApiModelProperty(name = "灯组ID",notes = "")
private Integer lightsId;
@ApiModelProperty(name = "车道长度",notes = "")
private Double length;
@ApiModelProperty(name = "车道宽度",notes = "")
private Double width;
}
package net.wanji.opt.po;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
* @author hfx
* @date 2023/1/10 16:36
* @desc CrossDataRealtimePO
*/
@Data
public class CrossDataRealtimePO {
@ApiModelProperty(name = "路口ID",notes = "")
private String crossId;
@ApiModelProperty(name = "是否失衡:0否;1是",notes = "")
private Integer isUnbalance;
@ApiModelProperty(name = "是否溢出:0否;1是",notes = "")
private Integer isSpillover;
@ApiModelProperty(name = "是否拥堵:0否;1是",notes = "")
private Integer isCongestion;
@ApiModelProperty(name = "失衡指数",notes = "")
private Double unbalanceIndex;
@ApiModelProperty(name = "溢出指数",notes = "")
private Double spilloverIndex;
@ApiModelProperty(name = "拥堵指数",notes = "")
private Double congestionIndex;
@ApiModelProperty(name = "综合指数",notes = "")
private Double compositeIndex;
@ApiModelProperty(name = "交通流量(辆)",notes = "")
private Integer flow;
@ApiModelProperty(name = "平均速度(km/h)",notes = "")
private Double speed;
@ApiModelProperty(name = "停车次数(次)",notes = "")
private Double stopTimes;
@ApiModelProperty(name = "延误时间(秒)",notes = "")
private Integer delayTime;
@ApiModelProperty(name = "饱和度",notes = "")
private Double sturation;
@ApiModelProperty(name = "数据批次",notes = "")
private Integer batchTime;
}
package net.wanji.opt.po.base;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @author hfx
* @date 2023/1/12 13:35
* @desc 路口方向基础信息
*/
@Data
public class CrossDirInfoPO {
@ApiModelProperty(name = "路口方向ID",notes = "")
private String crossDirId;
@ApiModelProperty(name = "路口方向类型:1北;2东北;3东;4东南;5南;6西南;7西;8西北",notes = "")
private Integer dirType;
@ApiModelProperty(name = "进出口类型:1进口;2出口",notes = "")
private Integer inOutType;
@ApiModelProperty(name = "路段长度",notes = "")
private Double length;
@ApiModelProperty(name = "路口ID",notes = "")
private String crossId;
}
package net.wanji.opt.po.base;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @author hfx
* @date 2023/01/12 13:29:39
* @desc 路口基础信息
*/
@Data
public class CrossInfoPO {
@ApiModelProperty(name = "路口ID",notes = "")
private String id;
@ApiModelProperty(name = "路口名称",notes = "")
private String name;
@ApiModelProperty(name = "路口类型",notes = "")
private Integer type;
@ApiModelProperty(name = "路口级别",notes = "")
private Integer level;
@ApiModelProperty(name = "行政区划代码",notes = "")
private Integer areaCode;
@ApiModelProperty(name = "路口位置",notes = "")
private String location;
@ApiModelProperty(name = "是否信控路口:1是;0否",notes = "")
private Integer isSignal;
@ApiModelProperty(name = "是否启动优化:1是;0否",notes = "")
private Integer isStart;
@ApiModelProperty(name = "是否下发方案:1是;0否",notes = "")
private Integer isSend;
}
package net.wanji.opt.po.base;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @author hfx
* @date 2023/01/12 13:29:39
* @desc 灯组基础信息
*/
@Data
public class CrossLightsPO {
@ApiModelProperty(name = "灯组ID",notes = "")
private Integer id;
@ApiModelProperty(name = "灯组号",notes = "")
private String lightsNo;
@ApiModelProperty(name = "灯组类型:机动车(1圆饼灯;2左转灯;3直行灯;4右转灯;5掉头灯;);" +
"非机动车(10非机动车灯;11左转灯;12直行灯;13右转灯;14掉头灯);" +
"20行人灯;21行人进口灯;22行人出口灯;" +
"30公交专用灯",notes = "")
private Integer type;
@ApiModelProperty(name = "灯组放行方向:1北;2东北;3东;4东南;5南;6西南;7西;8西北",notes = "")
private Integer dir;
@ApiModelProperty(name = "灯组序号",notes = "")
private Integer sort;
@ApiModelProperty(name = "路口ID",notes = "")
private String crossId;
}
package net.wanji.opt.po.base;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @author hfx
* @date 2023/01/18 14:27:39
* @desc 路口相位灯组信息
*/
@Data
public class CrossPhaseLightsPO {
@ApiModelProperty(name = "相位ID",notes = "")
private Integer phaseId;
@ApiModelProperty(name = "灯组ID",notes = "")
private Integer lightsId;
@ApiModelProperty(name = "路口ID",notes = "")
private String crossId;
}
package net.wanji.opt.po.base;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @author hfx
* @date 2023/01/12 13:29:39
* @desc 路口相位基础信息
*/
@Data
public class CrossPhasePO {
@ApiModelProperty(name = "相位ID",notes = "")
private Integer id;
@ApiModelProperty(name = "相位号",notes = "")
private String phaseNo;
@ApiModelProperty(name = "相位名称",notes = "")
private String name;
@ApiModelProperty(name = "相位序号",notes = "")
private Integer sort;
@ApiModelProperty(name = "路口ID",notes = "")
private String crossId;
@ApiModelProperty(name = "方案ID",notes = "")
private Integer schemeId;
@ApiModelProperty(name = "环号",notes = "")
private Integer ringNo;
@ApiModelProperty(name = "组号",notes = "")
private Integer groupNo;
@ApiModelProperty(name = "相位类型:1实相位;2虚相位;3伴随相位",notes = "")
private Integer type;
@ApiModelProperty(name = "控制模式:1定周期;2绿灯;3黄灯;4红灯;5关灯;6绿闪;7黄闪;8红闪",notes = "")
private Integer controlMode;
@ApiModelProperty(name = "相位时间",notes = "")
private Integer phaseTime;
@ApiModelProperty(name = "绿灯时间",notes = "")
private Integer greenTime;
@ApiModelProperty(name = "绿闪时间",notes = "")
private Integer greenFlashTime;
@ApiModelProperty(name = "行闪时间",notes = "")
private Integer pedFlashTime;
@ApiModelProperty(name = "黄灯时间",notes = "")
private Integer yellowTime;
@ApiModelProperty(name = "红灯时间",notes = "")
private Integer redTime;
@ApiModelProperty(name = "最小绿灯时间",notes = "")
private Integer minGreenTime;
@ApiModelProperty(name = "最大绿灯时间",notes = "")
private Integer maxGreenTime;
}
package net.wanji.opt.po.base;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @author hfx
* @date 2023/1/17 15:48
* @desc 计划基础信息
*/
@Data
public class CrossPlanPO {
@ApiModelProperty(name = "计划ID",notes = "")
private Integer id;
@ApiModelProperty(name = "计划号",notes = "")
private String planNo;
@ApiModelProperty(name = "计划名称",notes = "")
private String name;
@ApiModelProperty(name = "路口ID",notes = "")
private String crossId;
}
package net.wanji.opt.po.base;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @author hfx
* @date 2023/1/17 15:48
* @desc 调度基础信息
*/
@Data
public class CrossSchedulesPO {
@ApiModelProperty(name = "调度ID",notes = "")
private Integer id;
@ApiModelProperty(name = "调度名称",notes = "")
private String name;
@ApiModelProperty(name = "路口ID",notes = "")
private String crossId;
@ApiModelProperty(name = "状态:1执行;0未执行",notes = "")
private Integer status;
}
package net.wanji.opt.po.base;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @author hfx
* @date 2023/1/13 10:31
* @desc 路口调度计划信息
*/
@Data
public class CrossSchedulesPlanPO {
@ApiModelProperty(name = "调度ID",notes = "")
private Integer schedulesId;
@ApiModelProperty(name = "调度名称",notes = "")
private String schedulesName;
@ApiModelProperty(name = "调度状态:1执行;0未执行",notes = "")
private Integer status;
@ApiModelProperty(name = "计划ID",notes = "")
private Integer planId;
@ApiModelProperty(name = "计划号",notes = "")
private String planNo;
@ApiModelProperty(name = "路口ID",notes = "")
private String crossId;
@ApiModelProperty(name = "星期:1周一,2周二,3周三,4周四,5周五,6周六,7周日,0特殊日期",notes = "")
private Integer week;
@ApiModelProperty(name = "特殊日期",notes = "")
private String specialDate;
}
package net.wanji.opt.po.base;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @author hfx
* @date 2023/01/12 13:29:39
* @desc 路口方案基础信息
*/
@Data
public class CrossSchemePO {
@ApiModelProperty(name = "方案ID",notes = "")
private Integer id;
@ApiModelProperty(name = "方案号",notes = "")
private String schemeNo;
@ApiModelProperty(name = "方案名称",notes = "")
private String name;
@ApiModelProperty(name = "路口ID",notes = "")
private String crossId;
@ApiModelProperty(name = "周期(秒)",notes = "")
private Integer cycle;
@ApiModelProperty(name = "协调相位ID",notes = "")
private Integer coordPhase;
@ApiModelProperty(name = "相位差",notes = "")
private Integer offset;
}
package net.wanji.opt.po.base;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @author hfx
* @date 2023/1/13 10:32
* @desc 路口时段信息
*/
@Data
public class CrossSectionPO {
@ApiModelProperty(name = "时段ID",notes = "")
private Integer id;
@ApiModelProperty(name = "时段号",notes = "")
private String sectionNo;
@ApiModelProperty(name = "开始时间",notes = "")
private String startTime;
@ApiModelProperty(name = "结束时间",notes = "")
private String endTime;
@ApiModelProperty(name = "计划ID",notes = "")
private Integer planId;
@ApiModelProperty(name = "路口ID",notes = "")
private String crossId;
@ApiModelProperty(name = "方案ID",notes = "")
private Integer scemeId;
@ApiModelProperty(name = "控制模式:1定周期;2绿波协调;3黄闪;4全红;5关灯;6单点自适应;7全感应;8半感应;",notes = "")
private Integer controlMode;
}
package net.wanji.opt.po.base;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @author hfx
* @date 2023/1/12 13:37
* @desc 路口转向基础信息
*/
@Data
public class CrossTurnInfoPO {
@ApiModelProperty(name = "转向ID",notes = "")
private String turnId;
@ApiModelProperty(name = "转向类型:u掉头;l左转;s直行;r右转;",notes = "")
private Integer turnType;
@ApiModelProperty(name = "驶入方向:1北;2东北;3东;4东南;5南;6西南;7西;8西北",notes = "")
private Integer inDir;
@ApiModelProperty(name = "驶出方向:1北;2东北;3东;4东南;5南;6西南;7西;8西北",notes = "")
private Integer outDir;
@ApiModelProperty(name = "路口ID",notes = "")
private String crossId;
}
package net.wanji.opt.po.base;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @author hfx
* @date 2023/1/13 16:50
* @desc 车道基础信息
*/
@Data
public class LaneInfoPO {
@ApiModelProperty(name = "车道ID",notes = "")
private String id;
@ApiModelProperty(name = "车道代码",notes = "")
private String code;
@ApiModelProperty(name = "车道序号,从左车道开始编号11、12、13...",notes = "")
private Integer sort;
@ApiModelProperty(name = "车道类型:1路段车道;2进口车道;3出口车道;4左转弯待转区;6直行待行区",notes = "")
private Integer type;
@ApiModelProperty(name = "车道方向:1北;2东北;3东;4东南;5南;6西南;7西;8西北",notes = "")
private Integer dir;
@ApiModelProperty(name = "车道转向",notes = "")
private Integer turn;
@ApiModelProperty(name = "车道类别:1机动车;2非机动车;3公交专用;4可变;5潮汐",notes = "")
private Integer category;
@ApiModelProperty(name = "路段编号",notes = "")
private String rid;
@ApiModelProperty(name = "路口ID",notes = "")
private String crossId;
@ApiModelProperty(name = "车道长度",notes = "")
private Double length;
@ApiModelProperty(name = "车道宽度",notes = "")
private Double width;
}
package net.wanji.opt.po.base;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @author hfx
* @date 2023/1/13 17:37
* @desc 车道灯组信息
*/
@Data
public class LaneLightsPO {
@ApiModelProperty(name = "灯组ID",notes = "")
private Integer lightsId;
@ApiModelProperty(name = "车道ID",notes = "")
private String laneId;
@ApiModelProperty(name = "路口ID",notes = "")
private String crossId;
}
package net.wanji.opt.query;
import io.swagger.annotations.ApiModelProperty;
/**
* @author hfx
* @date 2023/1/13 13:34
* @desc CrossPhaseQuery
*/
public class CrossPhaseQuery {
@ApiModelProperty(name = "路口ID",notes = "")
private String crossId;
@ApiModelProperty(name = "方案ID",notes = "")
private Integer schemeId;
}
package net.wanji.opt.query;
import io.swagger.annotations.ApiModelProperty;
/**
* @author hfx
* @date 2023/1/12 14:08
* @desc CrossQuery
*/
public class CrossQuery {
@ApiModelProperty(name = "路口ID",notes = "")
private String id;
@ApiModelProperty(name = "是否信控路口:1是;0否",notes = "")
private Integer isSignal;
@ApiModelProperty(name = "是否启动优化:1是;0否",notes = "")
private Integer isStart;
@ApiModelProperty(name = "是否下发方案:1是;0否",notes = "")
private Integer isSend;
}
package net.wanji.opt.query;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @author hfx
* @date 2023/1/13 19:11
* @desc LaneQuery
*/
@Data
public class LaneQuery {
@ApiModelProperty(name = "路段编号",notes = "")
private String rid;
@ApiModelProperty(name = "路口ID",notes = "")
private String crossId;
@ApiModelProperty(name = "灯组ID",notes = "")
private String lightsId;
}
package net.wanji.opt.service;
import net.wanji.opt.dto.CrossInfoDTO;
import net.wanji.opt.query.CrossQuery;
import java.util.List;
/**
* @author hfx
* @date 2023/1/12 15:12
* @desc 路口基础信息接口服务
*/
public interface CrossInfoService {
/**
* 查询路口基础信息列表
* @return
*/
List<CrossInfoDTO> listCrossInfo(CrossQuery query);
}
package net.wanji.opt.service;
import net.wanji.opt.dto.CrossLightsDTO;
import net.wanji.opt.po.base.CrossLightsPO;
import java.util.List;
/**
* @author hfx
* @date 2023/1/13 17:48
* @desc CrossLightsService
*/
public interface CrossLightsService {
/**
* 查询灯组基础信息列表
* @return
*/
List<CrossLightsDTO> listCrossLights();
/**
* 查询灯组详情信息列表
* @return
*/
List<CrossLightsDTO> listLightsDetails();
}
package net.wanji.opt.service;
/**
* @author hfx
* @date 2023/1/10 11:12
* @desc 路口优化接口服务
*/
public interface CrossOptimizeService {
/**
* 路口实时优化
* @return
*/
String realtimeOptimize();
/**
* 路口方案优化
*/
// String schemeOptimize();
}
package net.wanji.opt.service;
import net.wanji.opt.dto.CrossPhaseDTO;
import java.util.List;
/**
* @author hfx
* @date 2023/1/13 10:09
* @desc 相位接口服务
*/
public interface CrossPhaseService {
/**
* 获取相位基础信息列表
*/
List<CrossPhaseDTO> listCrossPhase();
/**
* 获取相位详情信息列表
* @return
*/
List<CrossPhaseDTO> listPhaseDetails();
}
package net.wanji.opt.service;
import net.wanji.opt.dto.CrossSchedulesDTO;
import java.util.List;
import java.util.Map;
/**
* @author hfx
* @date 2023/1/17 15:55
* @desc 路口调度服务接口
*/
public interface CrossSchedulesService {
/**
* 获取路口调度详情信息列表
* @param crossId
* @return
*/
List<CrossSchedulesDTO> listCrossSchedulesDetails(String crossId);
}
package net.wanji.opt.service;
import net.wanji.opt.dto.CrossSchemeDTO;
import java.util.List;
/**
* @author hfx
* @date 2023/1/17 14:59
* @desc CrossSchemeService
*/
public interface CrossSchemeService {
/**
* 获取方案基础信息
* @param crossId
* @return
*/
List<CrossSchemeDTO> listCrossSchemeInfo(String crossId);
/**
* 获取方案详情信息
* @param crossId
* @return
*/
List<CrossSchemeDTO> listCrossSchemeDetails(String crossId);
}
package net.wanji.opt.service;
import net.wanji.opt.dto.CrossSchedulesDTO;
import net.wanji.opt.dto.CrossSectionDTO;
import java.util.List;
/**
* @author hfx
* @date 2023/1/17 17:48
* @desc 路口时段服务接口
*/
public interface CrossSectionService {
/**
* 获取路口时段信息列表
* @param crossId
* @param planId
* @return
*/
List<CrossSectionDTO> listCrossSectionInfo(String crossId, String planId);
}
package net.wanji.opt.service;
import net.wanji.opt.dto.LaneInfoDTO;
import net.wanji.opt.query.LaneQuery;
import java.util.List;
/**
* @author hfx
* @date 2023/1/13 19:09
* @desc LaneInfoService
*/
public interface LaneInfoService {
/**
* 查询车道基础信息
* @param query
* @return
*/
List<LaneInfoDTO> listLaneInfo(LaneQuery query);
/**
* 查询灯组车道信息
* @param query
* @return
*/
List<LaneInfoDTO> listLightsLaneInfo(LaneQuery query);
}
package net.wanji.opt.service.impl;
import net.wanji.common.utils.tool.BeanListUtils;
import net.wanji.opt.dao.mapper.CrossInfoMapper;
import net.wanji.opt.dto.CrossInfoDTO;
import net.wanji.opt.po.base.CrossInfoPO;
import net.wanji.opt.query.CrossQuery;
import net.wanji.opt.service.CrossInfoService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
/**
* @author hfx
* @date 2023/1/12 15:12
* @desc CrossInfoServiceImpl
*/
@Service
public class CrossInfoServiceImpl implements CrossInfoService {
@Resource
CrossInfoMapper crossInfoMapper;
public List<CrossInfoDTO> listCrossInfo(CrossQuery query) {
// 获取数据库数据
List<CrossInfoPO> crossInfoPOList = crossInfoMapper.listCrossInfo(query);
return BeanListUtils.populateList(crossInfoPOList, new ArrayList<>(), CrossInfoDTO.class);
}
}
package net.wanji.opt.service.impl;
import lombok.extern.slf4j.Slf4j;
import net.wanji.common.utils.tool.BeanListUtils;
import net.wanji.opt.dao.mapper.CrossLightsMapper;
import net.wanji.opt.dao.mapper.CrossPhaseLightsMapper;
import net.wanji.opt.dto.CrossLightsDTO;
import net.wanji.opt.dto.LaneInfoDTO;
import net.wanji.opt.po.base.CrossLightsPO;
import net.wanji.opt.po.base.CrossPhaseLightsPO;
import net.wanji.opt.service.CrossLightsService;
import net.wanji.opt.service.LaneInfoService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @author hfx
* @date 2023/1/13 17:48
* @desc CrossLightsServiceImpl
*/
@Service
@Slf4j
public class CrossLightsServiceImpl implements CrossLightsService {
@Resource
CrossLightsMapper crossLightsMapper;
@Resource
LaneInfoService laneInfoService;
@Override
public List<CrossLightsDTO> listCrossLights() {
List<CrossLightsPO> lightsPOList = crossLightsMapper.listCrossLights();
return BeanListUtils.populateList(lightsPOList, new ArrayList<>(), CrossLightsDTO.class);
}
@Override
public List<CrossLightsDTO> listLightsDetails() {
// 获取灯组基础信息
List<CrossLightsDTO> lightsDTOList = listCrossLights();
if(lightsDTOList.isEmpty()) {
return lightsDTOList;
}
// 获取灯组车道信息
List<LaneInfoDTO> laneInfoDTOList = laneInfoService.listLightsLaneInfo(null);
// 处理灯组车道信息,封装成Map:key是灯组ID,value 是车道集合
Map<Integer, List<LaneInfoDTO>> laneInfoMap = laneInfoDTOList.stream().collect(Collectors.groupingBy(LaneInfoDTO::getLightsId));
for(CrossLightsDTO lightsDTO: lightsDTOList) {
lightsDTO.setLaneInfos(laneInfoMap.get(lightsDTO.getId()));
}
return lightsDTOList;
}
}
package net.wanji.opt.service.impl;
import lombok.extern.slf4j.Slf4j;
import net.wanji.opt.common.Constants;
import net.wanji.opt.common.enums.CrossStatusEnum;
import net.wanji.opt.dto.*;
import net.wanji.opt.po.CrossDataRealtimePO;
import net.wanji.opt.service.CrossOptimizeService;
import net.wanji.opt.service.CrossPhaseService;
import net.wanji.opt.service.CrossSchedulesService;
import net.wanji.opt.service.CrossSchemeService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
/**
* @author hfx
* @date 2023/1/10 15:15
* @desc CrossOptimizeServiceImpl
*/
@Service
@Slf4j
public class CrossOptimizeServiceImpl implements CrossOptimizeService {
@Resource
CrossPhaseService crossPhaseService;
@Resource
CrossSchemeService crossSchemeService;
@Resource
CrossSchedulesService crossSchedulesService;
public String realtimeOptimize() {
// 获取路口实时数据
List<CrossDataRealtimePO> crossDataRealtimePOList = listCrossDataRealtime();
if(crossDataRealtimePOList.isEmpty()) {
return null;
}
// 获取路口转向实时数据
List<CrossTurnDataRealtimeDTO> turnDataRealtimeDTOList = listTurnDataRealtime();
// 获取方案详情信息
List<CrossSchemeDTO> schemeDTOList = crossSchemeService.listCrossSchemeDetails(null);
// 获取调度详情信息
// List<CrossSchedulesDTO> schedulesDTOList = crossSchedulesService.listCrossSchedulesDetails(null);
// 获取异常路口数据
List<CrossDataRealtimeDTO> abnormalCrossList = listAbnormalCross(crossDataRealtimePOList);
if(abnormalCrossList.isEmpty()) {
return null;
}
log.info("加载异常路口:{}条", abnormalCrossList.size());
for(CrossDataRealtimeDTO dto : abnormalCrossList) {
}
// 获取相位方案信息
// 计算相位优化配时
// 方案下发
return null;
}
/**
* 获取异常路口数据
* @return
*/
public List<CrossDataRealtimeDTO> listAbnormalCross(List<CrossDataRealtimePO> crossDataRealtimePOList) {
List<CrossDataRealtimeDTO> dtoList = new ArrayList<>();
CrossDataRealtimeDTO dto = null;
int status = 0;
for (CrossDataRealtimePO po: crossDataRealtimePOList) {
// 获取失衡、拥堵、溢出路口数据
if(Constants.NO.equals(po.getIsSpillover()) || Constants.NO.equals(po.getIsCongestion()) || Constants.NO.equals(po.getIsUnbalance())) {
continue;
}
if(Constants.YES.equals(po.getIsSpillover())) { // 溢出
status = CrossStatusEnum.SPILLOVER.getCode();
} else if(Constants.YES.equals(po.getIsCongestion())) { // 拥堵
status = CrossStatusEnum.CONGESTION.getCode();
} else if(Constants.YES.equals(po.getIsUnbalance())) { // 失衡
status = CrossStatusEnum.UNBALANCE.getCode();
}
dto = new CrossDataRealtimeDTO();
dto.setCrossId(po.getCrossId());
dto.setStatus(status);
dto.setDirList(null);
dto.setTurnList(null);
dtoList.add(dto);
}
return dtoList;
}
/**
* 获取转向实时数据
* @return
*/
public List<CrossTurnDataRealtimeDTO> listTurnDataRealtime() {
return new ArrayList<>();
}
/**
* 获取路口实时数据
* @return
*/
public List<CrossDataRealtimePO> listCrossDataRealtime() {
return new ArrayList<>();
}
}
package net.wanji.opt.service.impl;
import net.wanji.common.utils.tool.BeanListUtils;
import net.wanji.opt.dao.mapper.CrossPhaseLightsMapper;
import net.wanji.opt.dao.mapper.CrossPhaseMapper;
import net.wanji.opt.dto.CrossLightsDTO;
import net.wanji.opt.dto.CrossPhaseDTO;
import net.wanji.opt.po.base.CrossPhaseLightsPO;
import net.wanji.opt.po.base.CrossPhasePO;
import net.wanji.opt.service.CrossLightsService;
import net.wanji.opt.service.CrossPhaseService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @author hfx
* @date 2023/1/13 10:10
* @desc 相位接口服务实现
*/
@Service
public class CrossPhaseServiceImpl implements CrossPhaseService {
@Resource
CrossPhaseMapper crossPhaseMapper;
@Resource
CrossPhaseLightsMapper phaseLightsMapper;
@Resource
CrossLightsService crossLightsService;
@Override
public List<CrossPhaseDTO> listCrossPhase() {
// 获取相位信息
List<CrossPhasePO> crossPhasePOList = crossPhaseMapper.listCrossPhase();
return BeanListUtils.populateList(crossPhasePOList, new ArrayList<>(), CrossPhaseDTO.class);
}
@Override
public List<CrossPhaseDTO> listPhaseDetails() {
// 获取相位信息
List<CrossPhaseDTO> phaseDTOList = listCrossPhase();
if(phaseDTOList.isEmpty()) {
return phaseDTOList;
}
// 获取相位灯组信息
Map<Integer, List<CrossLightsDTO>> phaseLightsMap = listPhaseLights();
for(CrossPhaseDTO phase : phaseDTOList) {
phase.setLightsInfos(phaseLightsMap.get(phase.getId()));
}
return phaseDTOList;
}
/**
* 获取相位灯组信息
* @return
*/
private Map<Integer, List<CrossLightsDTO>> listPhaseLights() {
Map<Integer, List<CrossLightsDTO>> phaseLightsMap = new HashMap<>();
// 获取相位灯组信息
List<CrossPhaseLightsPO> phaseLightsPOList = phaseLightsMapper.listCrossPhaseLights();
if(phaseLightsPOList.isEmpty()) {
return phaseLightsMap;
}
// 获取灯组详情信息
List<CrossLightsDTO> lightsDTOList = crossLightsService.listLightsDetails();
// 处理灯组数据,封装成map:key是相位ID,value灯组集合
Map<Integer, CrossLightsDTO> lightsMap = lightsDTOList.stream().collect(Collectors.toMap(e -> e.getId(), e -> e));
Integer phaseId;
for(CrossPhaseLightsPO po : phaseLightsPOList) {
phaseId = po.getPhaseId();
if(phaseLightsMap.containsKey(phaseId)) {
lightsDTOList = phaseLightsMap.get(phaseId);
} else {
lightsDTOList = new ArrayList<>();
phaseLightsMap.put(phaseId, lightsDTOList);
}
lightsDTOList.add(lightsMap.get(po.getLightsId()));
}
return phaseLightsMap;
}
}
package net.wanji.opt.service.impl;
import lombok.extern.slf4j.Slf4j;
import net.wanji.common.utils.tool.BeanListUtils;
import net.wanji.opt.dao.mapper.CrossSchedulesMapper;
import net.wanji.opt.dto.CrossSchedulesDTO;
import net.wanji.opt.dto.CrossSectionDTO;
import net.wanji.opt.po.base.CrossSchedulesPlanPO;
import net.wanji.opt.service.CrossSchedulesService;
import net.wanji.opt.service.CrossSectionService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @author hfx
* @date 2023/1/17 15:58
* @desc CrossSchedulesServiceImpl
*/
@Service
@Slf4j
public class CrossSchedulesServiceImpl implements CrossSchedulesService {
@Resource
CrossSchedulesMapper crossSchedulesMapper;
@Resource
CrossSectionService crossSectionService;
@Override
public List<CrossSchedulesDTO> listCrossSchedulesDetails(String crossId) {
List<CrossSchedulesDTO> schedulesDTOList = new ArrayList<>();
// 获取调度计划信息
List<CrossSchedulesPlanPO> schedulesPlanPOList = crossSchedulesMapper.listSchedulesPlan(crossId, null);
schedulesDTOList = BeanListUtils.populateList(schedulesPlanPOList, schedulesDTOList, CrossSchedulesDTO.class);
// 获取日计划信息
List<CrossSectionDTO> sectionPOList = crossSectionService.listCrossSectionInfo(crossId, null);
// 处理日计划数据,封装成map:key是计划ID,value时段集合
Map<Integer, List<CrossSectionDTO>> sectionMap = sectionPOList.stream().collect(Collectors.groupingBy(CrossSectionDTO::getPlanId));
for(CrossSchedulesDTO schedules : schedulesDTOList) {
schedules.setSectionInfos(sectionMap.get(schedules.getPlanId()));
}
return schedulesDTOList;
}
}
package net.wanji.opt.service.impl;
import lombok.extern.slf4j.Slf4j;
import net.wanji.common.utils.tool.BeanListUtils;
import net.wanji.opt.dao.mapper.CrossSchemeMapper;
import net.wanji.opt.dto.CrossPhaseDTO;
import net.wanji.opt.dto.CrossSchemeDTO;
import net.wanji.opt.po.base.CrossSchemePO;
import net.wanji.opt.service.CrossPhaseService;
import net.wanji.opt.service.CrossSchemeService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @author hfx
* @date 2023/1/17 15:05
* @desc CrossSchemeServiceImpl
*/
@Service
@Slf4j
public class CrossSchemeServiceImpl implements CrossSchemeService {
@Resource
CrossSchemeMapper crossSchemeMapper;
@Resource
CrossPhaseService crossPhaseService;
@Override
public List<CrossSchemeDTO> listCrossSchemeInfo(String crossId) {
List<CrossSchemePO> schemePOList = crossSchemeMapper.listCrossSchemeInfo(crossId);
return BeanListUtils.populateList(schemePOList, new ArrayList<>(), CrossSchemeDTO.class);
}
@Override
public List<CrossSchemeDTO> listCrossSchemeDetails(String crossId) {
// 获取方案基础信息
List<CrossSchemeDTO> schemeDTOList = listCrossSchemeInfo(crossId);
// 获取相位详情信息
List<CrossPhaseDTO> phaseDTOList = crossPhaseService.listPhaseDetails();
// 处理相位数据,封装成map:key是方案ID,value相位信息
Map<Integer, List<CrossPhaseDTO>> phaseMap = phaseDTOList.stream().collect(Collectors.groupingBy(CrossPhaseDTO::getSchemeId));
for(CrossSchemeDTO scheme : schemeDTOList) {
// 获取方案对应的相位列表
scheme.setPhaseInfos(phaseMap.get(scheme.getId()));
}
return schemeDTOList;
}
}
package net.wanji.opt.service.impl;
import lombok.extern.slf4j.Slf4j;
import net.wanji.common.utils.tool.BeanListUtils;
import net.wanji.opt.dao.mapper.CrossSectionMapper;
import net.wanji.opt.dto.CrossSectionDTO;
import net.wanji.opt.po.base.CrossSectionPO;
import net.wanji.opt.service.CrossSectionService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
/**
* @author hfx
* @date 2023/1/17 17:48
* @desc CrossSectionServiceImpl
*/
@Service
@Slf4j
public class CrossSectionServiceImpl implements CrossSectionService {
@Resource
CrossSectionMapper crossSectionMapper;
@Override
public List<CrossSectionDTO> listCrossSectionInfo(String crossId, String planId) {
// 获取时段信息
List<CrossSectionPO> sectionPOList = crossSectionMapper.listCrossSectionInfo();
return BeanListUtils.populateList(sectionPOList, new ArrayList<>(), CrossSectionDTO.class);
}
}
package net.wanji.opt.service.impl;
import lombok.extern.slf4j.Slf4j;
import net.wanji.common.utils.tool.BeanListUtils;
import net.wanji.opt.dao.mapper.LaneInfoMapper;
import net.wanji.opt.dao.mapper.LaneLightsMapper;
import net.wanji.opt.dto.LaneInfoDTO;
import net.wanji.opt.po.base.LaneInfoPO;
import net.wanji.opt.po.base.LaneLightsPO;
import net.wanji.opt.query.LaneQuery;
import net.wanji.opt.service.LaneInfoService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @author hfx
* @date 2023/1/13 19:13
* @desc LaneInfoServiceImpl
*/
@Slf4j
@Service
public class LaneInfoServiceImpl implements LaneInfoService {
@Resource
LaneInfoMapper laneInfoMapper;
@Resource
LaneLightsMapper laneLightsMapper;
@Override
public List<LaneInfoDTO> listLaneInfo(LaneQuery query) {
// 获取车道基础信息
List<LaneInfoPO> laneInfoPOList = laneInfoMapper.listLaneInfo();
return BeanListUtils.populateList(laneInfoPOList, new ArrayList<>(), LaneInfoDTO.class);
}
@Override
public List<LaneInfoDTO> listLightsLaneInfo(LaneQuery query) {
// 获取车道信息
List<LaneInfoDTO> laneInfoDTOList = listLaneInfo(query);
if(laneInfoDTOList.isEmpty()) {
return laneInfoDTOList;
}
// 获取灯组车道信息
List<LaneLightsPO> lightLanePOList = laneLightsMapper.listLightLane();
if(lightLanePOList.isEmpty()) {
return laneInfoDTOList;
}
// 处理灯组车道信息,封装成Map:key是车道ID,value 是灯组ID
Map<String, Integer> lightLaneMap = lightLanePOList.stream().collect(Collectors.toMap(po -> po.getLaneId(), po -> po.getLightsId()));
List<LaneInfoDTO> newLaneList = new ArrayList<>();
String laneId;
for(LaneInfoDTO lane : laneInfoDTOList) {
laneId = lane.getId();
if(!lightLaneMap.containsKey(laneId)) {
continue;
}
lane.setLightsId(lightLaneMap.get(laneId));
newLaneList.add(lane);
}
return newLaneList;
}
}
package net.wanji.opt.task;
import lombok.extern.slf4j.Slf4j;
import net.wanji.opt.service.CrossOptimizeService;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
/**
* @author hfx
* @date 2023/1/16 16:39
* @desc RealtimeOptimizeTask
*/
@Component
@Slf4j
public class RealtimeOptimizeTask {
@Resource
CrossOptimizeService crossOptimizeService;
@Scheduled(cron = "* 0/1 * * * ? ")
public void run() {
log.info("RealtimeOptimizeTask ...");
crossOptimizeService.realtimeOptimize();
}
}
\ No newline at end of file
server:
port: 39001
servlet:
display-name: Wanji
context-path: /opt
multipart:
max-file-size: 50MB
max-request-size: 50MB
tomcat:
threads:
max: 10000
#线程池配置
threadPool:
corePoolSize: 5
maxPoolSize: 200
queueCapacity: 5
keepAliveTime: 60000
spring:
datasource:
dynamic:
primary: master
datasource:
master:
type: com.alibaba.druid.pool.DruidDataSource
url: jdbc:mysql://10.100.1.59:3306/t_signal_control?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&sessionVariables=sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'&useSSL=false&useCursorFetch=true
username: root
password: Wanji300552
driverClassName: com.mysql.cj.jdbc.Driver
slave:
type: com.alibaba.druid.pool.DruidDataSource
url: jdbc:mysql://10.100.1.59:3306/t_signal_control?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&sessionVariables=sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'&useSSL=false&useCursorFetch=true
username: root
password: Wanji300552
driverClassName: com.mysql.cj.jdbc.Driver
webService:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://10.100.1.59:3306/t_signal?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&sessionVariables=sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'&useSSL=false&useCursorFetch=true
username: root
password: Wanji300552
type: com.alibaba.druid.pool.DruidDataSource
redis:
host: 10.100.1.59
port: 6379
password: Wanji300552
jedis:
pool:
max-active: 200
max-wait: 5000
max-idle: 20
min-idle: 10
timeout: 5000
database: 3
# 信号平台
system:
address:
# UTC服务地址
utc: http://10.100.1.59:32000/utc
# control服务地址
control: http://10.100.1.59:32000/control
\ No newline at end of file
server:
port: 32001
servlet:
display-name: Wanji
context-path: /web
multipart:
max-file-size: 50MB
max-request-size: 50MB
tomcat:
threads:
max: 10000
#线程池配置
threadPool:
corePoolSize: 5
maxPoolSize: 200
queueCapacity: 5
keepAliveTime: 60000
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://10.100.1.59:3306/t_signal?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&sessionVariables=sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'&useSSL=false&useCursorFetch=true
username: root
password: Wanji300552
type: com.alibaba.druid.pool.DruidDataSource
filters: stat
minIdle: 50
maxActive: 200
initialSize: 10
maxWait: 5000
minEvictableIdleTimeMillis: 60000
timeBetweenEvictionRunsMillis: 30000
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
keepAlive: false
validationQuery: SELECT 1
poolPreparedStatements: false
maxPoolPreparedStatementPerConnectionSize: -1
maxOpenPreparedStatements: -1
logAbandoned: true
encoding:
force: true
charset: UTF-8
enabled: true
redis:
host: 10.100.1.59
port: 6379
password: Wanji300552
jedis:
pool:
max-active: 200
max-wait: 5000
max-idle: 20
min-idle: 10
timeout: 5000
database: 3
# 信号平台
signal:
spring:
application:
name: signal-optimize-service
profiles:
active: dev
jackson:
mapper:
accept_case_insensitive_properties: true
main:
allow-circular-references: true
mvc:
pathmatch:
matching-strategy: ant_path_matcher
service:
name: signal-optimize-service
mybatis:
type-aliases-package: net.wanji.*.model
mapper-locations: classpath:mapper/*.xml,classpath:mapper/*/*.xml
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
mapper:
mappers:
- net.wanji.opt.dao.mapper.MyBaseMapper
not-empty: false
identity: MYSQL
pagehelper:
helper-dialect: mysql
reasonable: false
# pagehelper分页 配置参数 supportMethodsArguments 建议不要全局设置
# https://www.cnblogs.com/liran123/p/12889093.html
support-methods-arguments: false
params: count=countSql
mybatis-plus:
mapper-locations: classpath:mapper/*.xml,classpath:mapper/*/*.xml
typeAliasesPackage: net.wanji.opt.po.base
check-config-location: true
configuration:
#是否开启自动驼峰命名规则(camel case)映射
map-underscore-to-camel-case: true
#全局地开启或关闭配置文件中的所有映射器已经配置的任何缓存
cache-enabled: false
call-setters-on-nulls: true
#配置JdbcTypeForNull, oracle数据库必须配置
jdbc-type-for-null: 'null'
#MyBatis 自动映射时未知列或未知属性处理策略 NONE:不做任何处理 (默认值), WARNING:以日志的形式打印相关警告信息, FAILING:当作映射失败处理,并抛出异常和详细信息
auto-mapping-unknown-column-behavior: warning
#开启SQL打印
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
package ${package.Controller};
import ${package.Service}.${table.serviceName};
import ${package.Entity}.${entity};
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
<#if superControllerClassPackage?? >
import ${superControllerClassPackage};
</#if>
/**
* @Description: [${table.comment} 接口API]</p>
* @author ${author}
* @version 1.0
* Created on ${date}
*/
@Slf4j
@RestController
@RequestMapping("<#if package.ModuleName??>/${package.ModuleName}</#if><#if package.SubModuleName??>/${package.SubModuleName}</#if>/${table.viewName}")
@Api(value = ${table.comment}接口, description = ${table.comment}接口, tags = {${table.comment}})
<#if superControllerClass??>
public class ${table.controllerName} extends ${superControllerClass} {
<#else>
public class ${table.controllerName} {
</#if>
/**
* <p>Description:[${table.comment}服务]</p>
*/
@Autowired
private ${table.serviceName} ${table.serviceName?uncap_first};
}
package ${package.Entity};
<#list table.importPackages as pkg>
import ${pkg};
</#list>
import lombok.Data;
import javax.persistence.*;
/**
* @Description: [${table.comment}实体类]</p>
* @author ${author}
* @version 1.0
* Created on ${date}
*/
@Data
<#if tableAnnotation??&&tableAnnotation >
@Table(name = "${table.name}")
</#if>
<#if superEntityClass?? >
public class ${entity} extends ${superEntityClass}<#if activeRecord ><${entity}></#if> {
<#elseif activeRecord>
public class ${entity} extends Model<${entity}> {
<#else>
public class ${entity} {
</#if>
<#list table.fields as field>
/**
* <#if field.comment??&& field.comment!= "">${field.comment}</#if>
**/
<#if field.keyFlag >
<#assign keyPropertyName=field.propertyName/>
@Id
</#if>
<#if field.convert >
@Column(name = "${field.name}")
</#if>
private ${field.propertyType} ${field.propertyName};
<#if cfg.rangeDateFileds?seq_contains(field.propertyName)>
/**
* <p>${field.comment}范围查询-开始</p>
*/
private String ${field.propertyName}Start;
/**
* <p>${field.comment}范围查询-结束</p>
*/
private String ${field.propertyName}End;
</#if>
</#list>
}
package ${package.Mapper};
import ${package.Entity}.${entity};
import ${superMapperClassPackage};
import org.springframework.stereotype.Repository;
/**
* @Description: [${table.comment}持久层实现]</p>
* @author ${author}
* @version 1.0
* Created on ${date}
*/
@Repository
public interface ${table.mapperName} extends ${superMapperClass}<${entity}> {
}
\ 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="${package.Mapper}.${table.mapperName}">
<#if enableCache>
<!-- 开启二级缓存 -->
<cache type="org.mybatis.caches.ehcache.LoggingEhcache"/>
</#if>
<#if baseResultMap>
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="${package.Entity}.${entity}">
<#list table.fields as field>
<#if field.keyFlag >
<id column="${field.name}" property="${field.propertyName}"/>
<#else>
<result column="${field.name}" property="${field.propertyName}"/>
</#if>
</#list>
</resultMap>
</#if>
<!--基本字段列表-->
<sql id="Base_Column_List">
<#list table.fields as field>
${field.name}<#sep>,
</#list>
</sql>
</mapper>
package ${package.Service};
import ${package.Entity}.${entity};
import org.springframework.stereotype.Repository;
/**
* @Description: [${table.comment}service]</p>
* @author ${author}
* @version 1.0
* Created on ${date}
*/
@Repository
public interface ${table.serviceName} extends ${superServiceClass}<${entity}> {
}
package ${package.ServiceImpl};
import ${package.Entity}.${entity};
import ${package.Mapper}.${table.mapperName};
import ${package.Service}.${table.serviceName};
import org.springframework.stereotype.Service;
/**
* @Description: [${table.comment}service实现]</p>
* @author ${author}
* @version 1.0
* Created on ${date}
*/
@Service
public class ${table.serviceImplName} extends ${superServiceImplClass}<${entity}, ${table.mapperName}> implements ${table.serviceName} {
}
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<property name="encoding" value="UTF-8"/>
<property name="normal-pattern"
value="%date{yyyy-MM-dd HH:mm:ss.SSS} %-5level[%thread]%logger{56}.%method:%L -%msg%n"/>
<property name="LOG_PATH" value="./logs"/>
<!-- 配置打印DEBUG级别日志的环境. 多个使用逗号隔开. -->
<springProfile name="dev,test">
<!-- 如果需要,请自行开启spring或其他组件的debug级别 -->
<logger name="net.wanji.web" level="info"/>
</springProfile>
<!-- 配置打印INFO级别日志的环境 -->
<springProfile name="prod">
<logger name="net.wanji.web" level="info" />
</springProfile>
<appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>
${normal-pattern}
</pattern>
</layout>
</appender>
<appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_PATH}/info.log</file>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>DENY</onMatch>
<onMismatch>ACCEPT</onMismatch>
</filter>
<encoder>
<pattern>${normal-pattern}</pattern>
<charset>${encoding}</charset>
</encoder>
<!--滚动策略-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--路径-->
<fileNamePattern>${LOG_PATH}/info.%d.log</fileNamePattern>
<MaxHistory>30</MaxHistory>
</rollingPolicy>
</appender>
<appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_PATH}/error.log</file>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>>
<encoder>
<pattern>${normal-pattern}</pattern>
<charset>${encoding}</charset>
</encoder>
<!--滚动策略-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--路径-->
<fileNamePattern>${LOG_PATH}/error.%d.log</fileNamePattern>
<MaxHistory>30</MaxHistory>
</rollingPolicy>
</appender>
<root level="INFO">
<appender-ref ref="consoleLog"/>
<appender-ref ref="fileInfoLog"/>
<appender-ref ref="fileErrorLog"/>
</root>
</configuration>
\ 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.CrossInfoMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="net.wanji.opt.po.base.CrossInfoPO">
<result property="id" column="id"/>
<result property="name" column="name"/>
<result property="type" column="type"/>
<result property="level" column="level"/>
<result property="areaCode" column="area_code"/>
<result property="location" column="location"/>
<result property="isSignal" column="is_signal"/>
<result property="isStart" column="is_start"/>
<result property="isSend" column="is_send"/>
</resultMap>
<!-- 查询路口列表信息 -->
<select id="listCrossInfo" parameterType="net.wanji.opt.query.CrossQuery" resultMap="BaseResultMap">
select
id
,name
,type
,level
,area_code
,location
,is_signal
,is_start
,is_send
from
t_base_cross_info
where 1 = 1
<if test="isSignal != null and isSignal != '' ">
and is_signal = #{isSignal}
</if>
<if test="isStart != null and isStart != '' ">
and is_start = #{isStart}
</if>
<if test="isSend != null and isSend != '' ">
and is_send = #{isSend}
</if>
</select>
</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.CrossLightsMapper">
<!-- 通用查询映射结果 -->
<resultMap type="net.wanji.opt.po.base.CrossLightsPO" id="BaseResultMap">
<result property="id" column="id"/>
<result property="lightsNo" column="lights_no"/>
<result property="type" column="type"/>
<result property="dir" column="dir"/>
<result property="sort" column="sort"/>
<result property="crossId" column="cross_id"/>
</resultMap>
<!-- 查询灯组列表信息 -->
<select id="listCrossLights" resultMap="BaseResultMap">
select
id
,lights_no
,type
,dir
,sort
,cross_id
from
t_base_cross_lights
where 1=1
<if test="crossId != null and crossId != ''">
and cross_id = #{crossId}
</if>
</select>
</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.CrossPhaseLightsMapper">
<!-- 通用查询映射结果 -->
<resultMap type="net.wanji.opt.po.base.CrossPhaseLightsPO" id="BaseResultMap">
<result property="lightsId" column="lights_id"/>
<result property="phaseId" column="phase_id"/>
<result property="crossId" column="cross_id"/>
</resultMap>
<!-- 查询相位灯组信息 -->
<select id="listCrossPhaseLights" resultMap="BaseResultMap">
select
lights_id
,phase_id
,cross_id
from
t_base_cross_phase_lights
where 1=1
<if test="crossId != null and crossId != ''">
and cross_id = #{crossId}
</if>
<if test="phaseId != null and phaseId != ''">
and phase_id = #{phaseId}
</if>
</select>
</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.CrossPhaseMapper">
<!-- 通用查询映射结果 -->
<resultMap type="net.wanji.opt.po.base.CrossPhasePO" id="BaseResultMap">
<result property="id" column="id"/>
<result property="phaseNo" column="phase_no"/>
<result property="name" column="name"/>
<result property="sort" column="sort"/>
<result property="crossId" column="cross_id"/>
<result property="schemeId" column="plan_id"/>
<result property="ringNo" column="ring_no"/>
<result property="groupNo" column="group_no"/>
<!--<result property="type" column="type"/>-->
<result property="controlMode" column="control_mode"/>
<result property="phaseTime" column="phase_time"/>
<result property="greenTime" column="green_time"/>
<result property="greenFlashTime" column="green_flash_time"/>
<result property="pedFlashTime" column="ped_flash_time"/>
<result property="yellowTime" column="yellow_time"/>
<result property="redTime" column="red_time"/>
<result property="minGreenTime" column="min_green_time"/>
<result property="maxGreenTime" column="max_green_time"/>
<result property="gmtCreate" column="gmt_create"/>
<result property="gmtModified" column="gmt_modified"/>
</resultMap>
<select id="listCrossPhase" resultMap="BaseResultMap">
select
id
,phase_no
,name
,sort
,cross_id
,plan_id
,ring_no
,group_no
,control_mode
,phase_time
,green_time
,green_flash_time
,ped_flash_time
,yellow_time
,red_time
,min_green_time
,max_green_time
from
t_base_cross_phase
where 1=1
<if test="crossId != null and crossId != ''">
and cross_id = #{crossId}
</if>
<if test="schemeId != null and schemeId != ''">
and plan_id = #{schemeId}
</if>
</select>
</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.CrossPlanMapper">
<!-- 通用查询映射结果 -->
<resultMap type="net.wanji.opt.po.base.CrossPlanPO" id="BaseResultMap">
<result property="id" column="id"/>
<result property="planNo" column="plan_no"/>
<result property="name" column="name"/>
<result property="crossId" column="cross_id"/>
</resultMap>
<!-- 查询计划基础信息列表 -->
<select id="listCrossPlanInfo" parameterType="String" resultMap="BaseResultMap">
select
id
,plan_no
,name
,cross_id
from
t_base_cross_plan
where 1=1
<if test="crossId != null and crossId != ''">
and cross_id = #{crossId}
</if>
</select>
</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.CrossSchedulesMapper">
<!-- 通用查询映射结果 -->
<resultMap type="net.wanji.opt.po.base.CrossSchedulesPO" id="BaseResultMap">
<result property="id" column="id"/>
<result property="name" column="name"/>
<result property="crossId" column="cross_id"/>
<result property="status" column="status"/>
</resultMap>
<resultMap type="net.wanji.opt.po.base.CrossSchedulesPlanPO" id="CrossSchedulesPlanPO">
<result property="schedulesId" column="schedulesId"/>
<result property="schedulesName" column="schedulesName"/>
<result property="status" column="status"/>
<result property="planId" column="planId"/>
<result property="planNo" column="planNo"/>
<result property="crossId" column="cross_id"/>
<result property="week" column="week"/>
<result property="specialDate" column="specialDate"/>
</resultMap>
<!-- 查询调度基础信息列表 -->
<select id="listCrossSchedulesInfo" parameterType="String" resultMap="BaseResultMap">
select
id
,plan_no
,name
,cross_id
from
t_base_cross_plan
where 1=1
<if test="crossId != null and crossId != ''">
and cross_id = #{crossId}
</if>
</select>
<!-- 查询调度计划信息列表 -->
<select id="listSchedulesPlan" parameterType="String" resultMap="CrossSchedulesPlanPO">
SELECT
s.id schedules_id
,s.`name` schedules_name
,s.`status`
,s.cross_id
,p.id plan_id
,p.plan_no
,sp.`week`
,sp.special_date
FROM
t_base_cross_schedules s
,t_base_cross_schedules_plan sp
,t_base_cross_plan p
WHERE
s.id = sp.schedules_id
AND p.id = sp.plan_id
<if test="crossId != null and crossId != ''">
and cross_id = #{crossId}
</if>
<if test="schedulesId != null and schedulesId != ''">
and s.id = #{schedulesId}
</if>
</select>
</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.CrossSchemeMapper">
<!-- 通用查询映射结果 -->
<resultMap type="net.wanji.opt.po.base.CrossSchemePO" id="BaseResultMap">
<result property="id" column="id"/>
<result property="schemeNo" column="scheme_no"/>
<result property="name" column="name"/>
<result property="crossId" column="cross_id"/>
<result property="cycle" column="cycle"/>
<result property="coordPhase" column="coord_phase"/>
<result property="offset" column="offset"/>
</resultMap>
<!-- 查询方案基础信息列表 -->
<select id="listCrossSchemeInfo" parameterType="String" resultMap="BaseResultMap">
select
id
,scheme_no
,name
,cross_id
,cycle
,coord_phase
,offset
from
t_base_cross_scheme
where 1=1
<if test="crossId != null and crossId != ''">
and cross_id = #{crossId}
</if>
</select>
</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.CrossSectionMapper">
<!-- 通用查询映射结果 -->
<resultMap type="net.wanji.opt.po.base.CrossSectionPO" id="BaseResultMap">
<result property="id" column="id"/>
<result property="sectionNo" column="section_no"/>
<result property="startTime" column="start_time"/>
<result property="endTime" column="end_time"/>
<result property="crossId" column="cross_id"/>
<result property="planId" column="plan_id"/>
<result property="schemeId" column="scheme_id"/>
<result property="controlMode" column="control_mode"/>
</resultMap>
<!-- 查询时段基础信息列表 -->
<select id="listCrossSectionInfo" parameterType="String" resultMap="BaseResultMap">
select
id
,section_no
,start_time
,end_time
,cross_id
,plan_id
,scheme_id
,control_mode
from
t_base_cross_section
where 1=1
<if test="crossId != null and crossId != ''">
and cross_id = #{crossId}
</if>
<if test="planId != null and planId != ''">
and plan_id = #{planId}
</if>
</select>
</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.LaneInfoMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="net.wanji.opt.po.base.LaneInfoPO">
<result property="id" column="id"/>
<result property="code" column="code"/>
<result property="sort" column="sort"/>
<result property="type" column="type"/>
<result property="dir" column="dir"/>
<result property="turn" column="turn"/>
<result property="category" column="category"/>
<result property="rid" column="rid"/>
<result property="crossId" column="cross_id"/>
<result property="length" column="length"/>
<result property="width" column="width"/>
</resultMap>
<!-- 查询车道基础信息列表 -->
<select id="listLaneInfo" parameterType="String" resultMap="BaseResultMap">
select
id
,code
,sort
,type
,dir
,turn
,category
,rid
,cross_id
,length
,width
from
t_base_lane_info
where 1 = 1
<if test="crossId != null and crossId != '' ">
and cross_id = #{crossId}
</if>
<if test="type != null and type != '' ">
and type = #{type}
</if>
<if test="rid != null and rid != '' ">
and rid = #{rid}
</if>
</select>
</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.LaneLightsMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="net.wanji.opt.po.base.LaneLightsPO">
<result property="laneId" column="lane_id"/>
<result property="crossId" column="cross_id"/>
<result property="lightsId" column="lights_id"/>
</resultMap>
<!-- 查询灯组车道列表信息 -->
<select id="listLightLane" parameterType="String" resultMap="BaseResultMap">
select
id
,lights_id
,lane_id
,cross_id
from
t_base_cross_lane_lights
where 1=1
<if test="crossId != null and crossId != '' ">
and cross_id = #{crossId}
</if>
<if test="lightsId != null and lightsId != '' ">
and lights_id = #{lightsId}
</if>
</select>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
<context id="Mysql" defaultModelType="flat">
<property name="javaFileEncoding" value="UTF-8"/>
<!-- xml配置文件中分隔符 -->
<property name="beginningDelimiter" value="`"/>
<property name="endingDelimiter" value="`"/>
<!-- 配置通用的Mapper基类 -->
<plugin type="tk.mybatis.mapper.generator.MapperPlugin">
<property name="mappers" value="com.xiaojukeji.ep.ip.dao.util.MyBaseMapper"/>
</plugin>
<jdbcConnection connectionURL="jdbc:mysql://172.20.24.58/didi-assets"
driverClass="com.mysql.jdbc.Driver"
userId="root"
password="Eifqr!Kge">
</jdbcConnection>
<javaModelGenerator targetPackage="${targetModelPackage}" targetProject="${targetJavaProject}"/>
<sqlMapGenerator targetPackage="${targetXMLPackage}" targetProject="${targetResourcesProject}"/>
<javaClientGenerator targetPackage="${targetMapperPackage}" targetProject="${targetJavaProject}" type="MIXEDMAPPER" />
<!-- 控制生成文件和XML的内容 -->
<table tableName="outsource_user" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false"
enableSelectByExample="false" selectByExampleQueryId="false" />
</context>
</generatorConfiguration>
\ 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