Commit 3a049925 authored by duanruiming's avatar duanruiming

[update] opt优化

parent a0e43a4d
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.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
......@@ -17,6 +12,6 @@ public interface CrossInfoService {
* 查询路口基础信息列表
* @return
*/
List<CrossInfoDTO> listCrossInfo(CrossQuery query);
// List<CrossInfoDTO> listCrossInfo(CrossQuery 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
......@@ -20,14 +11,14 @@ import java.util.List;
@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);
}
// @Resource
// CrossInfoMapper crossInfoMapper;
//
// public List<CrossInfoDTO> listCrossInfo(CrossQuery query) {
//
// // 获取数据库数据
// List<CrossInfoPO> crossInfoPOList = crossInfoMapper.listCrossInfo(query);
// return BeanListUtils.populateList(crossInfoPOList, new ArrayList<>(), CrossInfoDTO.class);
// }
}
......@@ -10,16 +10,13 @@ import lombok.extern.slf4j.Slf4j;
import net.wanji.common.dto.CrossIdDTO;
import net.wanji.common.utils.tool.CrossUtil;
import net.wanji.databus.dao.entity.RidInfoEntity;
import net.wanji.databus.dao.mapper.CrossDataHistMapper;
import net.wanji.databus.dao.mapper.CrossDataRealtimeMapper;
import net.wanji.databus.dao.mapper.CrossDirDataHistMapper;
import net.wanji.databus.dao.mapper.RidInfoMapper;
import net.wanji.databus.dao.mapper.*;
import net.wanji.databus.po.CrossDataHistPO;
import net.wanji.databus.po.CrossDataRealtimePO;
import net.wanji.databus.po.CrossDirDataHistPO;
import net.wanji.feign.pojo.vo.SchemeSendVO;
import net.wanji.databus.po.CrossInfoPO;
import net.wanji.databus.vo.SchemeSendVO;
import net.wanji.opt.dao.mapper.CrossDirInfoMapper;
import net.wanji.opt.dao.mapper.CrossInfoMapper;
import net.wanji.opt.dao.mapper.CrossPhaseMapper;
import net.wanji.opt.dao.mapper.CrossSchemeMapper;
import net.wanji.opt.dao.mapper.CrossSchemeOptLogMapper;
......@@ -30,7 +27,6 @@ import net.wanji.opt.dto.OptDataExtend;
import net.wanji.opt.dto.SendManualDTO;
import net.wanji.opt.dto.strategy.AddOrUpdateSceneDTO;
import net.wanji.opt.dto.strategy.QuerySceneDTO;
import net.wanji.opt.po.base.CrossInfoPO;
import net.wanji.opt.po.base.CrossPhasePO;
import net.wanji.opt.po.base.CrossSchemeOptLogPO;
import net.wanji.opt.po.base.CrossSchemePO;
......@@ -44,15 +40,7 @@ import net.wanji.opt.vo.SchemeOptSendVO;
import net.wanji.opt.vo.SchemeOptVO;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Comparator;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.TreeSet;
import java.util.*;
import java.util.stream.Collectors;
/**
......
......@@ -13,13 +13,13 @@ import net.wanji.databus.bo.CrossDirDataHistAvgBO;
import net.wanji.databus.dao.mapper.CrossDataRealtimeMapper;
import net.wanji.databus.dao.mapper.CrossDirDataHistMapper;
import net.wanji.databus.dao.mapper.CrossDirDataRealtimeMapper;
import net.wanji.databus.dao.mapper.CrossInfoMapper;
import net.wanji.databus.po.CrossDataRealtimePO;
import net.wanji.databus.po.CrossDirDataRealtimePO;
import net.wanji.opt.dao.mapper.CrossInfoMapper;
import net.wanji.databus.po.CrossInfoPO;
import net.wanji.opt.dao.mapper.CrossSchemeOptLogMapper;
import net.wanji.opt.dto.CrossIdAndMinutesDTO;
import net.wanji.opt.dto.OptDataExtend;
import net.wanji.opt.po.base.CrossInfoPO;
import net.wanji.opt.po.base.CrossSchemeOptLogPO;
import net.wanji.opt.service.EvaluateService;
import net.wanji.opt.vo.EvaluateCrossDetailVO;
......
......@@ -9,39 +9,25 @@ import net.wanji.common.enums.EventAlarmEnum;
import net.wanji.common.enums.EventAlarmSourceEnum;
import net.wanji.common.utils.tool.CrossUtil;
import net.wanji.databus.dao.entity.RidInfoEntity;
import net.wanji.databus.dao.mapper.CrossDataRealtimeMapper;
import net.wanji.databus.dao.mapper.CrossDirDataHistMapper;
import net.wanji.databus.dao.mapper.CrossTurnDataRealtimeMapper;
import net.wanji.databus.dao.mapper.RidInfoMapper;
import net.wanji.databus.dao.mapper.*;
import net.wanji.databus.po.CrossDataRealtimePO;
import net.wanji.databus.po.CrossDirDataHistPO;
import net.wanji.databus.po.CrossInfoPO;
import net.wanji.databus.po.CrossTurnDataRealtimePO;
import net.wanji.databus.vo.AbnormalCrossListVO;
import net.wanji.opt.dao.mapper.CrossDirInfoMapper;
import net.wanji.opt.dao.mapper.CrossInfoMapper;
import net.wanji.opt.dao.mapper.trend.EventAlarmMapper;
import net.wanji.opt.dao.mapper.trend.GreenwaveInfoMapper;
import net.wanji.opt.dto.trend.AbnormalCrossListDTO;
import net.wanji.opt.dto.trend.GreenwaveListDTO;
import net.wanji.opt.po.base.CrossInfoPO;
import net.wanji.opt.po.trend.EventAlarmPO;
import net.wanji.opt.service.TrendService;
import net.wanji.opt.vo.AbnormalCrossDetailVO;
import net.wanji.opt.vo.AbnormalCrossStats;
import net.wanji.opt.vo.AbnormalCrossVO;
import net.wanji.opt.vo.EventAlarmVO;
import net.wanji.opt.vo.GreenwaveListVO;
import net.wanji.opt.vo.GreenwaveStats;
import net.wanji.opt.vo.*;
import org.springframework.stereotype.Service;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.*;
import java.util.stream.Collectors;
/**
......
......@@ -4,7 +4,7 @@ import lombok.extern.slf4j.Slf4j;
import net.wanji.common.framework.exception.FeignServiceException;
import net.wanji.common.framework.rest.JsonViewObject;
import net.wanji.databus.entity.develop.servicedevelop.develop.StatusCodeEnum;
import net.wanji.feign.pojo.vo.SchemeSendVO;
import net.wanji.databus.vo.SchemeSendVO;
import net.wanji.feign.service.UtcFeignClients;
import net.wanji.opt.cache.CrossDirTurnPhaseCache;
import net.wanji.opt.dao.mapper.CrossSchemeOptLogMapper;
......
package net.wanji.opt.task;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import net.wanji.common.enums.CrossStatusEnum;
import net.wanji.common.framework.Constants;
import net.wanji.databus.dao.mapper.CrossDataRealtimeMapper;
import net.wanji.databus.po.CrossDataRealtimePO;
import net.wanji.opt.dto.CrossTurnDataRealtimeDTO;
import net.wanji.opt.dto.LaneInfoDTO;
import net.wanji.opt.kafka.ConsumerHandler;
import net.wanji.opt.po.kafka.LanePeriodicDataPO;
import net.wanji.opt.query.LaneQuery;
import net.wanji.opt.service.CrossOptimizeService;
import net.wanji.opt.service.impl.LaneInfoServiceImpl;
import org.springframework.beans.BeanUtils;
......@@ -92,40 +88,20 @@ public class CrossMonitorTask {
BeanUtils.copyProperties(po, dto);
dto.setCrossId(po.getCrossId());
dto.setStatus(status);
dto.setDirList(null);
dto.setTurnList(null);
dtoList.add(dto);
}
return dtoList;
}
/**
* 获取路口实时监测数据
* 获取路口实时监测数据,获取数据中心存入到数据库中的数据
* (暂定从数据中心kafka获取)
*
* @return
*/
public List<CrossDataRealtimePO> listCrossDataRealtime() {
// todo test数据
List<CrossDataRealtimePO> crossDataRealtimePOList = new ArrayList<>(1);
CrossDataRealtimePO crossDataRealtimePO = crossDataRealtimeMapper.selectByCrossId("14Q1409IRF0");
CrossDataRealtimePO crossDataRealtimePO1 = crossDataRealtimeMapper.selectByCrossId("14Q0S09IQB0");
crossDataRealtimePOList.add(crossDataRealtimePO);
crossDataRealtimePOList.add(crossDataRealtimePO1);
String lanePeriodicData = consumerHandler.getTopicMessage("JN040001LanePeriodicData");
LanePeriodicDataPO lanePeriodicDataPO = JSONObject.parseObject(lanePeriodicData, LanePeriodicDataPO.class);
// todo 对数据进行处理,可能主要是CrossTurnDataRealtimeDTO中的车间距,车时距等配置修改
CrossTurnDataRealtimeDTO crossTurnDataRealtimeDTO = new CrossTurnDataRealtimeDTO();
// 查询车道信息表
LaneQuery laneQuery = new LaneQuery();
List<LaneInfoDTO> laneInfoDTOS = laneInfoService.listLaneInfo(laneQuery);
// 将车道信息表转存路口实时数据CrossDataRealtimePO,转向数据CrossTurnDataRealtimeDTO,方向数据CrossDirDataHistPO
// 通过数据进行优化
return crossDataRealtimePOList;
List<CrossDataRealtimePO> crossDataRealtimePOS = crossDataRealtimeMapper.selectList(new LambdaQueryWrapper<>());
return crossDataRealtimePOS;
}
}
\ No newline at end of file
......@@ -3,7 +3,7 @@ package net.wanji.opt.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import net.wanji.feign.pojo.vo.SchemeSendVO;
import net.wanji.databus.vo.SchemeSendVO;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
......
<?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>
<select id="selectByCrossIds" resultType="net.wanji.opt.po.base.CrossInfoPO">
select
id,name,type,level,area_code,is_signal,is_start,is_send,location
from t_base_cross_info
where id IN
<foreach collection="crossIdList" item="crossId" separator="," open="(" close=")">
#{crossId}
</foreach>
</select>
<select id="selectById" resultType="net.wanji.opt.po.base.CrossInfoPO">
select
id,name,type,level,area_code,is_signal,is_start,is_send,location
from t_base_cross_info
where id = #{crossId}
</select>
<select id="selectByName" resultType="net.wanji.opt.po.base.CrossInfoPO">
select
id,name,type,level,area_code,is_signal,is_start,is_send,location
from t_base_cross_info
<where>
<if test="name != null and name != ''">
AND name LIKE CONCAT('%',#{name},'%')
</if>
</where>
order by id
</select>
<select id="selectAll" resultType="net.wanji.opt.po.base.CrossInfoPO">
select
id,name,type,level,area_code,is_signal,is_start,is_send,location
from t_base_cross_info
order by id
</select>
</mapper>
package net.wanji.opt.dao.mapper;
package net.wanji.databus.dao.mapper;
import net.wanji.opt.po.base.CrossInfoPO;
import net.wanji.opt.query.CrossQuery;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import net.wanji.databus.po.CrossInfoPO;
import net.wanji.databus.po.TBaseCrossInfo;
import net.wanji.databus.vo.CrossDeviceStatusInfoOutVO;
import net.wanji.databus.vo.CrossInfoVO;
import org.springframework.stereotype.Repository;
import java.util.List;
......@@ -12,14 +15,14 @@ import java.util.List;
* @desc CrossInfoMapper
*/
@Repository
public interface CrossInfoMapper {
public interface CrossInfoMapper extends BaseMapper<TBaseCrossInfo> {
/**
* 查询路口列表信息
* @param query
* @return
*/
List<CrossInfoPO> listCrossInfo(CrossQuery query);
// List<CrossInfoPO> listCrossInfo(CrossQuery query);
List<CrossInfoPO> selectByCrossIds(List<String> crossIdList);
......@@ -28,4 +31,23 @@ public interface CrossInfoMapper {
List<CrossInfoPO> selectByName(String name);
List<CrossInfoPO> selectAll();
int deleteByPrimaryKey(String id);
@Override
int insert(TBaseCrossInfo record);
int insertSelective(TBaseCrossInfo record);
TBaseCrossInfo selectByPrimaryKey(String id);
int updateByPrimaryKeySelective(TBaseCrossInfo record);
int updateByPrimaryKey(TBaseCrossInfo record);
List<CrossInfoPO> selectAll(CrossInfoVO crossInfoVO);
Integer countSelectAll(CrossInfoVO crossInfoVO);
List<CrossDeviceStatusInfoOutVO> listCrossDeviceStatusInfo();
}
......@@ -4,11 +4,8 @@ import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import net.wanji.databus.dto.CrossDirInfoDTO;
import net.wanji.databus.dto.CrossTurnInfoDTO;
import java.util.Date;
import java.util.List;
/**
* @author duanruiming
......@@ -18,84 +15,126 @@ import java.util.List;
@TableName("t_cross_data_realtime")
@ApiModel(value = "CrossDataRealtimePO", description = "路口实时数据")
public class CrossDataRealtimePO {
/** 路口编号 */
@ApiModelProperty(value = "路口编号",notes = "")
private String crossId ;
/** 路口状态:0正常;1失衡;2拥堵;3溢出;4死锁 */
@ApiModelProperty(value = "路口状态:0正常;1失衡;2拥堵;3溢出;4死锁",notes = "")
private Integer status ;
/** 拥堵类型:1常规;2异常 */
@ApiModelProperty(value = "拥堵类型:1常规;2异常",notes = "")
private Integer type ;
/** 交通指数(1~10) */
@ApiModelProperty(value = "交通指数(1~10)",notes = "")
private Double trafficIndex ;
/** 开始时间:yyyy-MM-dd HH;mm:ss */
@ApiModelProperty(value = "开始时间:yyyy-MM-dd HH:mm:ss",notes = "")
private Date startTime ;
@ApiModelProperty(value = "持续时间(单位:分钟)",notes = "")
private Integer duration ;
/** 是否失衡:0否;1是 */
@ApiModelProperty(value = "是否失衡:0否;1是",notes = "")
private Integer isUnbalance ;
/** 是否溢出:0否;1是 */
@ApiModelProperty(value = "是否溢出:0否;1是",notes = "")
private Integer isSpillover ;
/** 是否拥堵:0否;1是 */
@ApiModelProperty(value = "是否拥堵:0否;1是",notes = "")
private Integer isCongestion ;
/** 失衡指数 */
@ApiModelProperty(value = "失衡指数",notes = "")
private Double unbalanceIndex ;
/** 溢出指数 */
@ApiModelProperty(value = "溢出指数",notes = "")
private Double spilloverIndex ;
/** 拥堵指数 */
@ApiModelProperty(value = "拥堵指数",notes = "")
private Double congestionIndex ;
/** 路口失衡方向:1,2,3... */
@ApiModelProperty(value = "路口失衡方向:1,2,3...",notes = "")
private String unbalanceDirs ;
/** 路口溢出方向:1,2,3... */
@ApiModelProperty(value = "路口溢出方向:1,2,3...",notes = "")
private String spilloverDirs ;
/** 路口拥堵方向:1,2,3... */
@ApiModelProperty(value = "路口拥堵方向:1,2,3...",notes = "")
private String congestionDirs ;
/** 交通流量(辆) */
@ApiModelProperty(value = "交通流量(辆)",notes = "")
private Integer flow ;
/** 交通流率/h */
@ApiModelProperty(value = "交通流率/h",notes = "")
private Double flowRate ;
/** 平均速度(km/h) */
@ApiModelProperty(value = "平均速度(km/h)",notes = "")
private Double speed ;
/** 最大排队(米) */
@ApiModelProperty(value = "最大排队(米)",notes = "")
private Double queueLength ;
/** 停车次数(次) */
@ApiModelProperty(value = "停车次数(次)",notes = "")
private Double stopTimes ;
/** 延误时间(秒) */
@ApiModelProperty(value = "延误时间(秒)",notes = "")
private Integer delayTime ;
/** 饱和度 */
@ApiModelProperty(value = "饱和度",notes = "")
private Double sturation ;
/** 采集时间(10位时间戳) */
@ApiModelProperty(value = "采集时间(10位时间戳)",notes = "")
private Integer batchTime ;
/** 创建时间 */
@ApiModelProperty(value = "创建时间",notes = "")
private Date gmtCreate ;
/** 修改时间 */
@ApiModelProperty(value = "修改时间",notes = "")
private Date gmtModified ;
@ApiModelProperty(name = "路口方向列表",notes = "")
List<CrossDirInfoDTO> dirList;
@ApiModelProperty(name = "路口转向列表",notes = "")
List<CrossTurnInfoDTO> turnList;
/**
* 路口编号
*/
@ApiModelProperty(value = "路口编号", notes = "")
private String crossId;
/**
* 路口状态:0正常;1失衡;2拥堵;3溢出;4死锁
*/
@ApiModelProperty(value = "路口状态:0正常;1失衡;2拥堵;3溢出;4死锁", notes = "")
private Integer status;
/**
* 拥堵类型:1常规;2异常
*/
@ApiModelProperty(value = "拥堵类型:1常规;2异常", notes = "")
private Integer type;
/**
* 交通指数(1~10)
*/
@ApiModelProperty(value = "交通指数(1~10)", notes = "")
private Double trafficIndex;
/**
* 开始时间:yyyy-MM-dd HH;mm:ss
*/
@ApiModelProperty(value = "开始时间:yyyy-MM-dd HH:mm:ss", notes = "")
private Date startTime;
@ApiModelProperty(value = "持续时间(单位:分钟)", notes = "")
private Integer duration;
/**
* 是否失衡:0否;1是
*/
@ApiModelProperty(value = "是否失衡:0否;1是", notes = "")
private Integer isUnbalance;
/**
* 是否溢出:0否;1是
*/
@ApiModelProperty(value = "是否溢出:0否;1是", notes = "")
private Integer isSpillover;
/**
* 是否拥堵:0否;1是
*/
@ApiModelProperty(value = "是否拥堵:0否;1是", notes = "")
private Integer isCongestion;
/**
* 失衡指数
*/
@ApiModelProperty(value = "失衡指数", notes = "")
private Double unbalanceIndex;
/**
* 溢出指数
*/
@ApiModelProperty(value = "溢出指数", notes = "")
private Double spilloverIndex;
/**
* 拥堵指数
*/
@ApiModelProperty(value = "拥堵指数", notes = "")
private Double congestionIndex;
/**
* 路口失衡方向:1,2,3...
*/
@ApiModelProperty(value = "路口失衡方向:1,2,3...", notes = "")
private String unbalanceDirs;
/**
* 路口溢出方向:1,2,3...
*/
@ApiModelProperty(value = "路口溢出方向:1,2,3...", notes = "")
private String spilloverDirs;
/**
* 路口拥堵方向:1,2,3...
*/
@ApiModelProperty(value = "路口拥堵方向:1,2,3...", notes = "")
private String congestionDirs;
/**
* 交通流量(辆)
*/
@ApiModelProperty(value = "交通流量(辆)", notes = "")
private Integer flow;
/**
* 交通流率/h
*/
@ApiModelProperty(value = "交通流率/h", notes = "")
private Double flowRate;
/**
* 平均速度(km/h)
*/
@ApiModelProperty(value = "平均速度(km/h)", notes = "")
private Double speed;
/**
* 最大排队(米)
*/
@ApiModelProperty(value = "最大排队(米)", notes = "")
private Double queueLength;
/**
* 停车次数(次)
*/
@ApiModelProperty(value = "停车次数(次)", notes = "")
private Double stopTimes;
/**
* 延误时间(秒)
*/
@ApiModelProperty(value = "延误时间(秒)", notes = "")
private Integer delayTime;
/**
* 饱和度
*/
@ApiModelProperty(value = "饱和度", notes = "")
private Double sturation;
/**
* 采集时间(10位时间戳)
*/
@ApiModelProperty(value = "采集时间(10位时间戳)", notes = "")
private Integer batchTime;
/**
* 创建时间
*/
@ApiModelProperty(value = "创建时间", notes = "")
private Date gmtCreate;
/**
* 修改时间
*/
@ApiModelProperty(value = "修改时间", notes = "")
private Date gmtModified;
}
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