绿通后台代码提交
parent
dfad15be6d
commit
20b0c6127f
@ -0,0 +1,40 @@
|
||||
//package com.nmgs.config;
|
||||
//
|
||||
//
|
||||
//import com.baomidou.mybatisplus.core.MybatisConfiguration;
|
||||
//import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
|
||||
//import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
|
||||
//import org.apache.ibatis.session.SqlSessionFactory;
|
||||
//import org.mybatis.spring.SqlSessionTemplate;
|
||||
//import org.mybatis.spring.annotation.MapperScan;
|
||||
//import org.springframework.beans.factory.annotation.Autowired;
|
||||
//import org.springframework.beans.factory.annotation.Qualifier;
|
||||
//import org.springframework.context.annotation.Bean;
|
||||
//import org.springframework.context.annotation.Configuration;
|
||||
//import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
|
||||
//
|
||||
//import javax.sql.DataSource;
|
||||
//
|
||||
//@Configuration
|
||||
//@MapperScan(basePackages = {"com.nmgs.mapper.check"}, sqlSessionFactoryRef = "sqlSessionFactoryCheck")
|
||||
//public class DBSrcCheck {
|
||||
//
|
||||
// @Autowired
|
||||
// MybatisPlusInterceptor mybatisPlusInterceptor;
|
||||
// @Bean
|
||||
// public SqlSessionFactory sqlSessionFactoryCheck(@Qualifier("db_check") DataSource dataSource) throws Exception {
|
||||
// MybatisSqlSessionFactoryBean sqlSessionFactory = new MybatisSqlSessionFactoryBean();
|
||||
// sqlSessionFactory.setDataSource(dataSource);
|
||||
// MybatisConfiguration configuration = new MybatisConfiguration();
|
||||
// configuration.addInterceptor(mybatisPlusInterceptor);
|
||||
// sqlSessionFactory.setConfiguration(configuration);
|
||||
//// sqlSessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver()
|
||||
//// .getResources("classpath:mapper/check/**/*.xml"));
|
||||
// return sqlSessionFactory.getObject();
|
||||
// }
|
||||
//
|
||||
// @Bean
|
||||
// public SqlSessionTemplate sqlSessionTemplateCheck(@Qualifier("sqlSessionFactoryCheck") SqlSessionFactory sqlSessionFactory) throws Exception {
|
||||
// return new SqlSessionTemplate(sqlSessionFactory);
|
||||
// }
|
||||
//}
|
||||
@ -0,0 +1,48 @@
|
||||
//package com.nmgs.config;
|
||||
//
|
||||
//
|
||||
//
|
||||
//import com.baomidou.mybatisplus.core.MybatisConfiguration;
|
||||
//import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
|
||||
//import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
|
||||
//import org.apache.ibatis.session.SqlSessionFactory;
|
||||
//import org.mybatis.spring.SqlSessionTemplate;
|
||||
//import org.mybatis.spring.annotation.MapperScan;
|
||||
//import org.springframework.beans.factory.annotation.Autowired;
|
||||
//import org.springframework.beans.factory.annotation.Qualifier;
|
||||
//import org.springframework.context.annotation.Bean;
|
||||
//import org.springframework.context.annotation.Configuration;
|
||||
//import org.springframework.context.annotation.Primary;
|
||||
//import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
|
||||
//
|
||||
//import javax.sql.DataSource;
|
||||
//
|
||||
//
|
||||
//@Configuration
|
||||
//@MapperScan(basePackages = {"com.nmgs.mapper.green"}, sqlSessionFactoryRef = "sqlSessionFactoryGreen")
|
||||
//public class DBSrcGreen {
|
||||
//
|
||||
// @Autowired
|
||||
// MybatisPlusInterceptor mybatisPlusInterceptor;
|
||||
//
|
||||
//
|
||||
// @Bean
|
||||
// @Primary
|
||||
// public SqlSessionFactory sqlSessionFactoryGreen(@Qualifier("db_green") DataSource dataSource) throws Exception {
|
||||
// MybatisSqlSessionFactoryBean sqlSessionFactory = new MybatisSqlSessionFactoryBean();
|
||||
// sqlSessionFactory.setDataSource(dataSource);
|
||||
// // 添加分页插件
|
||||
// MybatisConfiguration configuration = new MybatisConfiguration();
|
||||
// configuration.addInterceptor(mybatisPlusInterceptor);
|
||||
// sqlSessionFactory.setConfiguration(configuration);
|
||||
//// sqlSessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver()
|
||||
//// .getResources("classpath:mapper/green/**/*.xml"));
|
||||
// return sqlSessionFactory.getObject();
|
||||
// }
|
||||
//
|
||||
// @Bean
|
||||
// @Primary
|
||||
// public SqlSessionTemplate sqlSessionTemplateGreen(@Qualifier("sqlSessionFactoryGreen") SqlSessionFactory sqlSessionFactory) throws Exception {
|
||||
// return new SqlSessionTemplate(sqlSessionFactory);
|
||||
// }
|
||||
//}
|
||||
@ -0,0 +1,62 @@
|
||||
//package com.nmgs.config;
|
||||
//
|
||||
//
|
||||
//import com.zaxxer.hikari.HikariConfig;
|
||||
//import com.zaxxer.hikari.HikariDataSource;
|
||||
//import org.springframework.context.annotation.Configuration;
|
||||
//import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||
//import org.springframework.boot.jdbc.DataSourceBuilder;
|
||||
//import org.springframework.context.annotation.Bean;
|
||||
//import org.springframework.context.annotation.Configuration;
|
||||
//import org.springframework.context.annotation.Primary;
|
||||
//import javax.sql.DataSource;
|
||||
//
|
||||
//
|
||||
//@Configuration
|
||||
//public class DataSourceConfig {
|
||||
// @Bean
|
||||
// @ConfigurationProperties(prefix = "spring.datasource.hikari")
|
||||
// public HikariConfig hikariConfig(){
|
||||
// return new HikariConfig();
|
||||
// }
|
||||
//
|
||||
// @Primary
|
||||
// @Bean(name = "db_green")
|
||||
// @ConfigurationProperties(prefix = "spring.datasource.db-green")
|
||||
// public DataSource dBSrcGreen() {
|
||||
//
|
||||
// HikariDataSource hikariDataSource = new HikariDataSource();
|
||||
// hikariDataSource.setMaximumPoolSize(hikariConfig().getMaximumPoolSize());
|
||||
// hikariDataSource.setAutoCommit(hikariConfig().isAutoCommit());
|
||||
// hikariDataSource.setIdleTimeout(hikariConfig().getIdleTimeout());
|
||||
// hikariDataSource.setPoolName(hikariConfig().getPoolName());
|
||||
// hikariDataSource.setMaxLifetime(hikariConfig().getMaxLifetime());
|
||||
// hikariDataSource.setConnectionTimeout(hikariConfig().getConnectionTimeout());
|
||||
// hikariDataSource.setMinimumIdle(hikariConfig().getMinimumIdle());
|
||||
// hikariDataSource.setAllowPoolSuspension(hikariConfig().isAllowPoolSuspension());
|
||||
// hikariDataSource.setRegisterMbeans(hikariConfig().isRegisterMbeans());
|
||||
// hikariDataSource.setLeakDetectionThreshold(hikariConfig().getLeakDetectionThreshold());
|
||||
//
|
||||
// return hikariDataSource;
|
||||
// }
|
||||
//
|
||||
// @Primary
|
||||
// @Bean(name = "db_check")
|
||||
// @ConfigurationProperties(prefix = "spring.datasource.db-check")
|
||||
// public DataSource dBSrcCheck() {
|
||||
//
|
||||
// HikariDataSource hikariDataSource = new HikariDataSource();
|
||||
// hikariDataSource.setMaximumPoolSize(hikariConfig().getMaximumPoolSize());
|
||||
// hikariDataSource.setAutoCommit(hikariConfig().isAutoCommit());
|
||||
// hikariDataSource.setIdleTimeout(hikariConfig().getIdleTimeout());
|
||||
// hikariDataSource.setPoolName(hikariConfig().getPoolName());
|
||||
// hikariDataSource.setMaxLifetime(hikariConfig().getMaxLifetime());
|
||||
// hikariDataSource.setConnectionTimeout(hikariConfig().getConnectionTimeout());
|
||||
// hikariDataSource.setMinimumIdle(hikariConfig().getMinimumIdle());
|
||||
// hikariDataSource.setAllowPoolSuspension(hikariConfig().isAllowPoolSuspension());
|
||||
// hikariDataSource.setRegisterMbeans(hikariConfig().isRegisterMbeans());
|
||||
// hikariDataSource.setLeakDetectionThreshold(hikariConfig().getLeakDetectionThreshold());
|
||||
//
|
||||
// return hikariDataSource;
|
||||
// }
|
||||
//}
|
||||
@ -0,0 +1,106 @@
|
||||
package com.nmgs.controller;
|
||||
import com.nmgs.mapper.GreenTrafficCheckResultMapper;
|
||||
import com.nmgs.mapper.GreenTrafficMapper;
|
||||
import com.nmgs.service.IGreenTrafficExportExcelService;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
|
||||
@Controller
|
||||
@RequestMapping("/GreenTrafficExportExcel")
|
||||
@CrossOrigin(origins = "*")
|
||||
public class GreenTrafficExportExcelController {
|
||||
|
||||
public static Logger logger = LoggerFactory.getLogger(GreenTrafficExportExcelController.class);
|
||||
|
||||
@Autowired
|
||||
private IGreenTrafficExportExcelService greenTrafficExportExcelService;
|
||||
|
||||
@Autowired
|
||||
private GreenTrafficMapper greenTrafficMapper;
|
||||
|
||||
@Autowired
|
||||
private GreenTrafficCheckResultMapper greenTrafficCheckResultMapper;
|
||||
|
||||
@GetMapping("/exportStaUnionCollectionExcle")
|
||||
@ResponseBody
|
||||
public void exportstaUnionCollectionExcle(String searchForm, HttpServletResponse response){
|
||||
logger.info("searchForm============"+searchForm.toString());
|
||||
try {
|
||||
greenTrafficExportExcelService.exportstaUnionCollectionExcle(searchForm,response);
|
||||
} catch (Exception e) {
|
||||
logger.error("com.nmgs.controller.GreenTrafficExportExcelController.exportstaUnionCollectionExcle: 导出失败"+e);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@GetMapping("/exportStaCollectionExcle")
|
||||
@ResponseBody
|
||||
public void exportstaCollectionExcle(String searchForm, HttpServletResponse response){
|
||||
logger.info("searchForm============"+searchForm.toString());
|
||||
try {
|
||||
greenTrafficExportExcelService.exportstaCollectionExcle(searchForm,response);
|
||||
} catch (Exception e) {
|
||||
logger.error("com.nmgs.controller.GreenTrafficExportExcelController.exportstaCollectionExcle: 导出失败"+e);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@GetMapping("/exportUnionFreightCollectionExcle")
|
||||
@ResponseBody
|
||||
public void exportUnionFreightCollectionExcle(String searchForm, HttpServletResponse response){
|
||||
logger.info("searchForm============"+searchForm.toString());
|
||||
try {
|
||||
greenTrafficExportExcelService.exportUnionFreightCollectionExcle(searchForm,response);
|
||||
} catch (Exception e) {
|
||||
logger.error("com.nmgs.controller.GreenTrafficExportExcelController.exportUnionFreightCollectionExcle: 导出失败"+e);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@GetMapping("/exportSingleTrackExcle")
|
||||
@ResponseBody
|
||||
public void exportSingleTrackExcle(String searchForm, HttpServletResponse response){
|
||||
logger.info("searchForm============"+searchForm.toString());
|
||||
try {
|
||||
greenTrafficExportExcelService.exportSingleTrackExcle(searchForm,response);
|
||||
} catch (Exception e) {
|
||||
logger.error("com.nmgs.controller.GreenTrafficExportExcelController.exportSingleTrackExcle: 导出失败"+e);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@GetMapping("/exportUnionTotalExcle")
|
||||
@ResponseBody
|
||||
public void exportUnionTotalExcle(String searchForm, HttpServletResponse response){
|
||||
logger.info("searchForm============"+searchForm.toString());
|
||||
try {
|
||||
greenTrafficExportExcelService.exportUnionTotalExcle(searchForm,response);
|
||||
} catch (Exception e) {
|
||||
logger.error("com.nmgs.controller.GreenTrafficExportExcelController.exportSingleTrackExcle: 导出失败"+e);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@GetMapping("/exportSubComTotalExcle")
|
||||
@ResponseBody
|
||||
public void exportSubComTotalExcle(String searchForm, HttpServletResponse response){
|
||||
logger.info("searchForm============"+searchForm.toString());
|
||||
try {
|
||||
greenTrafficExportExcelService.exportSubComTotalExcle(searchForm,response);
|
||||
} catch (Exception e) {
|
||||
logger.error("com.nmgs.controller.GreenTrafficExportExcelController.exportSingleTrackExcle: 导出失败"+e);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
@ -0,0 +1,100 @@
|
||||
package com.nmgs.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import com.github.jeffreyning.mybatisplus.anno.MppMultiId;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
|
||||
@Data
|
||||
@TableName("CHECK_RESULT_GREEN_FREIGHTTYPES")
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class CheckResultGreenFreightTypes {
|
||||
|
||||
@TableId(value = "TRANSACTIONID")
|
||||
private String transActionId;
|
||||
|
||||
|
||||
@TableField("FREIGHTTYPES")
|
||||
private String freightTypes;
|
||||
|
||||
|
||||
@TableField("CHECKTIME")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
|
||||
private Date checkTime;
|
||||
|
||||
@TableField("LISTNO")
|
||||
private String listNo;
|
||||
|
||||
@TableField("APPOINTMENTID")
|
||||
private String appointmentId;
|
||||
|
||||
@TableField("CHECKID")
|
||||
private String checkId;
|
||||
|
||||
@TableField("CHECKRESULT")
|
||||
private Integer checkResult;
|
||||
|
||||
@TableField("CRATETYPE")
|
||||
private Integer crateType;
|
||||
|
||||
@TableField("CRATETYPETEXT")
|
||||
private String crateTypeText;
|
||||
|
||||
@TableField("DRIVERTELEPHONE")
|
||||
private String driverTelephone;
|
||||
|
||||
@TableField("ENSTATIONID")
|
||||
private String enStationId;
|
||||
|
||||
@TableField("ENWEIGHT")
|
||||
private Integer enWeight;
|
||||
|
||||
@TableField("EXSTATIONID")
|
||||
private String exStationId;
|
||||
|
||||
@TableField("EXTIME")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
|
||||
private Date exTime;
|
||||
|
||||
@TableField("EXWEIGHT")
|
||||
private Integer exWeight;
|
||||
|
||||
@TableField("INSPECTOR")
|
||||
private String inspector;
|
||||
|
||||
@TableField("MEMO")
|
||||
private String memo;
|
||||
|
||||
@TableField("PASSID")
|
||||
private String passId;
|
||||
|
||||
@TableField("PAYFEE")
|
||||
private Integer payFee;
|
||||
|
||||
@TableField("REASON")
|
||||
private String reason;
|
||||
|
||||
@TableField("REVIEWER")
|
||||
private String reviewer;
|
||||
|
||||
@TableField("VEHICLEID")
|
||||
private String vehicleId;
|
||||
|
||||
@TableField("VEHICLETYPE")
|
||||
private Integer vehicleType;
|
||||
|
||||
|
||||
@TableField("RESULTTRANSACTIONID")
|
||||
private String resultTransActionId;
|
||||
|
||||
@TableField(exist = false)
|
||||
private String freightTypesText;
|
||||
}
|
||||
@ -0,0 +1,35 @@
|
||||
package com.nmgs.mapper;
|
||||
|
||||
|
||||
import com.github.jeffreyning.mybatisplus.base.MppBaseMapper;
|
||||
import com.nmgs.entity.CheckResultGreenFreightTypes;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.apache.ibatis.annotations.Select;
|
||||
import org.apache.ibatis.annotations.Update;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
|
||||
@Mapper
|
||||
public interface CheckResultGreenFreightTypesMapper extends MppBaseMapper<CheckResultGreenFreightTypes> {
|
||||
|
||||
|
||||
@Select("select TRANSACTIONID,CHECKTIME from CHECK_RESULT_GREEN_FREIGHTTYPES where CHECKTIME = (select MAX(CHECKTIME) from CHECK_RESULT_GREEN_FREIGHTTYPES)")
|
||||
List<Map<String,Object>> getMaxCheckTime();
|
||||
|
||||
|
||||
int insertAll(@Param("params")HashMap<String, Object> params, @Param("freightTypes") List<CheckResultGreenFreightTypes> checkResultGreenFreightTypes);
|
||||
|
||||
@Update("UPDATE CHECK_RESULT_GREEN_FREIGHTTYPES SET FREIGHTTYPES=#{freightType} WHERE TRANSACTIONID=#{transActionId} ")
|
||||
int updateFreightTypesByTransActionId(@Param("transActionId")String transActionId, @Param("freightType")String freightType);
|
||||
|
||||
/**
|
||||
* 根据listNo获取查验详情
|
||||
* @param params
|
||||
* @return
|
||||
*/
|
||||
List<CheckResultGreenFreightTypes> geCheckResultByListNo(@Param("params")Map<String, Object> params);
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,52 @@
|
||||
package com.nmgs.service;
|
||||
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
public interface IGreenTrafficExportExcelService {
|
||||
|
||||
/**
|
||||
* 盟市、收费站统计绿通数据导出Excel
|
||||
* @param searchForm
|
||||
* @param response
|
||||
* @throws Exception
|
||||
*/
|
||||
void exportstaUnionCollectionExcle(String searchForm, HttpServletResponse response) throws Exception;
|
||||
|
||||
|
||||
/**
|
||||
* 收费站跨省本省绿通数据导出Excel
|
||||
* @param searchForm
|
||||
* @param response
|
||||
*/
|
||||
void exportstaCollectionExcle(String searchForm, HttpServletResponse response)throws Exception;
|
||||
|
||||
|
||||
/**
|
||||
* 盟市货物统计Excel导出
|
||||
* @param searchForm
|
||||
* @param response
|
||||
*/
|
||||
void exportUnionFreightCollectionExcle(String searchForm, HttpServletResponse response)throws Exception;
|
||||
|
||||
/**
|
||||
* 单车轨迹导出
|
||||
* @param searchForm
|
||||
* @param response
|
||||
*/
|
||||
void exportSingleTrackExcle(String searchForm, HttpServletResponse response) throws Exception ;
|
||||
|
||||
/**
|
||||
* 盟市绿通数据导出
|
||||
* @param searchForm
|
||||
* @param response
|
||||
*/
|
||||
void exportUnionTotalExcle(String searchForm, HttpServletResponse response) throws Exception ;
|
||||
|
||||
/**
|
||||
* 分公司绿通数据导出
|
||||
* @param searchForm
|
||||
* @param response
|
||||
*/
|
||||
void exportSubComTotalExcle(String searchForm, HttpServletResponse response) throws Exception ;
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,252 @@
|
||||
package com.nmgs.util;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Calendar;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @Description: 时间切片工具
|
||||
* @Auther: xuxiaojun
|
||||
* @Date: 2020-03-19
|
||||
*/
|
||||
public class DateSplitUtils {
|
||||
|
||||
public enum IntervalType {
|
||||
DAY,
|
||||
HOUR,
|
||||
MINUTE,
|
||||
SECOND,
|
||||
;
|
||||
}
|
||||
|
||||
/**
|
||||
* 时间切割
|
||||
* @param startTime 被切割的开始时间
|
||||
* @param endTime 被切割的结束时间
|
||||
* @param intervalType
|
||||
* @param interval >0
|
||||
* @return
|
||||
*/
|
||||
public static List<DateSplit> splitDate(Date startTime, Date endTime, IntervalType intervalType, int interval) {
|
||||
if (interval < 0) {
|
||||
return null;
|
||||
}
|
||||
if (endTime.getTime() <= startTime.getTime()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (intervalType == IntervalType.DAY) {
|
||||
return splitByDay(startTime, endTime, interval);
|
||||
}
|
||||
if (intervalType == IntervalType.HOUR) {
|
||||
return splitByHour(startTime, endTime, interval);
|
||||
}
|
||||
if (intervalType == IntervalType.MINUTE) {
|
||||
return splitByMinute(startTime, endTime, interval);
|
||||
}
|
||||
if (intervalType == IntervalType.SECOND) {
|
||||
return splitBySecond(startTime, endTime, interval);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 按照小时切割时间区间
|
||||
*/
|
||||
public static List<DateSplit> splitByHour(Date startTime, Date endTime, int intervalHours) {
|
||||
if (endTime.getTime() <= startTime.getTime()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
List<DateSplit> dateSplits = new ArrayList<>(256);
|
||||
|
||||
DateSplit param = new DateSplit();
|
||||
param.setStartDateTime(startTime);
|
||||
param.setEndDateTime(endTime);
|
||||
param.setEndDateTime(addHours(startTime, intervalHours));
|
||||
while (true) {
|
||||
param.setStartDateTime(startTime);
|
||||
Date tempEndTime = addHours(startTime, intervalHours);
|
||||
if (tempEndTime.getTime() >= endTime.getTime()) {
|
||||
tempEndTime = endTime;
|
||||
}
|
||||
param.setEndDateTime(tempEndTime);
|
||||
|
||||
dateSplits.add(new DateSplit(param.getStartDateTime(), param.getEndDateTime()));
|
||||
|
||||
startTime = addHours(startTime, intervalHours);
|
||||
if (startTime.getTime() >= endTime.getTime()) {
|
||||
break;
|
||||
}
|
||||
if (param.getEndDateTime().getTime() >= endTime.getTime()) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
return dateSplits;
|
||||
}
|
||||
|
||||
/**
|
||||
* 按照秒切割时间区间
|
||||
*/
|
||||
public static List<DateSplit> splitBySecond(Date startTime, Date endTime, int intervalSeconds) {
|
||||
if (endTime.getTime() <= startTime.getTime()) {
|
||||
return null;
|
||||
}
|
||||
List<DateSplit> dateSplits = new ArrayList<>(256);
|
||||
|
||||
DateSplit param = new DateSplit();
|
||||
param.setStartDateTime(startTime);
|
||||
param.setEndDateTime(endTime);
|
||||
param.setEndDateTime(addSeconds(startTime, intervalSeconds));
|
||||
while (true) {
|
||||
param.setStartDateTime(startTime);
|
||||
Date tempEndTime = addSeconds(startTime, intervalSeconds);
|
||||
if (tempEndTime.getTime() >= endTime.getTime()) {
|
||||
tempEndTime = endTime;
|
||||
}
|
||||
param.setEndDateTime(tempEndTime);
|
||||
|
||||
dateSplits.add(new DateSplit(param.getStartDateTime(), param.getEndDateTime()));
|
||||
|
||||
startTime = addSeconds(startTime, intervalSeconds);
|
||||
if (startTime.getTime() >= endTime.getTime()) {
|
||||
break;
|
||||
}
|
||||
if (param.getEndDateTime().getTime() >= endTime.getTime()) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
return dateSplits;
|
||||
}
|
||||
|
||||
/**
|
||||
* 按照天切割时间区间
|
||||
*/
|
||||
public static List<DateSplit> splitByDay(Date startTime, Date endTime, int intervalDays) {
|
||||
if (endTime.getTime() <= startTime.getTime()) {
|
||||
return null;
|
||||
}
|
||||
List<DateSplit> dateSplits = new ArrayList<>(256);
|
||||
|
||||
DateSplit param = new DateSplit();
|
||||
param.setStartDateTime(startTime);
|
||||
param.setEndDateTime(endTime);
|
||||
param.setEndDateTime(addDays(startTime, intervalDays));
|
||||
while (true) {
|
||||
param.setStartDateTime(startTime);
|
||||
Date tempEndTime = addDays(startTime, intervalDays);
|
||||
if (tempEndTime.getTime() >= endTime.getTime()) {
|
||||
tempEndTime = endTime;
|
||||
}
|
||||
param.setEndDateTime(tempEndTime);
|
||||
|
||||
dateSplits.add(new DateSplit(param.getStartDateTime(), param.getEndDateTime()));
|
||||
|
||||
startTime = addDays(startTime, intervalDays);
|
||||
if (startTime.getTime() >= endTime.getTime()) {
|
||||
break;
|
||||
}
|
||||
if (param.getEndDateTime().getTime() >= endTime.getTime()) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
return dateSplits;
|
||||
}
|
||||
|
||||
/**
|
||||
* 按照分钟切割时间区间
|
||||
*
|
||||
* @param startTime
|
||||
* @param endTime
|
||||
* @param intervalMinutes
|
||||
* @return
|
||||
*/
|
||||
public static List<DateSplit> splitByMinute(Date startTime, Date endTime, int intervalMinutes) {
|
||||
if (endTime.getTime() <= startTime.getTime()) {
|
||||
return null;
|
||||
}
|
||||
List<DateSplit> dateSplits = new ArrayList<>(256);
|
||||
|
||||
DateSplit param = new DateSplit();
|
||||
param.setStartDateTime(startTime);
|
||||
param.setEndDateTime(endTime);
|
||||
param.setEndDateTime(addMinute(startTime, intervalMinutes));
|
||||
while (true) {
|
||||
param.setStartDateTime(startTime);
|
||||
Date tempEndTime = addMinute(startTime, intervalMinutes);
|
||||
if (tempEndTime.getTime() >= endTime.getTime()) {
|
||||
tempEndTime = endTime;
|
||||
}
|
||||
param.setEndDateTime(tempEndTime);
|
||||
|
||||
dateSplits.add(new DateSplit(param.getStartDateTime(), param.getEndDateTime()));
|
||||
|
||||
startTime = addMinute(startTime, intervalMinutes);
|
||||
if (startTime.getTime() >= endTime.getTime()) {
|
||||
break;
|
||||
}
|
||||
if (param.getEndDateTime().getTime() >= endTime.getTime()) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
return dateSplits;
|
||||
}
|
||||
|
||||
|
||||
|
||||
private static Date addDays(Date date, int days) {
|
||||
return add(date, Calendar.DAY_OF_MONTH, days);
|
||||
}
|
||||
|
||||
private static Date addHours(Date date, int hours) {
|
||||
return add(date, Calendar.HOUR_OF_DAY, hours);
|
||||
}
|
||||
|
||||
private static Date addMinute(Date date, int minute) {
|
||||
return add(date, Calendar.MINUTE, minute);
|
||||
}
|
||||
private static Date addSeconds(Date date, int second) {
|
||||
return add(date, Calendar.SECOND, second);
|
||||
}
|
||||
|
||||
private static Date add(final Date date, final int calendarField, final int amount) {
|
||||
final Calendar c = Calendar.getInstance();
|
||||
c.setTime(date);
|
||||
c.add(calendarField, amount);
|
||||
return c.getTime();
|
||||
}
|
||||
|
||||
private static String formatDateTime(Date date) {
|
||||
if (date == null) {
|
||||
return "";
|
||||
}
|
||||
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
||||
return simpleDateFormat.format(date);
|
||||
}
|
||||
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public static class DateSplit {
|
||||
private Date startDateTime;
|
||||
private Date endDateTime;
|
||||
|
||||
public String getStartDateTimeStr() {
|
||||
return formatDateTime(startDateTime);
|
||||
}
|
||||
|
||||
public String getEndDateTimeStr() {
|
||||
return formatDateTime(endDateTime);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@ -0,0 +1,93 @@
|
||||
package com.nmgs.util;
|
||||
|
||||
import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.LocalTime;
|
||||
import java.time.ZoneId;
|
||||
import java.util.*;
|
||||
|
||||
public class DateTimeSplitUtil {
|
||||
private static SimpleDateFormat sfMin00=new SimpleDateFormat("yyyy-MM-dd HH:00:00");
|
||||
private static SimpleDateFormat sfMin59=new SimpleDateFormat("yyyy-MM-dd HH:59:59");
|
||||
private static SimpleDateFormat sf00=new SimpleDateFormat("yyyy-MM-dd 00:00:00");
|
||||
private static SimpleDateFormat sf23=new SimpleDateFormat("yyyy-MM-dd 23:59:59");
|
||||
|
||||
private static SimpleDateFormat format =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
||||
public static void main(String[] args) throws ParseException, CloneNotSupportedException, InterruptedException {
|
||||
String startTime="2023-05-01 00:00:00";
|
||||
String endTime="2023-05-16 10:53:22";
|
||||
System.out.println(splitDateByDay(startTime,endTime));
|
||||
// System.out.println(splitDateByDay(startTime,endTime));;
|
||||
}
|
||||
public static List<Map<String,String>> splitDateByHour(String startTime, String endTime) throws ParseException{
|
||||
Date currentDate = null;
|
||||
Date endDate= null;
|
||||
try {
|
||||
currentDate= format.parse(startTime);;//DateUtility.parse(startTime)
|
||||
|
||||
}catch (Exception e){
|
||||
LocalDate today = LocalDate.now(); // 获取当前日期
|
||||
LocalDate firstDayOfMonth = today.withDayOfMonth(1); // 设置当前日期为本月第一天
|
||||
currentDate = Date.from(firstDayOfMonth.atStartOfDay(ZoneId.systemDefault()).toInstant());
|
||||
}
|
||||
|
||||
try {
|
||||
endDate= format.parse(endTime); //endTime.parse(endTime)
|
||||
}catch (Exception e){
|
||||
endDate = format.parse(format.format(new Date()));
|
||||
}
|
||||
|
||||
|
||||
|
||||
List<Map<String,String>> dataList=new ArrayList<>();
|
||||
boolean first=true;
|
||||
while(currentDate.compareTo(endDate)<=0){
|
||||
Map<String,String> dataMap=new HashMap<>();
|
||||
dataMap.put("startTime",first?format.format(currentDate):sfMin00.format(currentDate));
|
||||
first=false;
|
||||
dataMap.put("endTime", DateUtils.addHours(currentDate,1).compareTo(endDate)>0?format.format(endDate):sfMin59.format(currentDate));
|
||||
dataList.add(dataMap);
|
||||
currentDate=DateUtils.addHours(currentDate,1);
|
||||
}
|
||||
return dataList;
|
||||
}
|
||||
public static List<Map<String,String>> splitDateByDay(String startTime,String endTime)throws ParseException{
|
||||
Date currentDate = null;
|
||||
Date endDate= null;
|
||||
try {
|
||||
currentDate= format.parse(startTime);;//DateUtility.parse(startTime)
|
||||
}catch (Exception e){
|
||||
// 获取当前日期
|
||||
LocalDateTime now = LocalDateTime.now();
|
||||
// 获取当前日期的00:00:00时间
|
||||
LocalTime midnight = LocalTime.MIDNIGHT;
|
||||
|
||||
LocalDateTime localDateTime = midnight.atDate(LocalDate.now());
|
||||
|
||||
// 转换为java.util.Date
|
||||
ZoneId zoneId = ZoneId.systemDefault(); // 使用系统默认时区
|
||||
currentDate = Date.from(localDateTime.atZone(zoneId).toInstant());
|
||||
}
|
||||
|
||||
try {
|
||||
endDate= format.parse(endTime); //endTime.parse(endTime)
|
||||
}catch (Exception e){
|
||||
endDate = format.parse(format.format(new Date()));
|
||||
}
|
||||
|
||||
|
||||
List<Map<String,String>> dataList=new ArrayList<>();
|
||||
boolean first=true;
|
||||
while(currentDate.compareTo(endDate)<=0){
|
||||
Map<String,String> dataMap=new HashMap<>();
|
||||
dataMap.put("startTime",first?format.format(currentDate):sf00.format(currentDate));
|
||||
first=false;
|
||||
dataMap.put("endTime", DateUtils.addDays(currentDate,1).compareTo(endDate)>0?format.format(endDate):sf23.format(currentDate));
|
||||
dataList.add(dataMap);
|
||||
currentDate=DateUtils.addDays(currentDate,1);
|
||||
}
|
||||
return dataList;
|
||||
}
|
||||
}
|
||||
Binary file not shown.
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -0,0 +1,335 @@
|
||||
var BMap = window.BMap
|
||||
var BMapLib = (window.BMapLib = BMapLib || {})
|
||||
;(function () {
|
||||
var b = function (m, l, j) {
|
||||
l = d(l)
|
||||
var n = m.pointToPixel(l.getNorthEast())
|
||||
var i = m.pointToPixel(l.getSouthWest())
|
||||
n.x += j
|
||||
n.y -= j
|
||||
i.x -= j
|
||||
i.y += j
|
||||
var h = m.pixelToPoint(n)
|
||||
var k = m.pixelToPoint(i)
|
||||
return new BMap.Bounds(k, h)
|
||||
}
|
||||
var d = function (i) {
|
||||
var k = f(i.getNorthEast().lng, -180, 180)
|
||||
var h = f(i.getSouthWest().lng, -180, 180)
|
||||
var j = f(i.getNorthEast().lat, -74, 74)
|
||||
var l = f(i.getSouthWest().lat, -74, 74)
|
||||
return new BMap.Bounds(new BMap.Point(h, l), new BMap.Point(k, j))
|
||||
}
|
||||
var f = function (j, k, h) {
|
||||
k && (j = Math.max(j, k))
|
||||
h && (j = Math.min(j, h))
|
||||
return j
|
||||
}
|
||||
var a = function (h) {
|
||||
return '[object Array]' === Object.prototype.toString.call(h)
|
||||
}
|
||||
var c = function (l, n) {
|
||||
var j = -1
|
||||
if (a(n)) {
|
||||
if (n.indexOf) {
|
||||
j = n.indexOf(l)
|
||||
} else {
|
||||
for (var k = 0, h; (h = n[k]); k++) {
|
||||
if (h === l) {
|
||||
j = k
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return j
|
||||
}
|
||||
var e = (BMapLib.MarkerClusterer = function (l, h) {
|
||||
if (!l) {
|
||||
return
|
||||
}
|
||||
this._map = l
|
||||
this._markers = []
|
||||
this._clusters = []
|
||||
var k = h || {}
|
||||
this._gridSize = k.gridSize || 60
|
||||
this._maxZoom = k.maxZoom || 18
|
||||
this._minClusterSize = k.minClusterSize || 2
|
||||
this._isAverageCenter = false
|
||||
if (k.isAverageCenter != undefined) {
|
||||
this._isAverageCenter = k.isAverageCenter
|
||||
}
|
||||
this._styles = k.styles || []
|
||||
var j = this
|
||||
this._map.addEventListener('zoomend', function () {
|
||||
j._redraw()
|
||||
})
|
||||
this._map.addEventListener('moveend', function () {
|
||||
j._redraw()
|
||||
})
|
||||
var i = k.markers
|
||||
a(i) && this.addMarkers(i)
|
||||
})
|
||||
e.prototype.addMarkers = function (k) {
|
||||
for (var j = 0, h = k.length; j < h; j++) {
|
||||
this._pushMarkerTo(k[j])
|
||||
}
|
||||
this._createClusters()
|
||||
}
|
||||
e.prototype._pushMarkerTo = function (h) {
|
||||
var i = c(h, this._markers)
|
||||
if (i === -1) {
|
||||
h.isInCluster = false
|
||||
this._markers.push(h)
|
||||
}
|
||||
}
|
||||
e.prototype.addMarker = function (h) {
|
||||
this._pushMarkerTo(h)
|
||||
this._createClusters()
|
||||
}
|
||||
e.prototype._createClusters = function () {
|
||||
var j = this._map.getBounds()
|
||||
var l = b(this._map, j, this._gridSize)
|
||||
for (var k = 0, h; (h = this._markers[k]); k++) {
|
||||
if (!h.isInCluster && l.containsPoint(h.getPosition())) {
|
||||
this._addToClosestCluster(h)
|
||||
}
|
||||
}
|
||||
}
|
||||
e.prototype._addToClosestCluster = function (l) {
|
||||
var p = 4000000
|
||||
var n = null
|
||||
// var k = l.getPosition()
|
||||
for (var m = 0, j; (j = this._clusters[m]); m++) {
|
||||
var h = j.getCenter()
|
||||
if (h) {
|
||||
var o = this._map.getDistance(h, l.getPosition())
|
||||
if (o < p) {
|
||||
p = o
|
||||
n = j
|
||||
}
|
||||
}
|
||||
}
|
||||
if (n && n.isMarkerInClusterBounds(l)) {
|
||||
n.addMarker(l)
|
||||
} else {
|
||||
// eslint-disable-next-line
|
||||
var j = new g(this)
|
||||
j.addMarker(l)
|
||||
this._clusters.push(j)
|
||||
}
|
||||
}
|
||||
e.prototype._clearLastClusters = function () {
|
||||
for (var j = 0, h; (h = this._clusters[j]); j++) {
|
||||
h.remove()
|
||||
}
|
||||
this._clusters = []
|
||||
this._removeMarkersFromCluster()
|
||||
}
|
||||
e.prototype._removeMarkersFromCluster = function () {
|
||||
for (var j = 0, h; (h = this._markers[j]); j++) {
|
||||
h.isInCluster = false
|
||||
}
|
||||
}
|
||||
e.prototype._removeMarkersFromMap = function () {
|
||||
for (var j = 0, h; (h = this._markers[j]); j++) {
|
||||
h.isInCluster = false
|
||||
this._map.removeOverlay(h)
|
||||
}
|
||||
}
|
||||
e.prototype._removeMarker = function (h) {
|
||||
var i = c(h, this._markers)
|
||||
if (i === -1) {
|
||||
return false
|
||||
}
|
||||
this._map.removeOverlay(h)
|
||||
this._markers.splice(i, 1)
|
||||
return true
|
||||
}
|
||||
e.prototype.removeMarker = function (h) {
|
||||
var i = this._removeMarker(h)
|
||||
if (i) {
|
||||
this._clearLastClusters()
|
||||
this._createClusters()
|
||||
}
|
||||
return i
|
||||
}
|
||||
e.prototype.removeMarkers = function (l) {
|
||||
var k = false
|
||||
for (var h = 0; h < l.length; h++) {
|
||||
var j = this._removeMarker(l[h])
|
||||
k = k || j
|
||||
}
|
||||
if (k) {
|
||||
this._clearLastClusters()
|
||||
this._createClusters()
|
||||
}
|
||||
return k
|
||||
}
|
||||
e.prototype.clearMarkers = function () {
|
||||
this._clearLastClusters()
|
||||
this._removeMarkersFromMap()
|
||||
this._markers = []
|
||||
}
|
||||
e.prototype._redraw = function () {
|
||||
this._clearLastClusters()
|
||||
this._createClusters()
|
||||
}
|
||||
e.prototype.getGridSize = function () {
|
||||
return this._gridSize
|
||||
}
|
||||
e.prototype.setGridSize = function (h) {
|
||||
this._gridSize = h
|
||||
this._redraw()
|
||||
}
|
||||
e.prototype.getMaxZoom = function () {
|
||||
return this._maxZoom
|
||||
}
|
||||
e.prototype.setMaxZoom = function (h) {
|
||||
this._maxZoom = h
|
||||
this._redraw()
|
||||
}
|
||||
e.prototype.getStyles = function () {
|
||||
return this._styles
|
||||
}
|
||||
e.prototype.setStyles = function (h) {
|
||||
this._styles = h
|
||||
this._redraw()
|
||||
}
|
||||
e.prototype.getMinClusterSize = function () {
|
||||
return this._minClusterSize
|
||||
}
|
||||
e.prototype.setMinClusterSize = function (h) {
|
||||
this._minClusterSize = h
|
||||
this._redraw()
|
||||
}
|
||||
e.prototype.isAverageCenter = function () {
|
||||
return this._isAverageCenter
|
||||
}
|
||||
e.prototype.getMap = function () {
|
||||
return this._map
|
||||
}
|
||||
e.prototype.getMarkers = function () {
|
||||
return this._markers
|
||||
}
|
||||
e.prototype.getClustersCount = function () {
|
||||
var k = 0
|
||||
for (var j = 0, h; (h = this._clusters[j]); j++) {
|
||||
h.isReal() && k++
|
||||
}
|
||||
return k
|
||||
}
|
||||
|
||||
function g(h) {
|
||||
this._markerClusterer = h
|
||||
this._map = h.getMap()
|
||||
this._minClusterSize = h.getMinClusterSize()
|
||||
this._isAverageCenter = h.isAverageCenter()
|
||||
this._center = null
|
||||
this._markers = []
|
||||
this._gridBounds = null
|
||||
this._isReal = false
|
||||
this._clusterMarker = new BMapLib.TextIconOverlay(
|
||||
this._center,
|
||||
this._markers.length,
|
||||
{
|
||||
styles: this._markerClusterer.getStyles(),
|
||||
}
|
||||
)
|
||||
}
|
||||
g.prototype.addMarker = function (k) {
|
||||
if (this.isMarkerInCluster(k)) {
|
||||
return false
|
||||
}
|
||||
if (!this._center) {
|
||||
this._center = k.getPosition()
|
||||
this.updateGridBounds()
|
||||
} else {
|
||||
if (this._isAverageCenter) {
|
||||
var j = this._markers.length + 1
|
||||
var o = (this._center.lat * (j - 1) + k.getPosition().lat) / j
|
||||
var m = (this._center.lng * (j - 1) + k.getPosition().lng) / j
|
||||
this._center = new BMap.Point(m, o)
|
||||
this.updateGridBounds()
|
||||
}
|
||||
}
|
||||
k.isInCluster = true
|
||||
this._markers.push(k)
|
||||
var h = this._markers.length
|
||||
if (h < this._minClusterSize) {
|
||||
this._map.addOverlay(k)
|
||||
return true
|
||||
} else {
|
||||
if (h === this._minClusterSize) {
|
||||
for (var n = 0; n < h; n++) {
|
||||
this._markers[n].getMap() && this._map.removeOverlay(this._markers[n])
|
||||
}
|
||||
}
|
||||
}
|
||||
this._map.addOverlay(this._clusterMarker)
|
||||
this._isReal = true
|
||||
this.updateClusterMarker()
|
||||
return true
|
||||
}
|
||||
g.prototype.isMarkerInCluster = function (j) {
|
||||
if (this._markers.indexOf) {
|
||||
return this._markers.indexOf(j) != -1
|
||||
} else {
|
||||
for (var k = 0, h; (h = this._markers[k]); k++) {
|
||||
if (h === j) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
g.prototype.isMarkerInClusterBounds = function (h) {
|
||||
return this._gridBounds.containsPoint(h.getPosition())
|
||||
}
|
||||
g.prototype.isReal = function () {
|
||||
return this._isReal
|
||||
}
|
||||
g.prototype.updateGridBounds = function () {
|
||||
var h = new BMap.Bounds(this._center, this._center)
|
||||
this._gridBounds = b(this._map, h, this._markerClusterer.getGridSize())
|
||||
}
|
||||
g.prototype.updateClusterMarker = function () {
|
||||
if (this._map.getZoom() > this._markerClusterer.getMaxZoom()) {
|
||||
this._clusterMarker && this._map.removeOverlay(this._clusterMarker)
|
||||
for (var l = 0, j; (j = this._markers[l]); l++) {
|
||||
this._map.addOverlay(j)
|
||||
}
|
||||
return
|
||||
}
|
||||
if (this._markers.length < this._minClusterSize) {
|
||||
this._clusterMarker.hide()
|
||||
return
|
||||
}
|
||||
this._clusterMarker.setPosition(this._center)
|
||||
this._clusterMarker.setText(this._markers.length)
|
||||
var k = this._map
|
||||
var h = this.getBounds()
|
||||
this._clusterMarker.addEventListener('click', function () {
|
||||
k.setViewport(h)
|
||||
})
|
||||
}
|
||||
g.prototype.remove = function () {
|
||||
// eslint-disable-next-line
|
||||
for (var j = 0, h; (h = this._markers[j]); j++) {
|
||||
this._markers[j].getMap() && this._map.removeOverlay(this._markers[j])
|
||||
}
|
||||
this._map.removeOverlay(this._clusterMarker)
|
||||
this._markers.length = 0
|
||||
delete this._markers
|
||||
}
|
||||
g.prototype.getBounds = function () {
|
||||
var k = new BMap.Bounds(this._center, this._center)
|
||||
for (var j = 0, h; (h = this._markers[j]); j++) {
|
||||
k.extend(h.getPosition())
|
||||
}
|
||||
return k
|
||||
}
|
||||
g.prototype.getCenter = function () {
|
||||
return this._center
|
||||
}
|
||||
})()
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,2 @@
|
||||
window.mapCenter = [111.80282489244144, 41.72225716089292]
|
||||
window.mapZoom = 5.4
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue