package org.springblade.qinzhesync.service;
|
|
import lombok.extern.slf4j.Slf4j;
|
import org.springblade.core.tool.api.R;
|
import org.springblade.qinzhesync.utils.SnowflakeIdGenerator;
|
import org.springblade.system.feign.ISysClient;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Qualifier;
|
import org.springframework.jdbc.core.JdbcTemplate;
|
import org.springframework.jdbc.core.RowMapper;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import java.sql.ResultSet;
|
import java.sql.SQLException;
|
import java.util.ArrayList;
|
import java.util.List;
|
|
/**
|
* 勤哲主制分工表数据同步的服务
|
*/
|
@Service
|
@Slf4j
|
public class QinzheSyncService {
|
@Qualifier("primaryJdbcTemplate")
|
@Autowired
|
private JdbcTemplate mdmJdbcTemplate;
|
|
@Qualifier("qinzheJdbcTemplate")
|
@Autowired
|
private JdbcTemplate qinzheJdbcTemplate;
|
@Autowired
|
private ISysClient sysClient;
|
@Autowired
|
private SnowflakeIdGenerator idGen;
|
|
|
private static final String DEFAULT_QUERY_SQL = "select 产品号 cph,零件号 ljh,零件名称 ljmc,主制 zz,主制工段 zzgd,主管工艺 zggy,副管 fg,车间计划员 cjjhy,计划员 jhy from v_张立虎_2厂主制分工表";
|
private static final String QINZHE_QUERY_KEY = "QINZHE_QUERY";
|
|
/**
|
* 批量插入数据数量
|
*/
|
static final int BATCH_SIZE = 2000;//5000;
|
|
@Transactional
|
public void syncData(){
|
/*
|
Map mmdData = mdmJdbcTemplate.queryForMap("select count(*) n from mdm_machine");
|
log.info("mdm:{}",mmdData);
|
Map qinzheData = qinzheJdbcTemplate.queryForMap("select count(*) n from mdm_machine");
|
log.info("qingzhe:{}",qinzheData);
|
*/
|
cleanLocalTable();
|
//cleanQinzheDataInDivision();
|
saveQinzheFgb();
|
}
|
|
/**
|
* 将勤哲系统的数据先一次性导入mdm系统数据库临时表
|
*/
|
public void saveQinzheFgb(){
|
|
List<QinzheZzFgb> fgbList = this.qinzheJdbcTemplate.query(this.getQuerySql(),new RowMapper<QinzheZzFgb>(){
|
@Override
|
public QinzheZzFgb mapRow(ResultSet rs, int rowNum) throws SQLException {
|
QinzheZzFgb fgb = new QinzheZzFgb();
|
fgb.setCph(rs.getString("cph"));
|
fgb.setLjh(rs.getString("ljh"));;
|
fgb.setLjmc(rs.getString("ljmc"));
|
fgb.setZz(rs.getString("zz"));
|
fgb.setZzgd(rs.getString("zzgd"));
|
fgb.setZggy(rs.getString("zggy"));
|
fgb.setFg(rs.getString("fg"));
|
fgb.setCjjhy(rs.getString("cjjhy"));
|
fgb.setJhy(rs.getString("jhy"));
|
|
return fgb;
|
}
|
});
|
|
insertToLocalTable(fgbList);
|
|
//updateProduceDivision(fgbList);
|
}
|
|
/**
|
* 清除本地临时表数据
|
*/
|
private void cleanLocalTable(){
|
this.mdmJdbcTemplate.update("delete from mdm_qinzhe_fgb");
|
}
|
|
/**
|
* 将从勤哲查询到的数据插入本地临时表
|
* @param fgbList
|
*/
|
private void insertToLocalTable(List<QinzheZzFgb> fgbList) {
|
String insSql = "insert into mdm_qinzhe_fgb (cph,ljh,ljmc,zz,zzgd,zggy,fg,cjjhy,jhy,source,update_time) values (?,?,?,?,?,?,?,?,?,'QZ',CURRENT_TIMESTAMP)";
|
|
QinzheZzFgb fgb;
|
List<Object[]> args = new ArrayList<>();
|
int insertedAmount = 0;//已插入数据的数量
|
while(insertedAmount < fgbList.size()) {
|
int added = 0;
|
for(int i=insertedAmount;added<BATCH_SIZE && i<fgbList.size();i++){
|
fgb = fgbList.get(i);
|
args.add(new String[]{fgb.getCph(),fgb.getLjh(),fgb.getLjmc(),fgb.getZz(),fgb.getZzgd(),fgb.getZggy(),fgb.getFg(),fgb.getCjjhy(),fgb.getJhy()});
|
|
added ++;
|
}
|
|
mdmJdbcTemplate.batchUpdate(insSql, args);
|
args.clear();
|
insertedAmount += added;
|
}
|
}
|
|
/**
|
* 根据配置获取勤哲查询sql(参数管理里可配置)
|
* @return
|
*/
|
String getQuerySql(){
|
String querySql = DEFAULT_QUERY_SQL;
|
R<String> sqlResult = sysClient.getParamValue(QINZHE_QUERY_KEY);
|
if(sqlResult.isSuccess()){
|
querySql = sqlResult.getData();
|
}
|
return querySql;
|
}
|
}
|