PreciseTableShardingAlgorithm.java 1.2 KB

12345678910111213141516171819202122232425262728293031323334
  1. package com.huojutech.sharding.algorithm;
  2. import java.sql.Timestamp;
  3. import java.util.ArrayList;
  4. import java.util.Calendar;
  5. import java.util.Collection;
  6. import java.util.Iterator;
  7. import java.util.List;
  8. import groovy.util.logging.Slf4j;
  9. import io.shardingsphere.core.api.algorithm.sharding.ListShardingValue;
  10. import io.shardingsphere.core.api.algorithm.sharding.PreciseShardingValue;
  11. import io.shardingsphere.core.api.algorithm.sharding.ShardingValue;
  12. import io.shardingsphere.core.api.algorithm.sharding.standard.PreciseShardingAlgorithm;
  13. @Slf4j
  14. public class PreciseTableShardingAlgorithm implements PreciseShardingAlgorithm<String> {
  15. @Override
  16. public String doSharding(Collection<String> availableTargetNames, PreciseShardingValue<String> shardingValue) {
  17. long code = Long.parseLong((shardingValue.getValue()).substring(16, 20));
  18. long year = Long.parseLong((shardingValue.getValue()).substring(0, 4));
  19. String suffix = year + "_" + (code&0x001);
  20. for (String tableName : availableTargetNames) {
  21. if (tableName.endsWith(suffix)) {
  22. return tableName;
  23. }
  24. }
  25. return null;
  26. }
  27. }