package org.springblade.qinzhesync.service;
|
|
import lombok.extern.slf4j.Slf4j;
|
import org.springblade.core.tool.api.R;
|
import org.springblade.qinzhesync.entity.ProduceDivision;
|
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.cloud.commons.util.IdUtils;
|
import org.springframework.dao.DataAccessException;
|
import org.springframework.jdbc.core.BatchPreparedStatementSetter;
|
import org.springframework.jdbc.core.JdbcTemplate;
|
import org.springframework.jdbc.core.ResultSetExtractor;
|
import org.springframework.jdbc.core.RowMapper;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import java.sql.PreparedStatement;
|
import java.sql.ResultSet;
|
import java.sql.SQLException;
|
import java.util.ArrayList;
|
import java.util.List;
|
import java.util.Map;
|
|
/**
|
* 勤哲主制分工表数据同步的服务
|
*/
|
@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 = 4;//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分工表
|
* @param drawingNo
|
* @return 存在与否
|
*/
|
public boolean drawingNoExists(String drawingNo){
|
Long cnt = mdmJdbcTemplate.queryForObject("select count(*) from mdm_produce_division where drawing_no=?",Long.class,drawingNo);
|
return cnt > 0;
|
}
|
/**
|
* 清除mdm分工表内从勤哲导入的、且未经过修改的数据
|
*/
|
void cleanQinzheDataInDivision(){
|
//update_user =-1 此标志为勤哲同步数据且未修改过。
|
mdmJdbcTemplate.update("delete from mdm_produce_division where create_user=-1 and update_user=-1");
|
}
|
/**
|
* 将勤哲系统的数据先一次性导入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);
|
}
|
/**
|
* //qingzhe - mdm
|
* 主管工艺 - 专业组长
|
* 编制,校对,高师(目前高师总共6个人)也都没有.目前只匹配专业组长即可,编制校对在mdm中维护
|
* 更新mdm主制分工表数据,
|
*/
|
void updateProduceDivision(List<QinzheZzFgb> fgbList){
|
String sql = "insert into mdm_produce_division (id,drawing_no,team_leader_id,create_user,update_user,create_time,update_time,status,is_deleted) values (?,?,?,-1,-1,CURRENT_TIMESTAMP,CURRENT_TIMESTAMP,1,0)";
|
String ljh,zggy;
|
for(QinzheZzFgb fgb : fgbList){
|
if(drawingNoExists(fgb.getLjh())){
|
//图号已存在,说明mdm系统中已经录入过了
|
continue;
|
}
|
|
Long zuzhangId = getUserIdByName(fgb.getZggy());
|
|
mdmJdbcTemplate.update(sql, new Object[]{idGen.nextId(),fgb.getLjh(),zuzhangId});
|
|
}
|
|
}
|
|
void insertProduceDivision(String drawingNo,Long zuzhangId){
|
String sql = "insert into mdm_produce_division () values ";
|
}
|
|
Long getUserIdByName(String zuzhangName){
|
String sql = "select id from blade_user where name=? and is_deleted=0 order by update_time limit 1";
|
List<Long> idList = this.mdmJdbcTemplate.queryForList(sql,Long.class,zuzhangName);
|
if(idList.isEmpty()){
|
return null;
|
}else{
|
return idList.get(0);
|
}
|
}
|
/**
|
* 清除本地临时表数据
|
*/
|
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,update_time) values (?,?,?,?,?,?,?,?,?,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;
|
}
|
}
|
|
String getQuerySql(){
|
String querySql = DEFAULT_QUERY_SQL;
|
R<String> sqlResult = sysClient.getParamValue(QINZHE_QUERY_KEY);
|
if(sqlResult.isSuccess()){
|
querySql = sqlResult.getData();
|
}
|
return querySql;
|
}
|
}
|