yangys
2025-09-19 9a5abe507d6602f2311ffbe1d7bf25e2b58d3a7a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
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;
    }
}