huang
22 小时以前 04914a9997afbbead6f8adbb9d9c40e05b2edbd1
mes-processes/mes-plcSend/src/main/java/com/mes/device/service/impl/EngineeringSequenceServiceImpl.java
@@ -34,36 +34,61 @@
    private static final int RETRY_INTERVAL_MAX = 200;
    @Override
    @Transactional(rollbackFor = Exception.class)
    public String generateAndSaveEngineeringId(Date date) {
        try {
            Integer maxSequence = baseMapper.selectMaxSequenceByDate(date);
            maxSequence = (maxSequence == null) ? 0 : maxSequence;
            int newSequence = maxSequence + 1;
    public String generateEngineeringId(Date date) {
        Integer maxSequence = baseMapper.selectMaxSequenceByDate(date);
        maxSequence = (maxSequence == null) ? 0 : maxSequence;
        int newSequence = maxSequence + 1;
        LocalDate localDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
        String dateStr = DATE_FORMATTER_THREAD_LOCAL.get().format(localDate);
        String engineeringId = "P" + dateStr + String.format("%02d", newSequence);
        log.info("生成工程号(未保存): engineeringId={}, date={}, sequence={}", engineeringId, date, newSequence);
        return engineeringId;
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public boolean saveEngineeringId(Date date, String engineeringId) {
        try {
            // 解析工程号获取序号
            LocalDate localDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
            String dateStr = DATE_FORMATTER_THREAD_LOCAL.get().format(localDate);
            String engineeringId = "P" + dateStr + String.format("%02d", newSequence);
            String sequenceStr = engineeringId.substring(engineeringId.length() - 2);
            int sequence = Integer.parseInt(sequenceStr);
            EngineeringSequence engineeringSequence = new EngineeringSequence();
            engineeringSequence.setEngineeringId(engineeringId);
            engineeringSequence.setDate(date);
            engineeringSequence.setSequence(newSequence);
            engineeringSequence.setSequence(sequence);
            engineeringSequence.setCreatedTime(new Date());
            engineeringSequence.setUpdatedTime(new Date());
            engineeringSequence.setCreatedBy("system");
            engineeringSequence.setUpdatedBy("system");
            save(engineeringSequence);
            boolean result = save(engineeringSequence);
            log.info("生成工程号成功: engineeringId={}, date={}, sequence={}", engineeringId, date, newSequence);
            return engineeringId;
            if (result) {
                log.info("保存工程号成功: engineeringId={}, date={}, sequence={}", engineeringId, date, sequence);
            } else {
                log.error("保存工程号失败: engineeringId={}, date={}, sequence={}", engineeringId, date, sequence);
            }
            return result;
        } catch (DuplicateKeyException dup) {
            log.error("生成工程号唯一键冲突: date={}", date, dup);
            throw new RuntimeException("生成工程号失败", dup);
            log.error("保存工程号唯一键冲突: date={}, engineeringId={}", date, engineeringId, dup);
            throw new RuntimeException("保存工程号失败", dup);
        } catch (Exception e) {
            log.error("生成工程号失败, date={}", date, e);
            throw new RuntimeException("生成工程号失败", e);
            log.error("保存工程号失败, date={}, engineeringId={}", date, engineeringId, e);
            throw new RuntimeException("保存工程号失败", e);
        }
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public String generateAndSaveEngineeringId(Date date) {
        String engineeringId = generateEngineeringId(date);
        saveEngineeringId(date, engineeringId);
        return engineeringId;
    }
}