| | |
| | | private static final int RETRY_INTERVAL_MAX = 200; |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public String generateAndSaveEngineeringId(Date date) { |
| | | try { |
| | | public String generateEngineeringId(Date date) { |
| | | Integer maxSequence = baseMapper.selectMaxSequenceByDate(date); |
| | | maxSequence = (maxSequence == null) ? 0 : maxSequence; |
| | | int newSequence = maxSequence + 1; |
| | |
| | | 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 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; |
| | | } catch (DuplicateKeyException dup) { |
| | | log.error("生成工程号唯一键冲突: date={}", date, dup); |
| | | throw new RuntimeException("生成工程号失败", dup); |
| | | } catch (Exception e) { |
| | | log.error("生成工程号失败, date={}", date, e); |
| | | throw new RuntimeException("生成工程号失败", e); |
| | | 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={}, engineeringId={}", date, engineeringId, dup); |
| | | throw new RuntimeException("保存工程号失败", dup); |
| | | } catch (Exception 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; |
| | | } |
| | | } |