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 fgbList = this.qinzheJdbcTemplate.query(this.getQuerySql(),new RowMapper(){ @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 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 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 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 args = new ArrayList<>(); int insertedAmount = 0;//已插入数据的数量 while(insertedAmount < fgbList.size()) { int added = 0; for(int i=insertedAmount;added sqlResult = sysClient.getParamValue(QINZHE_QUERY_KEY); if(sqlResult.isSuccess()){ querySql = sqlResult.getData(); } return querySql; } }