/**
* 同步数据信息到ES
* @return
*/
public boolean syncNhReportSeessToEs(){ long begin = System.currentTimeMillis();
logger.error("------------------开始始初始化报备带看列表数据到ES"+ DateUtil.getDefaultDate()+ "-----------------------");
//分页大小
int pageSize = 500;
int total = jdbcTemplate.queryForInt("select count(1) from (select * from nh_report nr where nr.id in(select min(nr1.id) from nh_report nr1 where nr1.record_is_deleted = 0 and nr1.city_code = 1 group by nr1.reporter_panid,nr1.customer_name,nr1.customer_phone))");
if (total == 0) {
return true;
}
logger.error("查出需要处理的报备表数据为"+total+"条");
double querySize = total;
double totalPage = Math.ceil(querySize / pageSize);
logger.error("共分" + totalPage + "页");
final String sql = "select * from(" +
"select nr.*,rownum as rn from nh_report nr where nr.id in" +
"(select min(nr1.id) from nh_report nr1" +
" where nr1.record_is_deleted = 0 and nr1.city_code = 1 group by nr1.reporter_panid, nr1.customer_name, nr1.customer_phone) and rownum <= ? )where rn>=?";
ExecutorService es = Executors.newFixedThreadPool(20);
for (int i = 0; i < totalPage; i++) {
logger.error("执行第"+i+"页");
int start = i * pageSize + 1;
int end = (i + 1) * pageSize;
if (end > total) {
end = total;
}
final Object[] params = new Object[] { end, start };
es.submit(new Runnable() {
@SuppressWarnings("unused")
@Override
public void run() {
List<Map<String, Object>> objs = new ArrayList<Map<String, Object>>();
List<ReportSeeEsModel> contants = jdbcTemplate.query(sql, params, new RowMapper() {
@Override
public ReportSeeEsModel mapRow(ResultSet rs, int i) throws SQLException {
ReportSeeEsModel model = new ReportSeeEsModel();
String id = JugHelper.generalUUID();
//主键id
model.setId(id);
model.setCityCode(String.valueOf(NhReport.CITYCODE_BEIJING));
//客户姓名
String customerName = rs.getObject("CUSTOMER_NAME") != null ? rs.getObject("CUSTOMER_NAME").toString() : "";
model.setCustomerName(customerName);
//客户姓名 不分词
model.setReporterCustomerName(customerName);
//客户电话
String customerPhone = rs.getObject("CUSTOMER_PHONE") != null ? rs.getObject("CUSTOMER_PHONE").toString() : "";
model.setCustomerPhone(customerPhone);
//客户电话,不分词
model.setReporterCustomerPhone(customerPhone);
//报备人公盘id
String reportPanId = rs.getObject("REPORTER_PANID") != null ? rs.getObject("REPORTER_PANID").toString() : "";
model.setReporterPanid(reportPanId);
//城市编码
model.setCityCode(String.valueOf(NhReport.CITYCODE_BEIJING));
//部门id
model.setDeptId(rs.getObject("DEPT_ID") != null ? rs.getObject("DEPT_ID").toString() : "");
//店组id
model.setShopId(rs.getObject("SHOP_ID") != null ? rs.getObject("SHOP_ID").toString() : "");
//大区
model.setRegionId(rs.getObject("REGION_ID") != null ? rs.getObject("REGION_ID").toString() : "");
return model;
}
}); //循环处理带看和户型大小的相关数据
for (ReportSeeEsModel reportSeeEsModel:contants
) {
String reporterPanid = reportSeeEsModel.getReporterPanid();
String customerName = reportSeeEsModel.getCustomerName();
String customerPhone = reportSeeEsModel.getCustomerPhone();
final Object[] params = new Object[] { reporterPanid,customerName,customerPhone };
//查询当前经纪人,当前客户姓名,当前客户电话相关的带看
String sql = "select * from nh_report_see nrs" +
" join nh_report nr on nr.id = nrs.report_id" +
" where nr.reporter_panid = ? and nr.customer_name = ? and nr.customer_phone = ? and nrs.see_time is not null";
List<NhReportSee> reportSees = jdbcTemplate.query(sql, params, new RowMapper() {
@Override
public NhReportSee mapRow(ResultSet rs, int i) throws SQLException {
NhReportSee reportSee = new NhReportSee();
reportSee.setReportId(rs.getObject("REPORT_ID") != null ? rs.getObject("REPORT_ID").toString() : "");
reportSee.setSeeTime(rs.getObject("SEE_TIME") != null ? (Date) rs.getObject("SEE_TIME") : null);
reportSee.setId(rs.getObject("ID") != null ? rs.getObject("ID").toString() : "");
reportSee.setStageId(rs.getObject("STAGE_ID") != null ? rs.getObject("STAGE_ID").toString() : "");
return reportSee;
}
});
//根据当前经纪人当前客户的所有报备id查询出所有的意向户型
String sql2 = "select * from nh_stage_layout nsl" +
" join nh_report_layout nrl on nsl.id = nrl.layout_id" +
" join nh_report nr on nr.id = nrl.proposer_id" +
" where nr.reporter_panid = ? and nr.customer_name = ? and nr.customer_phone = ?";
List<LayoutVo> layouts = jdbcTemplate.query(sql2, params, new RowMapper() {
@Override
public LayoutVo mapRow(ResultSet rs, int i) throws SQLException {
LayoutVo layoutVo = new LayoutVo();
layoutVo.setArea(rs.getObject("AREA") != null ? rs.getObject("AREA").toString() : "");
layoutVo.setRoomNum(rs.getObject("ROOM_NUM") != null ? rs.getObject("ROOM_NUM").toString() : "");
layoutVo.setTotalPrice(rs.getObject("TOTAL_PRICE") != null ? Integer.valueOf(rs.getObject("TOTAL_PRICE").toString()) : null);
return layoutVo;
}
});
//查询当前经纪人当前客户的所有报备
String sql3 = "select * from nh_report nr where nr.reporter_panid = ? and nr.customer_name = ? and nr.customer_phone = ? order by nr.create_date desc";
List<NhReport> reports = jdbcTemplate.query(sql3, params, new RowMapper() {
@Override
public NhReport mapRow(ResultSet rs, int i) throws SQLException {
NhReport report = new NhReport();
report.setId(rs.getObject("ID") != null ? rs.getObject("ID").toString() : "");
report.setCreateDate(rs.getObject("CREATE_DATE") != null ? (Date) rs.getObject("CREATE_DATE") : null);
return report;
}
});
//报备时间
reportSeeEsModel.setReportTime(reports.get(0).getCreateDate().toString());
String areaMax = CommonUtil.formatDouble(CommonUtil.getMaxLayoutArea(layouts)).equals("") ? "0" : CommonUtil.formatDouble(CommonUtil.getMaxLayoutArea(layouts));
String areaMin = CommonUtil.formatDouble(CommonUtil.getMinLayoutArea(layouts)).equals("") ? "0" : CommonUtil.formatDouble(CommonUtil.getMinLayoutArea(layouts));
String roomMax = CommonUtil.formatDouble(CommonUtil.getMaxLayoutHou(layouts)).equals("") ? "0" : CommonUtil.formatDouble(CommonUtil.getMaxLayoutHou(layouts));
String roomMin = CommonUtil.formatDouble(CommonUtil.getMinLayoutHou(layouts)).equals("") ? "0" : CommonUtil.formatDouble(CommonUtil.getMinLayoutHou(layouts));
String priceMax = CommonUtil.formatDouble(CommonUtil.getMaxLayoutTotalPrice(layouts)).equals("") ? "0" : CommonUtil.formatDouble(CommonUtil.getMaxLayoutTotalPrice(layouts));
String priceMin = CommonUtil.formatDouble(CommonUtil.getMinLayoutTotalPrice(layouts)).equals("") ? "0" : CommonUtil.formatDouble(CommonUtil.getMinLayoutTotalPrice(layouts));
//最大价格
reportSeeEsModel.setHouPriceMax(String.valueOf(priceMax));
//最小价格
reportSeeEsModel.setHouPriceMin(String.valueOf(priceMin));
//最大面积
reportSeeEsModel.setHouAreaMax(String.valueOf(areaMax));
//最小面积
reportSeeEsModel.setHouAreaMin(String.valueOf(areaMin));
//最大居室
reportSeeEsModel.setHouMax(String.valueOf(String.valueOf(roomMax)));
//最小居室
reportSeeEsModel.setHouMin(String.valueOf(String.valueOf(roomMin)));
//带看次数
reportSeeEsModel.setSeeCount(String.valueOf(reportSees.size()));
Set<NhReportSee> set = new TreeSet<NhReportSee>(new Comparator<NhReportSee>() {
@Override
public int compare(NhReportSee a, NhReportSee b) {
// 字符串则按照asicc码升序排序
return a.getStageId().compareTo(b.getStageId());
}
});
set.addAll(reportSees);
List<NhReportSee> list = new ArrayList<>(set);
List<ReportSeeInfoEsModel> seeinfos = new ArrayList<>();
if(!CollectionUtils.isEmpty(list)){//如果带看的条数不为0
int index = 0;
for (NhReportSee see:list
) {
if(index==2){
break;
}
ReportSeeInfoEsModel reportSeeInfoEsModel = new ReportSeeInfoEsModel(); final Object[] params1 = new Object[] { see.getReportId() };
String sql4 = "select * from nh_report nr where nr.id = ?";
NhReport nhReport = (NhReport) jdbcTemplate.queryForObject(sql4, params1, new RowMapper() {
@Override
public NhReport mapRow(ResultSet rs, int i) throws SQLException {
NhReport nhReport = new NhReport();
nhReport.setId(rs.getObject("ID") != null ? rs.getObject("ID").toString() : "");
nhReport.setIsCustomerA(rs.getObject("IS_CUSTOMER_A") != null ? Integer.valueOf(rs.getObject("IS_CUSTOMER_A").toString()) : null);
nhReport.setIsFirstVisit(rs.getObject("IS_FIRST_VISIT") != null ? Integer.valueOf(rs.getObject("IS_FIRST_VISIT").toString()) : null);
nhReport.setIsEffective(rs.getObject("IS_EFFECTIVE") != null ? Integer.valueOf(rs.getObject("IS_EFFECTIVE").toString()) : null);
nhReport.setAuditStatus(rs.getObject("AUDIT_STATUS") != null ? Integer.valueOf(rs.getObject("AUDIT_STATUS").toString()) : null);
nhReport.setIntentionStageId(rs.getObject("INTENTION_STAGE_ID") != null ? rs.getObject("INTENTION_STAGE_ID").toString() : "");
nhReport.setPerformanceId(rs.getObject("PERFORMANCE_ID") != null ? rs.getObject("PERFORMANCE_ID").toString() : "");
return nhReport;
}
}); //是否是A类
reportSeeInfoEsModel.setIsCustomerA(String.valueOf(nhReport.getIsCustomerA()));
//是否是首访
reportSeeInfoEsModel.setIsFirstVisit(String.valueOf(nhReport.getIsFirstVisit()));
//报备id
reportSeeInfoEsModel.setReportId(nhReport.getId());
//带看时间
reportSeeInfoEsModel.setSeeDate(see.getSeeTime());
//认购时间和草签时间
if(StringUtils.isNotBlank(nhReport.getPerformanceId())){
final Object[] params2 = new Object[] { see.getReportId() };
String sql5 = "select * from nh_sale_performance nsp where nsp.report_id = ?";
NhSalePerformance performance = (NhSalePerformance) jdbcTemplate.queryForObject(sql5, params2, new RowMapper() {
@Override
public NhSalePerformance mapRow(ResultSet rs, int i) throws SQLException {
NhSalePerformance performance = new NhSalePerformance();
performance.setId(rs.getObject("ID") != null ? rs.getObject("ID").toString() : "");
performance.setBuyDate(rs.getObject("BUY_DATE") != null ? (Date)rs.getObject("BUY_DATE") : null);
performance.setDraftDate(rs.getObject("DRAFT_DATE") != null ? (Date)rs.getObject("DRAFT_DATE") : null);
return performance;
}
});
if(performance.getBuyDate()!=null){
reportSeeInfoEsModel.setBuyDate(performance.getBuyDate());
}
if(performance.getDraftDate()!=null){
reportSeeInfoEsModel.setDraftDate(performance.getDraftDate());
}
}
//带看id
reportSeeInfoEsModel.setSeeId(see.getId());
//是否有效
reportSeeInfoEsModel.setIsEffective(String.valueOf(nhReport.getIsEffective()));
//审核状态
reportSeeInfoEsModel.setAuditStatus(String.valueOf(nhReport.getAuditStatus()));
//楼盘id
reportSeeInfoEsModel.setStageId(nhReport.getIntentionStageId());
NhStage stage = nhStageIService.findById(nhReport.getIntentionStageId());
if(stage!=null){
//楼盘名称
reportSeeInfoEsModel.setStageName(stage.getStageName());
}
seeinfos.add(reportSeeInfoEsModel);
index++;
}
}
reportSeeEsModel.setSeeInfo(seeinfos);
}
for (ReportSeeEsModel model : contants) {
try {
objs.add(objectToMap(model));
} catch (Exception e) {
e.printStackTrace();
}
}
if(objs.size()>0){
logger.error("本次插入数据"+objs.size()+"条");
String result = ESClient.batchInsert(ESContant.NEWHOUSECUSTOMER_INDEX, ESContant.REPORTCUSTOMER_TYPE, objs);
logger.error(result);
} }
});
}
es.shutdown();
try {
boolean loop = true;
do { //等待所有任务完成
loop = !es.awaitTermination(2, TimeUnit.SECONDS); //阻塞,直到线程池里所有任务结束
} while (loop);
} catch (Exception e) {
e.printStackTrace();
}
logger.error("------------------结束初始化报备带看列表数据到ES"+ DateUtil.getDefaultDate()+ "-----------------------");
return true;
}

多线程分页处理批量数据--jdbc方式的更多相关文章

  1. Python多线程爬虫与多种数据存储方式实现(Python爬虫实战2)

    1. 多进程爬虫 对于数据量较大的爬虫,对数据的处理要求较高时,可以采用python多进程或多线程的机制完成,多进程是指分配多个CPU处理程序,同一时刻只有一个CPU在工作,多线程是指进程内部有多个类 ...

  2. ORACLE 分页 java 用jdbc方式以 sys账号连接oracle数据的问题

    2,3,4,6,8   betwenen 为闭区间,前后都包括 select * from(select a.*,rownum rn from (select * from student) a ) ...

  3. JAVA多线程提高四:多个线程之间共享数据的方式

    多个线程访问共享对象和数据的方式 如果每个线程执行的代码相同,可以使用同一个Runnable对象,这个Runnable对象中有那个共享数据,例如,买票系统就可以这么做. 如果每个线程执行的代码不同,这 ...

  4. fetch bulk collect into 进行批量、快速提取数据的方式

    1.游标的含义 2.oracle 11g 中的三类游标的使用方式 3.oracle 11g中使用 fetch ... bulk collect into 进行批量.快速提取数据的方式 4.根据不同情况 ...

  5. java多线程与线程并发五:多个线程访问共享对象和数据的方式

    本节的内容主要是对前面几节提到的线程间共享数据的方式做一个总结. 线程之间共享数据有以下几种方式: 1.如果每个线程执行的代码相同,可以使用同一个Runnable对象. 2.如果每个线程执行的代码不同 ...

  6. JAVA多线程学习八-多个线程之间共享数据的方式

    多个线程访问共享对象和数据的方式 如果每个线程执行的代码相同,可以使用同一个Runnable对象,这个Runnable对象中有那个共享数据,例如,买票系统就可以这么做. 如果每个线程执行的代码不同,这 ...

  7. Android编程中的5种数据存储方式

    Android编程中的5种数据存储方式 作者:牛奶.不加糖 字体:[增加 减小] 类型:转载 时间:2015-12-03我要评论 这篇文章主要介绍了Android编程中的5种数据存储方式,结合实例形式 ...

  8. 2017.11.12 web中JDBC 方式访问数据库的技术

    JavaWeb------ 第四章 JDBC数据库访问技术 在JavaWeb应用程序中数据库访问是通过Java数据库连接(JavaDateBase Connectivity简称JDBC)数据库的链接一 ...

  9. Spark JDBC方式连接MySQL数据库

    Spark JDBC方式连接MySQL数据库 一.JDBC connection properties(属性名称和含义) 二.spark jdbc read MySQL 三.jdbc(url: Str ...

随机推荐

  1. 《hello--world团队》第五次作业:项目需求分析改进与系统设计

    项目 内容 这个作业属于哪个课程 2016级计算机科学与工程学院软件工程(西北师范大学) 这个作业的要求在哪里 实验九 团队作业5-团队项目需求改进与系统设计 团队名称 <hello--worl ...

  2. 【图文教程】CentOS 7配置静态IP地址

    文档目标:帮助新手在刚刚安装好的CentOS 7上设置静态IP地址. 目标人群:本篇教程比较简单,针对的是初学者,专业人士请跳过,不喜勿喷.谢谢! 在vmware中安装好centos7(安装过程省略) ...

  3. Pycharm----【Mac】设置默认模板

    使用场景:新建的文件中,有某些字段或者代码段是每次都需要写入的,因此为了编写的方便,我们会创建对应的模板,每次新建选择模板即可. 操作步骤如下: pycharm--->preference--- ...

  4. PHP 连接MySQL

    连接MySQL 在我们访问MySQL数据库前,我们需要先连接到数据库服务器: 实例(MySQLi - 面向对象) <?php $servername = "localhost" ...

  5. 关于java中的值传递和引用传递(也就是地址传递)

    概念解释: 值传递,传递值,在函数中形参发生的变化不影响实参. 引用传递,传递对象引用,在函数中形参发生的变化影响实参. ======================================= ...

  6. asp.net文件上传下载组件

    以ASP.NET Core WebAPI 作后端 API ,用 Vue 构建前端页面,用 Axios 从前端访问后端 API ,包括文件的上传和下载. 准备文件上传的API #region 文件上传  ...

  7. CF504E Misha and LCP on Tree 后缀自动机+树链剖分+倍增

    求树上两条路径的 LCP (树上每个节点代表一个字符) 总共写+调了6个多小时,终于过了~ 绝对是我写过的最复杂的数据结构了 我们对这棵树进行轻重链剖分,然后把所有的重链分正串,反串插入到广义后缀自动 ...

  8. JDK8中好用的日期处理-LocalDate类-LocalTime-LocalDateTIme,mysql解决时区相差13小时的问题,日期格式器DateTimeFormatter

    set global time_zone='+08:00'; set time_zone = '+08:00'; show variables like '%time_zone:'

  9. 【原创】go语言学习(四)流程控制

    目录: 1.if else语句块 2.for语句 3.switch语句 if else语句块 1.基本语法 if condition { //do something } if statement; ...

  10. P2698 [USACO12MAR]花盆Flowerpot——单调队列

    记录每天看(抄)题解的日常: https://www.luogu.org/problem/P2698 我们可以把坐标按照x递增的顺序排个序,这样我们就只剩下纵坐标了: 如果横坐标(l,r)区间,纵坐标 ...