Commit 9e024fc8 authored by 董建华's avatar 董建华

统计可查询量

parent 34b5a9f5
package com.config;
import cn.quantgroup.tech.util.TechEnvironment;
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.DependsOn;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.JpaVendorAdapter;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.orm.jpa.vendor.Database;
import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import javax.persistence.EntityManagerFactory;
import javax.sql.DataSource;
import java.util.Properties;
import java.util.concurrent.TimeUnit;
/**
* @author :dongjianhua
* @date :Created in 2020/7/23 14:22
* @description:jpa数据源配置
* @modified By:
* @version: 1.0
*/
@Configuration
@EnableJpaRepositories(basePackages = {"com.jpa.repository"})
@EnableTransactionManagement
public class JpaDataConfig {
@Value("${db.minPoolSize}")
private int minPoolSize;
@Value("${db.maxPoolSize}")
private int maxPoolSize;
@Value("${data.source.jdbcUrl}")
private String jdbcUrl;
@Value("${data.source.username}")
private String username;
@Value("${data.source.password}")
private String password;
@Bean(name = "jpaDataSource")
public DataSource dataSource() {
HikariConfig config = new HikariConfig();
config.setJdbcUrl(jdbcUrl);
config.setPassword(password);
config.setUsername(username);
// 连接池中允许的最大连接数。缺省值:10;推荐的公式:((core_count * 2) + effective_spindle_count)
//线上是双核机器,100已经非常多。。。。
config.setMaximumPoolSize(maxPoolSize > 100 ? 100 : maxPoolSize);
config.setMinimumIdle(20);
//个连接idle状态的最大时长(毫秒),超时则被释放(retired),缺省:10分钟
config.setIdleTimeout(60000);
//等待连接池分配连接的最大时长(毫秒),超过这个时长还没可用的连接则发生SQLException, 缺省:30秒
config.setConnectionTimeout(30000);
config.setValidationTimeout(3000);
//个连接的生命时长(毫秒),超时而且没被使用则被释放(retired),缺省:30分钟,建议设置比数据库超时时长少30秒,
// 参考MySQL wait_timeout参数(show variables like '%timeout%';)
config.setMaxLifetime(TimeUnit.HOURS.toMillis(7));
config.addDataSourceProperty("cachePrepStmts", "true");
config.addDataSourceProperty("prepStmtCacheSize", "250");
config.addDataSourceProperty("prepStmtCacheSqlLimit", "2048");
return new HikariDataSource(config);
}
@Bean
@DependsOn(value = "jpaDataSource")
public EntityManagerFactory entityManagerFactory(@Qualifier("jpaDataSource") DataSource dataSource) {
LocalContainerEntityManagerFactoryBean entityManager = new LocalContainerEntityManagerFactoryBean();
entityManager.setDataSource(dataSource);
entityManager.setPackagesToScan("com.entity");
entityManager.setPersistenceUnitName("jpaDataSource");
Properties properties = new Properties();
properties.put("hibernate.jdbc.batch_size", 30);
properties.put("hibernate.order_inserts", true);
properties.put("hibernate.order_updates", true);
entityManager.setJpaProperties(properties);
entityManager.setJpaVendorAdapter(jpaVendorAdapter());
entityManager.afterPropertiesSet();
return entityManager.getObject();
}
private JpaVendorAdapter jpaVendorAdapter() {
HibernateJpaVendorAdapter hibernateJpaVendorAdapter = new HibernateJpaVendorAdapter();
hibernateJpaVendorAdapter.setShowSql(!TechEnvironment.isPro());//測試環境打印sql
hibernateJpaVendorAdapter.setGenerateDdl(false);
hibernateJpaVendorAdapter.setDatabase(Database.MYSQL);
return hibernateJpaVendorAdapter;
}
@Bean
public PlatformTransactionManager transactionManager(EntityManagerFactory entityManagerFactory) {
JpaTransactionManager transactionManager = new JpaTransactionManager();
transactionManager.setEntityManagerFactory(entityManagerFactory);
return transactionManager;
}
}
package com.controller;
import com.model.JsonResult;
import com.model.QueryStatisticsModel;
import com.service.statistics.QueryStatisticsService;
import com.util.DateUtil;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import javax.validation.constraints.NotNull;
import javax.xml.crypto.Data;
import java.sql.Timestamp;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Date;
import java.util.List;
/**
* @author :dongjianhua
* @date :Created in 2020/7/23 19:09
* @description:
* @modified By:
* @version:
*/
@RequestMapping("/statistics")
@RestController
public class QueryStatisticsController {
@Resource
private QueryStatisticsService queryStatisticsService;
@RequestMapping("/query")
@Validated
public JsonResult query(@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @NotNull Date start, @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @NotNull Date end){
List<QueryStatisticsModel> query = queryStatisticsService.query(new Timestamp(start.getTime()),new Timestamp(end.getTime()));
return JsonResult.success(query);
}
}
package com.emums;
public enum Corporation {
GUANGDAXIAODAI, //广大小贷
ZHONGXINLIMIN//众信利民
}
package com.emums;
public enum DataSource {
ZHJ,//中互金
BAIHANG //百行
}
package com.emums;
import com.google.common.base.Strings;
/**
* 定义错误类别,全局唯一
*
* @author xiaoguang.xu
* @date 2020-04-08
*/
public enum ErrorType {
/**
* 正确。
*/
SUCCESS("0", "正确") {
@Override
public String getFullCode(String extendCode) {
return this.getCode();
}
},
/**
* 客户端错误,代表着客户端错误,一般情况下由客户端自行解决
*/
AUTH("401", "权限错误"),
RATE_LIMIT("402", "流量控制"),
PARAM("403", "参数错误"),
URI("404", "请求地址错误"),
CONCURRENT("405", "并发错误"),
BEHAVE("406", "行为错误"),
/**
* 服务端错误
*/
MIDDLEWARE("501", "中间件错误"),
THIRD_PART("502", "第三方服务错误"),
FAIL("503", "未保存"),
/**
* 不可预知的错误,一般不会出现,出现时必须处理,包装成客户端错误或服务端错误
*/
UNKNOWN("600", "未知错误");
private final String code;
private final String desc;
protected String getCode(){
return this.code;
}
ErrorType(String code, String desc) {
this.code = code;
this.desc = desc;
}
public String getFullCode(String extendCode) {
return this.code + Strings.padStart(extendCode, 2, '0');
}
public String getDesc() {
return desc;
}
}
package com.entity.jpa;
import javax.persistence.Column;
import javax.persistence.PrePersist;
import javax.persistence.PreUpdate;
import java.io.Serializable;
import java.sql.Timestamp;
/**
* @author :dongjianhua
* @date :Created in 2020/7/23 14:53
* @description:
* @modified By:
* @version:
*/
public class BaseRepositoryEntry implements Serializable {
@Column(name = "create_at")
private Timestamp createdAt;
@Column(name = "update_at")
private Timestamp updatedAt;
@PrePersist
public void prePersist() {
Timestamp timestamp = new Timestamp(System.currentTimeMillis());
createdAt = timestamp;
updatedAt = timestamp;
}
@PreUpdate
public void preUpdate() {
updatedAt = new Timestamp(System.currentTimeMillis());
}
}
package com.entity.jpa;
import com.emums.Corporation;
import com.emums.DataSource;
import lombok.Data;
import javax.persistence.*;
import java.sql.Timestamp;
import java.time.LocalDate;
/**
* @author :dongjianhua
* @date :Created in 2020/7/23 14:56
* @description:统计实体
* @modified By:
* @version:
*/
@Entity
@Table(name = "query_statistics")
@Data
public class QueryStatisticsEntry extends BaseRepositoryEntry{
private static final long serialVersionUID = 8524346940155462970L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
/**
* 上报数量
*/
@Column(name = "report_num")
private Long reportNum;
/**
* 上报时间精确到天
*/
@Column(name = "report_time")
private Timestamp reportTime;
/**
* 上报月份
*/
@Column(name = "report_month")
private String reportMonth;
/**
* 月查可查询量
*/
@Column(name = "query_quantity")
private Long queryQuantity; /**
* 月查可查询量
*/
@Column(name = "max_query_num")
private Long maxQueryNum;
/**
*数据源(0,中互金,1百行)
*/
@Column(name = "data_suorce")
private DataSource dataSource;
/**
* 报送主体
*/
@Column(name = "corporation")
private Corporation corporation;
}
package com.jpa.repository;
import com.emums.DataSource;
import com.entity.jpa.QueryStatisticsEntry;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import java.sql.Timestamp;
import java.util.List;
public interface QueryStatisticsRepository extends JpaRepository<QueryStatisticsEntry, Long>, JpaSpecificationExecutor<QueryStatisticsEntry> {
List<QueryStatisticsEntry> findByReportTimeAfterAndReportTimeBefore(Timestamp start, Timestamp end);
List<QueryStatisticsEntry> findByReportTimeAndDataSource(Timestamp time, DataSource dataSource);
List<QueryStatisticsEntry> findByReportMonthAndDataSource(String month, DataSource dataSource);
}
package com.mapper.report;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.util.Date;
@Repository
public interface BaiHangMapper {
long getGdXdSearchNum(@Param("start") Date start, @Param("end")Date end);
long getZxLmSearchNum(@Param("start")Date start, @Param("end")Date end);
long getZxLmReportNum(@Param("start")Date start, @Param("end")Date end);
long getGdXdReportNum(@Param("start")Date start, @Param("end")Date end);
}
\ No newline at end of file
package com.mapper.report;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.util.Date;
@Repository
public interface ZhjMapper {
long getGdXdSearchNum(@Param("start") Date start, @Param("end") Date end);
long getGdXdReportNum(@Param("start") Date start, @Param("end") Date end);
}
\ No newline at end of file
package com.model;
import com.emums.ErrorType;
import lombok.Getter;
/**
* 对外接口统一返回的对象
* @author xiaoguang.xu
* @date 2020-04-08
*/
@Getter
public class JsonResult<T> {
/** 消息代码:0-成功 */
private String code;
/** 提示信息 */
private String msg;
/** 返回数据 */
private Object data;
/** 时间戳 */
private Long timestamp;
private JsonResult() {
this.timestamp = System.currentTimeMillis();
}
private JsonResult(ErrorType errorType, String extendCode, String msg, Object data) {
this();
this.code = errorType.getFullCode(extendCode);
this.msg = msg;
this.data = data;
}
public static <T> JsonResult<T> success() {
return buildResult(ErrorType.SUCCESS);
}
public static <T> JsonResult<T> success(T data) {
return buildResult(ErrorType.SUCCESS, null, null, data);
}
public static <T> JsonResult<T> error(ErrorType errorType, String extendCode, String msg) {
return buildResult(errorType, extendCode, msg, null);
}
public static <T> JsonResult<T> error(ErrorType errorType, String extendCode, String msg, T data) {
return buildResult(errorType, extendCode, msg, data);
}
public static <T> JsonResult<T> unknownError() {
return buildResult(ErrorType.UNKNOWN);
}
private static <T> JsonResult<T> buildResult(ErrorType errorType) {
return new JsonResult<T>(errorType, "", errorType.getDesc(), null);
}
private static <T> JsonResult<T> buildResult(ErrorType errorType, String extendCode, String msg, T data) {
return new JsonResult<T>(errorType, extendCode, msg, data);
}
}
package com.model;
import com.emums.Corporation;
import com.emums.DataSource;
import lombok.Data;
/**
* @author :dongjianhua
* @date :Created in 2020/7/23 16:46
* @description:统计查询返回视图
* @modified By:
* @version:
*/
@Data
public class QueryStatisticsModel {
private Long hasQueryNum;//已经查询量
private Long maxQueryNum;//最大可查
private Long canQueryNum;//剩余可查
private String time;
private DataSource dataSource;//数据源
private Corporation corporation;//主体
}
package com.service.statistics;
import com.emums.DataSource;
import com.entity.jpa.QueryStatisticsEntry;
import java.util.Date;
import java.util.List;
/**
* 获取上报和查询数量
*/
public interface GetReportAndSearchNum {
//通过日期获取那一天的数据
List<QueryStatisticsEntry> getByDate(Date date);
//获取数据源
DataSource getDataSource();
}
package com.service.statistics;
import com.entity.jpa.QueryStatisticsEntry;
import com.model.QueryStatisticsModel;
import java.sql.Timestamp;
import java.util.Date;
import java.util.List;
/**
* @author :dongjianhua
* @date :Created in 2020/7/23 16:50
* @description:查询统计服务
* @modified By:
* @version:
*/
public interface QueryStatisticsService {
List<QueryStatisticsModel> query(Timestamp start, Timestamp end);
void statisticsAndSave(List<QueryStatisticsEntry> list);
void doStatisticsSave(Date time);
}
package com.service.statistics.impl;
import com.emums.Corporation;
import com.emums.DataSource;
import com.entity.jpa.QueryStatisticsEntry;
import com.google.common.collect.Lists;
import com.jpa.repository.QueryStatisticsRepository;
import com.mapper.report.BaiHangMapper;
import com.service.statistics.GetReportAndSearchNum;
import com.util.DateUtil;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.sql.Timestamp;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.stream.Collector;
import java.util.stream.Collectors;
/**
* @author :dongjianhua
* @date :Created in 2020/7/24 10:37
* @description:百行获取上报查询数量
* @modified By:
* @version: 1.0
*/
@Service
public class BaiHangReportAndSearchNum implements GetReportAndSearchNum {
@Resource
private BaiHangMapper baiHangMapper;
@Resource
private QueryStatisticsRepository queryStatisticsRepository;
@Override
public DataSource getDataSource() {
return DataSource.BAIHANG;
}
@Override
public List<QueryStatisticsEntry> getByDate(Date date) {
Date start = DateUtil.getDate(date, DateUtil.YYYY_MM_DD);
Calendar calendar = Calendar.getInstance();
calendar.setTime(start);
//增加一天
calendar.add(Calendar.DATE, 1);
//广达上报数量
long gdXdReportNum = baiHangMapper.getGdXdReportNum(start, calendar.getTime());
//众信利民上报数
long zxLmReportNum = baiHangMapper.getZxLmReportNum(start, calendar.getTime());
//众信利民查询数
long zxLmSearchNum = baiHangMapper.getZxLmSearchNum(start, calendar.getTime());
//广大小贷查询数
long gdXdSearchNum = baiHangMapper.getGdXdSearchNum(start, calendar.getTime());
QueryStatisticsEntry zxlm = new QueryStatisticsEntry();
zxlm.setDataSource(getDataSource());
zxlm.setCorporation(Corporation.ZHONGXINLIMIN);
zxlm.setQueryQuantity(zxLmSearchNum);
zxlm.setReportNum(zxLmReportNum);
zxlm.setReportTime(new Timestamp(start.getTime()));
QueryStatisticsEntry gdxd = new QueryStatisticsEntry();
gdxd.setDataSource(getDataSource());
gdxd.setCorporation(Corporation.GUANGDAXIAODAI);
gdxd.setQueryQuantity(gdXdSearchNum);
gdxd.setReportNum(gdXdReportNum);
gdxd.setReportTime(new Timestamp(start.getTime()));
//本月
Date month = DateUtil.getDate(date, DateUtil.YYYY_MM);
zxlm.setReportMonth(DateUtil.formatterDate(month, DateUtil.YYYY_MM));
gdxd.setReportMonth(DateUtil.formatterDate(month, DateUtil.YYYY_MM));
calendar.setTime(month);
calendar.add(Calendar.MONTH,-1);
//上月
String preMonth = DateUtil.formatterDate(calendar.getTime(), DateUtil.YYYY_MM);
List<QueryStatisticsEntry> byReportMonth = queryStatisticsRepository
.findByReportMonthAndDataSource(preMonth, getDataSource());
Map<Corporation, List<QueryStatisticsEntry>> groupByCorp = byReportMonth
.stream()
.collect(Collectors.groupingBy(QueryStatisticsEntry::getCorporation));
//最大查询量为上月报送量*10
groupByCorp.forEach((k,v)->{
long sum = v.stream()
.mapToLong(QueryStatisticsEntry::getReportNum)
.sum();
if(k == Corporation.GUANGDAXIAODAI){
gdxd.setMaxQueryNum(sum * 10);
}
if(k == Corporation.ZHONGXINLIMIN){
zxlm.setMaxQueryNum(sum * 10);
}
});
return Lists.newArrayList(zxlm, gdxd);
}
}
package com.service.statistics.impl;
import com.emums.Corporation;
import com.emums.DataSource;
import com.entity.jpa.QueryStatisticsEntry;
import com.google.common.collect.Lists;
import com.jpa.repository.QueryStatisticsRepository;
import com.model.QueryStatisticsModel;
import com.service.report.ReportService;
import com.service.statistics.GetReportAndSearchNum;
import com.service.statistics.QueryStatisticsService;
import com.util.ApplicationContextHelper;
import com.util.DateUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.data.domain.Example;
import org.springframework.stereotype.Service;
import shaded.com.google.common.base.Splitter;
import javax.annotation.Resource;
import java.sql.Timestamp;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @author :dongjianhua
* @date :Created in 2020/7/23 16:51
* @description:服务实现
* @modified By:
* @version:
*/
@Service
public class QueryStatisticsServiceImpl implements QueryStatisticsService {
@Resource
private QueryStatisticsRepository queryStatisticsRepository;
@Resource
private ApplicationContextHelper applicationContextHelper;
@Override
public List<QueryStatisticsModel> query(Timestamp start, Timestamp end) {
List<QueryStatisticsModel> result = Lists.newArrayList();
List<QueryStatisticsEntry> datas = queryStatisticsRepository.findByReportTimeAfterAndReportTimeBefore(start, end);
Map<String, List<QueryStatisticsEntry>> collect = datas.stream().collect(Collectors.groupingBy(this::groupByKey));
collect.forEach((k, v) -> result.add(convertQueryStatisticsModel(k, v)));
return result;
}
@Override
public void statisticsAndSave(List<QueryStatisticsEntry> list) {
list.stream().forEach(queryStatisticsRepository::save);
}
@Override
public void doStatisticsSave(Date time) {
ApplicationContext context = applicationContextHelper.getInstance();
Map<String, GetReportAndSearchNum> beansOfType = context.getBeansOfType(GetReportAndSearchNum.class);
beansOfType.forEach((k, v) -> {
List<QueryStatisticsEntry> byDate = v.getByDate(time);
//查询本日有没有
List<QueryStatisticsEntry> byReportTime = queryStatisticsRepository
.findByReportTimeAndDataSource(new Timestamp(time.getTime()), v.getDataSource());
byDate.stream().forEach(o -> {
byReportTime.forEach(q -> {
if (o.getCorporation() == q.getCorporation()) {
o.setId(q.getId());
}
});
o.setDataSource(v.getDataSource());
o.setReportMonth(DateUtil.formatterDate(time, DateUtil.YYYY_MM));
o.setReportTime(new Timestamp(DateUtil.getDate(time, DateUtil.YYYY_MM_DD).getTime()));
});
//保存
statisticsAndSave(byDate);
});
}
/**
* 数据转换
* @param key
* @param list
* @return
*/
private QueryStatisticsModel convertQueryStatisticsModel(String key, List<QueryStatisticsEntry> list) {
QueryStatisticsModel model = new QueryStatisticsModel();
List<String> split = Splitter.on("#").splitToList(key);
String reportMonth = split.get(0);
String dataSource = split.get(1);
String corporation = split.get(2);
//已经查询总量
long sum = list.stream().mapToLong(QueryStatisticsEntry::getQueryQuantity).sum();
Long maxQueryNum = list.stream().findAny().get().getMaxQueryNum();
model.setTime(reportMonth);
model.setDataSource(DataSource.valueOf(dataSource));
model.setCorporation(Corporation.valueOf(corporation));
model.setHasQueryNum(sum);
model.setMaxQueryNum(maxQueryNum);
model.setCanQueryNum(maxQueryNum - sum);
return model;
}
/**
* 按照月份数据源主体分组
*
* @param q
* @return
*/
private String groupByKey(QueryStatisticsEntry q) {
return String.format("%s#%s#%s", q.getReportMonth(),
q.getDataSource().name(), q.getCorporation().name());
}
}
package com.service.statistics.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.emums.Corporation;
import com.emums.DataSource;
import com.entity.jpa.QueryStatisticsEntry;
import com.google.common.collect.Lists;
import com.mapper.report.ZhjMapper;
import com.service.report.ReportService;
import com.service.statistics.GetReportAndSearchNum;
import com.util.DateUtil;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
* @author :dongjianhua
* @date :Created in 2020/7/24 14:58
* @description:中互金
* @modified By:
* @version: 1.0
*/
@Service
public class ZhjReportAndSearchNum implements GetReportAndSearchNum {
@Resource
private ZhjMapper zhjMapper;
@Resource
private ReportService reportService;
@Override
public List<QueryStatisticsEntry> getByDate(Date date) {
Date start = DateUtil.getDate(date, DateUtil.YYYY_MM_DD);
Calendar calendar = Calendar.getInstance();
calendar.setTime(start);
//增加一天
calendar.add(Calendar.DATE, 1);
long gdXdReportNum = zhjMapper.getGdXdReportNum(start, calendar.getTime());
long gdXdSearchNum = zhjMapper.getGdXdSearchNum(start, calendar.getTime());
QueryStatisticsEntry entry = new QueryStatisticsEntry();
entry.setReportNum(gdXdReportNum);
entry.setQueryQuantity(gdXdSearchNum);
entry.setMaxQueryNum(0L);
entry.setCorporation(Corporation.GUANGDAXIAODAI);
Map<String, String> resultMap = reportService.querycontral();
if(resultMap.get("code").equals("200")){
String data = resultMap.get("data");
JSONObject parse = JSON.parseObject(data);
String maxquerycount = parse.getString("maxquerycount");
entry.setMaxQueryNum(Long.valueOf(maxquerycount));
}
return Lists.newArrayList(entry);
}
@Override
public DataSource getDataSource() {
return DataSource.ZHJ;
}
}
package com.timer;
import com.service.statistics.QueryStatisticsService;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.Calendar;
/**
* @author :dongjianhua
* @date :Created in 2020/7/24 15:42
* @description:统计定时器
* @modified By:
* @version: 1.0
*/
@Component
public class QueryStatisticsTimer {
@Resource
private QueryStatisticsService queryStatisticsService;
@Scheduled(fixedDelay = 1000 * 60 * 60, initialDelay = 10000)
public void run() {
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DATE, -1);
queryStatisticsService.doStatisticsSave(calendar.getTime());
}
}
package com.util;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
/**
* @author :dongjianhua
* @date :Created in 2020/7/24 15:48
* @description:spring上下文
* @modified By:
* @version: 1.0
*/
@Component
public class ApplicationContextHelper implements ApplicationContextAware {
private ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
}
public ApplicationContext getInstance(){
return applicationContext;
}
}
package com.util;
import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.Calendar;
import java.util.Date;
......@@ -26,6 +30,7 @@ public class DateUtil {
public static final String YYYYMMDD = "yyyyMMdd";
public static final String YYYYMM = "yyyyMM";
public static final String YYYY_MM = "yyyy-MM";
public static String getCurrentDay(int day) {
return getCurrentDay(day, YYYY_MM_DD_MM_HH_SS);
......@@ -143,4 +148,19 @@ public class DateUtil {
return null;
}
public static LocalDate dateToLocalDateTime(Date date) {
Instant instant = date.toInstant();
ZoneId zone = ZoneId.systemDefault();
return LocalDateTime.ofInstant(instant, zone).toLocalDate();
}
public static Date getDate(Date date,String pattern){
SimpleDateFormat dateFormatNew = new SimpleDateFormat(pattern);
try {
return dateFormatNew.parse(dateFormatNew.format(date));
} catch (ParseException e) {
e.printStackTrace();
}
return null;
}
}
......@@ -374,8 +374,17 @@ public class Utils {
return result;
}
//判断编码格式方法
private String getFilecharset(FileInputStream sourceFile) {
// public static void main(String[] args) {
// String path = "C:\\Users\\41276\\Desktop\\121EXPORTTRADEINFO.txt";
// try {
// System.out.println(getFilecharset(new FileInputStream(new File(path))));
// } catch (FileNotFoundException e) {
// e.printStackTrace();
// }
// }
//判断编码格式方法
private static String getFilecharset(FileInputStream sourceFile) {
String charset = "GBK";
byte[] first3Bytes = new byte[3];
try {
......
<?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="com.mapper.report.BaiHangMapper">
<select id="getGdXdSearchNum" resultType="long">
--广达百行查询量--
SELECT count(*) from common_request_event
WHERE time_created &lt; #{end}
and time_created >= #{start}
and request_url_type = 'BaiHangPersionalCreditReport'
</select>
<select id="getZxLmSearchNum" resultType="long">
--众信利民百行查询量--
SELECT count(*) from common_request_event
WHERE request_url_type in ('BaiHangPersionalCreditReportZxlmA','BaiHangPersionalCreditReportZxlmB','BaiHangPersionalCreditReportZxlmC')
and time_created &lt; #{end}
and time_created >= #{start}
</select>
<select id="getZxLmReportNum" resultType="long">
--众信利民实体报送量--
SELECT count(*) num from loan_info where created_at >= #{start} and created_at
&lt;
#{end} AND enable = 1
</select>
<select id="getGdXdReportNum" resultType="long">
--广达实体报送量--
SELECT count(*) num from loan_info where created_at >= #{start} and created_at &lt; #{end} AND enable = 1
</select>
</mapper>
\ No newline at end of file
......@@ -116,5 +116,4 @@
order by id
</select>
</mapper>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mapper.report.BaiHangMapper">
<select id="getGdXdSearchNum" resultType="long">
--广达中互金查询量--
SELECT count(*) FROM common_request_event c WHERE
c.request_url_type
in ('ZhongHuJinThreeElement','ZhongHuJinWholeIn','ZhongHuJinCreditReport','ZhongHuJinJudicial','ZhongHuJinCreditReportPl')
and time_created >= #{start} and time_created &lt; #{end}
</select>
<select id="getGdXdReportNum" resultType="long">
--广达实体报送量--
select
SUM(loadcount)
from
reportrecord
where
createtime >= #{start} and createtime &lt; #{end}
and
RIGHT(filename,4) = '0000'
and
issearch=1
and
status=1
</select>
</mapper>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment