package com.ruoyi; import com.alibaba.fastjson2.JSONObject; import com.ruoyi.common.config.RuoYiConfig; import com.ruoyi.common.core.redis.RedisCache; import com.ruoyi.common.utils.spring.SpringUtils; import com.ruoyi.task.CameraAssembleUtil; import com.ruoyi.task.DataAssembleUtil; import com.ruoyi.utils.FtpUtils; import java.text.SimpleDateFormat; import java.util.Date; public class DataTransmissionThread extends Thread { private static RedisCache redisCache;//缓存 static { redisCache= SpringUtils.getBean(RedisCache.class); } public static SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); public DataTransmissionThread(String name) { // 设置当前线程的名字 this.setName(name); } @Override public void run() { FtpUtils ftpUtil = new FtpUtils(RuoYiConfig.getFtpHost(),RuoYiConfig.getFtpUserName(),RuoYiConfig.getFtpPassWord()); while (true){ Date date=new Date(); String nowTime=format.format(date); //System.out.println("当前运行的线程名为: " + Thread.currentThread().getName()+nowTime); try{ long listOrder=redisCache.lGetListSize(Thread.currentThread().getName()); //缓存当前线程最新一次处理的情况 - 用于运维监控 JSONObject runObj=new JSONObject(); runObj.put("date",nowTime); runObj.put("pendingCount",listOrder); runObj.put("time",date.getTime()); redisCache.setCacheObject(Thread.currentThread().getName()+"::Run",runObj); if(listOrder>0){ //获取队列中的第一个(防止发送频繁,一次只处理一个) JSONObject obj= (JSONObject) redisCache.lGetLpopIndex(Thread.currentThread().getName()); if(Thread.currentThread().getName().equals("DataAssemble")){ DataAssembleUtil.DataTransmission(ftpUtil,obj); }else if(Thread.currentThread().getName().equals("CameraAssemble")){ CameraAssembleUtil.DataTransmission(obj); } }else{ Thread.sleep(1000); } }catch (Exception e){ System.err.println(e); } } } }