Commit 18a62e2d by jinxin

会员标签同步

parent d4fb5c83
......@@ -48,7 +48,7 @@
<dependency>
<groupId>com.gic</groupId>
<artifactId>haoban-app-customer-api</artifactId>
<version>3.0-SNAPSHOT</version>
<version>${haoban-app-customer-api}</version>
<scope>compile</scope>
</dependency>
</dependencies>
......
......@@ -6,6 +6,7 @@ import com.gic.haoban.base.api.common.BasePageInfo;
import com.gic.haoban.base.api.common.ServiceResponse;
import com.gic.haoban.manage.api.dto.*;
import java.sql.SQLException;
import java.util.Date;
import java.util.List;
import java.util.Map;
......@@ -322,5 +323,5 @@ public interface ExternalClerkRelatedApiService {
*/
com.gic.api.base.commons.ServiceResponse<String> getMemberIdByExternalId(String wxEnterpriseId,String externalUserId);
void listMemberIdByEnterpriseId(QywxTagSyncInfoDTO dto);
void listMemberIdByEnterpriseId(QywxTagSyncInfoDTO dto) throws SQLException;
}
......@@ -18,6 +18,7 @@
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<libraryVersion>3.0-SNAPSHOT</libraryVersion>
<gic-private-db>3.0-SNAPSHOT</gic-private-db>
</properties>
<dependencyManagement>
<dependencies>
......@@ -207,6 +208,11 @@
<artifactId>gic-operating-api</artifactId>
<version>${gic-operating-api}</version>
</dependency>
<dependency>
<groupId>com.gic</groupId>
<artifactId>gic-private-db</artifactId>
<version>${gic-private-db}</version>
</dependency>
</dependencies>
<build>
......
package com.gic.haoban.manage.service.service.out.impl;
import cn.hutool.core.collection.CollUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.ctrip.framework.apollo.ConfigService;
import com.gic.api.base.commons.Page;
import com.gic.api.base.dto.SubscribeMessageDTO;
import com.gic.clerk.api.dto.ClerkDTO;
......@@ -60,6 +62,10 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.*;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
......@@ -796,7 +802,7 @@ public class ExternalClerkRelatedApiServiceImpl implements ExternalClerkRelatedA
}
@Override
public void listMemberIdByEnterpriseId(QywxTagSyncInfoDTO dto) {
public void listMemberIdByEnterpriseId(QywxTagSyncInfoDTO dto) throws SQLException {
if(null == dto){
log.info("参数不能为空");
return;
......@@ -812,36 +818,70 @@ public class ExternalClerkRelatedApiServiceImpl implements ExternalClerkRelatedA
return;
}
dto.setTotalCount(totalCount);
Integer round = size / totalCount + 1;
Connection conn = null;
ResultSet rs = null;
PreparedStatement pstat = null;
List<String> result = new LinkedList<>();
// 程序计数器
final CountDownLatch count = new CountDownLatch(round);
// 创建线程
ExecutorService executor = Executors.newFixedThreadPool(availableProcessor);
// 分配数据
for (int i = 0; i < round; i++) {
//该线程的查询开始值
int startLen = i * size;
executor.execute(new Runnable() {
@Override
public void run() {
List<String> memberIdList = tabHaobanExternalClerkRelatedMapper.getMemberIdList(wxEnterpriseId, enterpriseId, startLen, size);
dto.setMemberIds(memberIdList);
try {
String excelDb = "devDs";
String schema = "haoban3";
if (isProd()) {
excelDb = "haobanDs" ;
schema = "haoban3.0";
}
conn = com.gic.privatedb.util.ConnectionUtil.createConnection(excelDb, schema);
StringBuilder sqlBuilder = new StringBuilder("select ");
sqlBuilder.append("member_id memberId")
.append(" from tab_haoban_external_clerk_related where wx_enterprise_id ='")
.append(wxEnterpriseId).append("'")
.append(" and enterprise_id ='").append(enterpriseId).append("'")
.append(" and status_flag = 1");
String sql = sqlBuilder.toString();
log.info("查询会员id执行的sql语句:{}",sql);
pstat = conn.prepareStatement(sql, ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
pstat.setFetchSize(Integer.MIN_VALUE);
pstat.setFetchDirection(ResultSet.FETCH_REVERSE);
rs = pstat.executeQuery();
while (rs.next()) {
String memberId = rs.getString("memberId");
result.add(memberId);
if (result.size() == size){
dto.setMemberIds(result);
qywxTagSyncApiService.tagSync(dto);
// 计数器 -1(唤醒阻塞线程)
count.countDown();
result.clear();
}
});
}
try {
// 阻塞线程(主线程等待所有子线程 一起执行业务)
count.await();
} catch (Exception e) {
e.printStackTrace();
} finally {
// 终止线程池
// 启动一次顺序关闭,执行以前提交的任务,但不接受新任务。若已经关闭,则调用没有其他作用。
executor.shutdown();
}
if (CollUtil.isNotEmpty(result)){
dto.setMemberIds(result);
qywxTagSyncApiService.tagSync(dto);
result.clear();
}
}catch (Exception e){
log.warn("异常",e);
}finally {
try {
if (null != rs) {
rs.close();
rs = null;
}
if (null != pstat) {
pstat.close();
pstat = null;
}
if (null != conn) {
conn.close();
conn = null;
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
private boolean isProd() {
com.ctrip.framework.apollo.Config config = ConfigService.getConfig("COMMON.gic-properties");
String env = config.getProperty("environment.value", "") ;
log.info("feile env={}",env);
return "prod".equals(env) ;
}
}
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