yangys
2025-07-31 53015845597b3e834f30a5c930aea7376db78bd7
blade-service/blade-qinzhesync/src/main/java/org/springblade/qinzhesync/service/QinzheSyncService.java
@@ -1,11 +1,22 @@
package org.springblade.qinzhesync.service;
import lombok.extern.slf4j.Slf4j;
import org.springblade.core.tool.api.R;
import org.springblade.system.feign.ISysClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
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 java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
@@ -18,14 +29,115 @@
   @Autowired
   private  JdbcTemplate mdmJdbcTemplate;
   @Qualifier("qingzheJdbcTemplate")
   @Qualifier("qinzheJdbcTemplate")
   @Autowired
   private JdbcTemplate qingzheJdbcTemplate;
   private JdbcTemplate qinzheJdbcTemplate;
   @Autowired
   private ISysClient sysClient;
   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;
   public void syncData(){
      /*
      Map mmdData = mdmJdbcTemplate.queryForMap("select count(*) n from mdm_machine");
      log.info("mdm:{}",mmdData);
      Map qinzheData = qingzheJdbcTemplate.queryForMap("select count(*) n from mdm_machine");
      Map qinzheData = qinzheJdbcTemplate.queryForMap("select count(*) n from mdm_machine");
      log.info("qingzhe:{}",qinzheData);
      */
      cleanLocalTable();
      saveQinzheFgbToLocalTable();
      updateProduceDivision();
   }
   /**
    * //qingzhe  - mdm
    *    主管工艺 - 专业组长
    *    编制,校对,高师(目前高师总共6个人)也都没有.目前只匹配专业组长即可,编制校对在mdm中维护
    * 更新mdm主制分工表数据,
    */
   void updateProduceDivision(){
      mdmJdbcTemplate.update("delete from mdm_produce_division where create_user=-1 and update_user=-1");
   }
   /**
    * 清除mdm分工表内所有从勤哲导入的数据
    */
   void cleanQinzheDataInDivision(){
   }
   /**
    * 将勤哲系统的数据先一次性导入mdm系统数据库临时表
    */
   public void saveQinzheFgbToLocalTable(){
      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);
   }
   /**
    * 清除本地临时表数据
    */
   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;
   }
}