@Component
public class SyncAreaCode extends Thread {
@Resource
private DeviceProjectMapper deviceProjectMapper;
@Resource
private RegionAreaMapper regionAreaMapper;
public List<Object> main(boolean save, boolean fullSave) {
long start = System.currentTimeMillis();
QueryWrapper<DeviceProjectEntity> queryWrapper = new QueryWrapper<>();
List<DeviceProjectEntity> list = deviceProjectMapper.selectList(queryWrapper);
//定义线程数量为20,可根据服务器配置适当调整大小
List<Object> res = Thread(list, 20, save, fullSave);
long end = System.currentTimeMillis();
System.out.println("总时间 = " + (end - start));
res.add("总时间 = " + (end - start));
return res;
}
public synchronized List<Object> Thread(List<DeviceProjectEntity> list, int nThread, boolean save, boolean fullSave) {
if (CollectionUtils.isEmpty(list) || nThread <= 0 || CollectionUtils.isEmpty(list)) {
return null;
}
List<Object> res = new ArrayList<>();
AtomicInteger count = new AtomicInteger();
Semaphore semaphore = new Semaphore(nThread);//定义几个许可
ExecutorService executorService = Executors.newFixedThreadPool(nThread);//创建一个固定的线程池
for (DeviceProjectEntity entity : list) {
try {
semaphore.acquire();
executorService.execute(() -> {
//此处可以放入待处理的业务
System.out.println("entity:" + entity);
String handleDeviceName = "";
String str = "";
String deviceName = entity.getDeviceName();
if (deviceName.contains("村")) {
str = "村";
}
if (deviceName.contains("镇")) {
str = "镇";
}
if (deviceName.contains("村") && deviceName.contains("镇")) {
str = "村";
}
//截取某个字符str 在 String(terminalEbrName) 中出现的第几次(num) 位置 return start
Pattern pattern = Pattern.compile(String.valueOf(str));
Matcher findMatcher = pattern.matcher(deviceName);
int indexNum = 0;
while (findMatcher.find()) {
indexNum++;
if (indexNum == 1) {
int start = findMatcher.start();
handleDeviceName = deviceName.substring(0, start + 1).trim();
break;
}
}
if (handleDeviceName.contains("村") && handleDeviceName.contains("镇")) {
str = "镇";
//截取某个字符str 在 String(terminalEbrName) 中出现的第几次(num) 位置 return start
Pattern pattern1 = Pattern.compile(String.valueOf(str));
Matcher findMatcher1 = pattern1.matcher(handleDeviceName);
int indexNum1 = 0;
while (findMatcher1.find()) {
indexNum1++;
if (indexNum1 == 1) {
int start = findMatcher1.start();
handleDeviceName = deviceName.substring(start + 1, handleDeviceName.length()).trim();
break;
}
}
}
QueryWrapper<RegionAreaEntity> queryRegionName = new QueryWrapper<>();
queryRegionName.lambda().eq(RegionAreaEntity::getAreaName, handleDeviceName);
RegionAreaEntity regionAreaEntity = regionAreaMapper.selectOne(queryRegionName);
HashMap<Object, Object> map = new HashMap<>();
if (ObjectUtil.isNotEmpty(regionAreaEntity)) {
String regionAreaCode = regionAreaEntity.getAreaCode();
if (save) {
if (fullSave) {
entity.setAreaCode(regionAreaCode);
deviceProjectMapper.updateById(entity);
} else if (StringUtil.isEmtpy(entity.getAreaCode())) {
entity.setAreaCode(regionAreaCode);
deviceProjectMapper.updateById(entity);
}
}
map.put(handleDeviceName, regionAreaCode);
count.addAndGet(1);
} else {
map.put(handleDeviceName, "");
}
res.add(map);
res.add("匹配数:" + count);
res.add("总数:" + list.size());
semaphore.release();
});
} catch (InterruptedException e) {
}
}
executorService.shutdown();
return res;
}
}
截取某个字符str 在 String 中出现的第几次(num) 位置 return start
最新推荐文章于 2023-08-20 00:11:27 发布