|  | @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 | 
	
		
			
				|  |  |  import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 | 
	
		
			
				|  |  |  import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 | 
	
		
			
				|  |  |  import com.github.sd4324530.jtuple.Tuple3;
 | 
	
		
			
				|  |  | +import com.google.common.util.concurrent.ThreadFactoryBuilder;
 | 
	
		
			
				|  |  |  import com.zanxiang.erp.base.ErpServer;
 | 
	
		
			
				|  |  |  import com.zanxiang.erp.base.pojo.vo.SysIpv4RpcVO;
 | 
	
		
			
				|  |  |  import com.zanxiang.erp.base.rpc.ISysIpv4Rpc;
 | 
	
	
		
			
				|  | @@ -25,6 +26,9 @@ import org.springframework.stereotype.Service;
 | 
	
		
			
				|  |  |  import java.time.LocalDateTime;
 | 
	
		
			
				|  |  |  import java.util.List;
 | 
	
		
			
				|  |  |  import java.util.Objects;
 | 
	
		
			
				|  |  | +import java.util.concurrent.LinkedBlockingQueue;
 | 
	
		
			
				|  |  | +import java.util.concurrent.ThreadPoolExecutor;
 | 
	
		
			
				|  |  | +import java.util.concurrent.TimeUnit;
 | 
	
		
			
				|  |  |  import java.util.stream.Collectors;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  /**
 | 
	
	
		
			
				|  | @@ -48,6 +52,15 @@ public class IpDataAssayServiceImpl implements IIpDataAssayService {
 | 
	
		
			
				|  |  |      @Autowired
 | 
	
		
			
				|  |  |      private IUserLoginLogService userLoginLogService;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    private static final ThreadPoolExecutor THREAD_POOL_IP_DATA_ASSAY = new ThreadPoolExecutor(
 | 
	
		
			
				|  |  | +            10,
 | 
	
		
			
				|  |  | +            10,
 | 
	
		
			
				|  |  | +            0,
 | 
	
		
			
				|  |  | +            TimeUnit.MINUTES,
 | 
	
		
			
				|  |  | +            new LinkedBlockingQueue<>(),
 | 
	
		
			
				|  |  | +            new ThreadFactoryBuilder()
 | 
	
		
			
				|  |  | +                    .setNameFormat("sync-ipDataAssay-%d").build());
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      @Override
 | 
	
		
			
				|  |  |      public void userHandle(long supperGameId) {
 | 
	
		
			
				|  |  |          long page = 1L;
 | 
	
	
		
			
				|  | @@ -68,23 +81,27 @@ public class IpDataAssayServiceImpl implements IIpDataAssayService {
 | 
	
		
			
				|  |  |                      .orderByDesc(User::getCreateTime));
 | 
	
		
			
				|  |  |              totalPage = pageUser.getPages();
 | 
	
		
			
				|  |  |              List<User> userList = pageUser.getRecords();
 | 
	
		
			
				|  |  | -            log.error("当前执行页, page : {}, total : {}, size : {}", page, totalPage, userList.size());
 | 
	
		
			
				|  |  | -            userList.forEach(user -> {
 | 
	
		
			
				|  |  | -                if (Strings.isNotBlank(user.getIpData())) {
 | 
	
		
			
				|  |  | -                    return;
 | 
	
		
			
				|  |  | -                }
 | 
	
		
			
				|  |  | -                String ipData = this.ipAssay(user.getIp());
 | 
	
		
			
				|  |  | -                if (Strings.isBlank(ipData)) {
 | 
	
		
			
				|  |  | -                    log.error("IP解析结果返回为空, ip : {}", user.getIp());
 | 
	
		
			
				|  |  | -                    return;
 | 
	
		
			
				|  |  | -                }
 | 
	
		
			
				|  |  | -                userService.update(new LambdaUpdateWrapper<User>()
 | 
	
		
			
				|  |  | -                        .set(User::getIpData, ipData)
 | 
	
		
			
				|  |  | -                        .eq(User::getId, user.getId()));
 | 
	
		
			
				|  |  | -            });
 | 
	
		
			
				|  |  | +            log.error("用户执行页, page : {}, totalPage : {}, size : {}", page, totalPage, userList.size());
 | 
	
		
			
				|  |  | +            this.pageUserHandle(userList);
 | 
	
		
			
				|  |  |          } while (++page <= totalPage);
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    private void pageUserHandle(List<User> userList) {
 | 
	
		
			
				|  |  | +        THREAD_POOL_IP_DATA_ASSAY.execute(() -> userList.forEach(user -> {
 | 
	
		
			
				|  |  | +            if (Strings.isNotBlank(user.getIpData())) {
 | 
	
		
			
				|  |  | +                return;
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            String ipData = this.ipAssay(user.getIp());
 | 
	
		
			
				|  |  | +            if (Strings.isBlank(ipData)) {
 | 
	
		
			
				|  |  | +                log.error("用户IP解析结果返回为空, ip : {}", user.getIp());
 | 
	
		
			
				|  |  | +                return;
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            userService.update(new LambdaUpdateWrapper<User>()
 | 
	
		
			
				|  |  | +                    .set(User::getIpData, ipData)
 | 
	
		
			
				|  |  | +                    .eq(User::getId, user.getId()));
 | 
	
		
			
				|  |  | +        }));
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      @Override
 | 
	
		
			
				|  |  |      public void userLoginLogHandle() {
 | 
	
		
			
				|  |  |          long page = 1L;
 | 
	
	
		
			
				|  | @@ -98,21 +115,27 @@ public class IpDataAssayServiceImpl implements IIpDataAssayService {
 | 
	
		
			
				|  |  |                              .orderByDesc(UserLoginLog::getCreateTime));
 | 
	
		
			
				|  |  |              totalPage = pageUserLoginLog.getPages();
 | 
	
		
			
				|  |  |              List<UserLoginLog> userLoginLogList = pageUserLoginLog.getRecords();
 | 
	
		
			
				|  |  | -            userLoginLogList.forEach(userLoginLog -> {
 | 
	
		
			
				|  |  | -                if (Strings.isNotBlank(userLoginLog.getIpData())) {
 | 
	
		
			
				|  |  | -                    return;
 | 
	
		
			
				|  |  | -                }
 | 
	
		
			
				|  |  | -                String ipData = this.ipAssay(userLoginLog.getIp());
 | 
	
		
			
				|  |  | -                if (Strings.isBlank(ipData)) {
 | 
	
		
			
				|  |  | -                    return;
 | 
	
		
			
				|  |  | -                }
 | 
	
		
			
				|  |  | -                userLoginLogService.update(new LambdaUpdateWrapper<UserLoginLog>()
 | 
	
		
			
				|  |  | -                        .set(UserLoginLog::getIpData, ipData)
 | 
	
		
			
				|  |  | -                        .eq(UserLoginLog::getId, userLoginLog.getId()));
 | 
	
		
			
				|  |  | -            });
 | 
	
		
			
				|  |  | +            log.error("登录日志执行页, page : {}, totalPage : {}, size : {}", page, totalPage, userLoginLogList.size());
 | 
	
		
			
				|  |  | +            this.pageUserLoginLogHandle(userLoginLogList);
 | 
	
		
			
				|  |  |          } while (++page <= totalPage);
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    private void pageUserLoginLogHandle(List<UserLoginLog> userLoginLogList) {
 | 
	
		
			
				|  |  | +        THREAD_POOL_IP_DATA_ASSAY.execute(() -> userLoginLogList.forEach(userLoginLog -> {
 | 
	
		
			
				|  |  | +            if (Strings.isNotBlank(userLoginLog.getIpData())) {
 | 
	
		
			
				|  |  | +                return;
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            String ipData = this.ipAssay(userLoginLog.getIp());
 | 
	
		
			
				|  |  | +            if (Strings.isBlank(ipData)) {
 | 
	
		
			
				|  |  | +                log.error("登录日志IP解析结果返回为空, ip : {}", userLoginLog.getIp());
 | 
	
		
			
				|  |  | +                return;
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            userLoginLogService.update(new LambdaUpdateWrapper<UserLoginLog>()
 | 
	
		
			
				|  |  | +                    .set(UserLoginLog::getIpData, ipData)
 | 
	
		
			
				|  |  | +                    .eq(UserLoginLog::getId, userLoginLog.getId()));
 | 
	
		
			
				|  |  | +        }));
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      @Override
 | 
	
		
			
				|  |  |      public void ipDataHandle(List<String> msgList) {
 | 
	
		
			
				|  |  |          msgList.forEach(msg -> {
 |