yangys
2025-08-18 8ffacfb6664009006fe5c6ade939f73c211c3648
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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
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;
    }
}