Эх сурвалжийг харах

王耀栋--提交工作模块相关代码

wangyaodong 3 жил өмнө
parent
commit
49a845fb47

+ 54 - 0
simulation-resource-monitor/src/main/java/com/css/simulation/resource/monitor/controller/ProjectTaskCtrl.java

@@ -0,0 +1,54 @@
+package com.css.simulation.resource.monitor.controller;
+
+import api.common.pojo.common.ResponseBodyVO;
+import com.css.simulation.resource.monitor.scheduler.ProjectScheduler;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import java.util.List;
+
+@Controller
+@RequestMapping("/projectTask")
+public class ProjectTaskCtrl {
+
+    @Autowired
+    ProjectScheduler scheduler;
+
+    @RequestMapping("/init")
+    @ResponseBody
+    public ResponseBodyVO init(@RequestBody List<ProjectScheduler.ProjectTask> task){
+        int count = scheduler.init(task);
+        return new ResponseBodyVO(ResponseBodyVO.Response.SUCCESS,count);
+    }
+
+
+    @RequestMapping("/start")
+    @ResponseBody
+    public ResponseBodyVO start(@RequestBody ProjectScheduler.ProjectTask task){
+        boolean b = scheduler.start(task);
+        if(b){
+            return new ResponseBodyVO(ResponseBodyVO.Response.SUCCESS);
+        }
+        return new ResponseBodyVO(ResponseBodyVO.Response.CLIENT_FAILURE);
+    }
+
+    @RequestMapping("/stop")
+    @ResponseBody
+    public ResponseBodyVO stop(@RequestBody ProjectScheduler.ProjectTask task){
+        boolean b = scheduler.stop(task);
+        if(b){
+            return new ResponseBodyVO(ResponseBodyVO.Response.SUCCESS);
+        }
+        return new ResponseBodyVO(ResponseBodyVO.Response.CLIENT_FAILURE);
+    }
+
+    @RequestMapping("/destroy")
+    @ResponseBody
+    public ResponseBodyVO destroy(){
+        scheduler.destroy();
+        return new ResponseBodyVO(ResponseBodyVO.Response.SUCCESS);
+    }
+}

+ 19 - 0
simulation-resource-monitor/src/main/java/com/css/simulation/resource/monitor/feign/ProjectService.java

@@ -0,0 +1,19 @@
+package com.css.simulation.resource.monitor.feign;
+
+import api.common.pojo.common.ResponseBodyVO;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.PostMapping;
+
+import java.util.Map;
+
+@FeignClient(contextId = "ProjectService",
+        value = "simulation-resource-server",
+        url = "http://127.0.0.1:7003",
+        path = "/simulation/resource/server",
+        fallback = ProjectServiceFallback.class)
+public interface ProjectService {
+
+    @PostMapping("/monitor/createAutomaticSubProject")
+    ResponseBodyVO runProject(Map<String,String> projectParam);
+
+}

+ 15 - 0
simulation-resource-monitor/src/main/java/com/css/simulation/resource/monitor/feign/ProjectServiceFallback.java

@@ -0,0 +1,15 @@
+package com.css.simulation.resource.monitor.feign;
+
+import api.common.pojo.common.ResponseBodyVO;
+import org.springframework.stereotype.Service;
+
+import java.util.Map;
+
+@Service
+public class ProjectServiceFallback implements ProjectService{
+
+    @Override
+    public ResponseBodyVO runProject(Map<String,String> projectParam) {
+        return new ResponseBodyVO<>(ResponseBodyVO.Response.SERVER_FAILURE);
+    }
+}

+ 173 - 0
simulation-resource-monitor/src/main/java/com/css/simulation/resource/monitor/scheduler/ProjectScheduler.java

@@ -0,0 +1,173 @@
+package com.css.simulation.resource.monitor.scheduler;
+
+import api.common.util.ObjectUtil;
+import com.css.simulation.resource.monitor.feign.ProjectService;
+import lombok.Data;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.Trigger;
+import org.springframework.scheduling.TriggerContext;
+import org.springframework.scheduling.annotation.SchedulingConfigurer;
+import org.springframework.scheduling.config.ScheduledTaskRegistrar;
+import org.springframework.scheduling.support.CronExpression;
+import org.springframework.scheduling.support.CronTrigger;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.PostConstruct;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ScheduledFuture;
+
+@Component
+@Slf4j
+public class ProjectScheduler implements SchedulingConfigurer {
+
+    @Autowired
+    ProjectService projectService;
+
+    static ProjectService staticProjectService;
+
+    private ScheduledTaskRegistrar taskRegistrar;
+    private final Map<String, ScheduledFuture> scheduledFutures = new HashMap<>();
+    private final Map<String, ProjectTask> projectTasks = new HashMap<>();
+
+    @PostConstruct
+    public void postConstruct() {
+        staticProjectService = this.projectService;
+    }
+
+    @Override
+    public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
+        this.taskRegistrar = taskRegistrar;
+    }
+
+    /**
+     * 初始化任务
+     */
+    public int init(List<ProjectTask> projectTask){
+        if(ObjectUtil.isNull(projectTask)){
+            return 0;
+        }
+        //停止旧任务
+        destroy();
+        int count = 0;
+        for (ProjectTask task : projectTask) {
+            if(start(task)){
+                count++;
+            }
+        };
+        //返回启动成功的任务数量
+        return count;
+    }
+
+    /**
+     * 开启任务
+     */
+    public boolean start(ProjectTask task){
+        if(!validate(task)){
+            return false;
+        };
+        String projectId = task.getProjectId();
+        String cron = task.getCron();
+        //任务已经存在,并且cron表达式没有变动,直接返回
+        if(scheduledFutures.containsKey(projectId)){
+            if(projectTasks.containsKey(projectId)){
+                ProjectTask projectTask = projectTasks.get(projectId);
+                if(projectTask.getCron().equals(cron)){
+                    return true;
+                }else{
+                    //有变动就停止
+                    scheduledFutures.get(projectId).cancel(false);
+                }
+            }else{
+                return false;
+            }
+        }
+        //开启新任务
+        ScheduledFuture<?> schedule = taskRegistrar.getScheduler().schedule(task, new Trigger() {
+            @Override
+            public Date nextExecutionTime(TriggerContext triggerContext) {
+                CronTrigger cronTrigger = new CronTrigger(cron);
+                Date date = cronTrigger.nextExecutionTime(triggerContext);
+                return date;
+            }
+        });
+        //放入缓存
+        projectTasks.put(projectId,task);
+        scheduledFutures.put(projectId,schedule);
+        return true;
+    }
+
+    /**
+     * 停止任务
+     */
+    public boolean stop(ProjectTask task){
+        if(ObjectUtil.isNull(task) || ObjectUtil.isNull(task.getProjectId())){
+            return false;
+        }
+        //任务已经存在,停止
+        String projectId = task.getProjectId();
+        if(scheduledFutures.containsKey(projectId)){
+            scheduledFutures.get(projectId).cancel(false);
+            //清除缓存
+            projectTasks.remove(projectId);
+            scheduledFutures.remove(projectId);
+            return true;
+        }
+        return false;
+    }
+
+    /**
+     * 清空所有任务
+     */
+    public void destroy(){
+        //停止现有任务
+        scheduledFutures.forEach((k,v)->{
+            //运行中不允许中断,完成后再停止
+            v.cancel(false);
+        });
+        //清空缓存
+        scheduledFutures.clear();
+        projectTasks.clear();
+    }
+
+    private boolean validate(ProjectTask task) {
+        if(ObjectUtil.isNull(task)){
+            return false;
+        }
+        if(ObjectUtil.isNull(task.getProjectId()) || ObjectUtil.isNull(task.getCron())){
+            return false;
+        }
+        //校验cron表达式
+        try {
+            CronExpression.parse(task.getCron());
+        }catch (Exception e){
+            return false;
+        }
+        return true;
+    }
+
+    /**
+     * 继承该类,重写run方法,即可自定义任务执行逻辑
+     */
+    @Data
+    public static class ProjectTask implements Runnable{
+
+        public ProjectTask() {}
+
+        private String projectId;
+
+        private String cron;
+
+        @Override
+        public void run() {
+            log.info("projectTask [" + projectId + "] run : " + new Date());
+            Map<String,String> projectParam = new HashMap<>();
+            projectParam.put("id",projectId);
+            ProjectScheduler.staticProjectService.runProject(projectParam);
+        }
+    }
+
+}

+ 30 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/feign/MonitorService.java

@@ -0,0 +1,30 @@
+package com.css.simulation.resource.feign;
+
+import api.common.pojo.common.ResponseBodyVO;
+import api.common.pojo.param.project.SimulationManualProjectParam;
+import com.css.simulation.resource.common.config.FeignConfiguration;
+import com.css.simulation.resource.feign.fallback.MonitorServiceFallback;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.PostMapping;
+
+import java.util.List;
+
+@FeignClient(name = "MonitorService",
+        url = "http://127.0.0.1:7004",
+        path = "/simulation/resource/monitor",
+        fallback = MonitorServiceFallback.class,
+        configuration = FeignConfiguration.class)
+public interface MonitorService {
+
+    @PostMapping("/projectTask/init")
+    ResponseBodyVO<Integer> init(List<SimulationManualProjectParam> list);
+
+    @PostMapping("/projectTask/start")
+    ResponseBodyVO start(SimulationManualProjectParam param);
+
+    @PostMapping("/projectTask/stop")
+    ResponseBodyVO stop(SimulationManualProjectParam param);
+
+
+
+}

+ 27 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/feign/fallback/MonitorServiceFallback.java

@@ -0,0 +1,27 @@
+package com.css.simulation.resource.feign.fallback;
+
+import api.common.pojo.common.ResponseBodyVO;
+import api.common.pojo.param.project.SimulationManualProjectParam;
+import api.common.pojo.po.project.SimulationManualProjectPo;
+import com.css.simulation.resource.feign.MonitorService;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public class MonitorServiceFallback implements MonitorService {
+    @Override
+    public ResponseBodyVO<Integer> init(List<SimulationManualProjectParam> list) {
+        return new ResponseBodyVO<>(ResponseBodyVO.Response.SERVER_FAILURE);
+    }
+
+    @Override
+    public ResponseBodyVO start(SimulationManualProjectParam po) {
+        return new ResponseBodyVO<>(ResponseBodyVO.Response.SERVER_FAILURE);
+    }
+
+    @Override
+    public ResponseBodyVO stop(SimulationManualProjectParam po) {
+        return new ResponseBodyVO<>(ResponseBodyVO.Response.SERVER_FAILURE);
+    }
+}

+ 45 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/open/ctrl/MonitorCtrl.java

@@ -0,0 +1,45 @@
+package com.css.simulation.resource.open.ctrl;
+
+import api.common.pojo.common.ResponseBodyVO;
+import api.common.pojo.param.project.SimulationManualProjectParam;
+import api.common.util.ObjectUtil;
+import com.css.simulation.resource.project.service.SimulationProjectService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import java.util.Calendar;
+import java.util.Map;
+
+@Controller
+@RequestMapping("/monitor")
+public class MonitorCtrl {
+
+    @Autowired
+    private SimulationProjectService service;
+
+    /**
+     * 运行自动任务
+     */
+    @RequestMapping("createAutomaticSubProject")
+    @ResponseBody
+    public ResponseBodyVO createAutomaticSubProject(@RequestBody Map<String,String> paramMap){
+
+        if(ObjectUtil.isNull(paramMap) || ObjectUtil.isNull(paramMap.get("id"))){
+            return new ResponseBodyVO(false, 500, "参数必传!",null);
+        }
+
+        SimulationManualProjectParam param = new SimulationManualProjectParam();
+        param.setId(paramMap.get("id"));
+
+        System.out.println("运行自动任务:"+ Calendar.getInstance().getTime()+"/"+paramMap.get("id"));
+
+        return new ResponseBodyVO(ResponseBodyVO.Response.SUCCESS);
+
+//        return service.createAutomaticSubProject(param);
+
+    }
+
+}

+ 80 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/project/test/GamePanel.java

@@ -0,0 +1,80 @@
+package com.css.simulation.resource.project.test;
+
+import javax.swing.*;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.KeyEvent;
+import java.awt.event.KeyListener;
+import java.util.Random;
+
+public class GamePanel extends JPanel implements KeyListener, ActionListener {
+
+    int length;//蛇的默认长度
+
+    int[] snakeX = new int[600];
+
+    int[] snakeY = new int[500];
+
+    String fx;
+
+    //是否开始
+    boolean isStart = false;
+
+    Timer timer = new Timer(100,this);
+
+    //食物坐标
+    int foodX;
+
+    int foodY;
+
+    Random random = new Random();
+
+    //是否失败
+    boolean isFail =false;
+
+    int score;
+
+    Random random_food = new Random();
+
+    int food;
+
+    //构造器
+    public GamePanel(){
+        init();
+        this.setFocusable(true);
+        this.addKeyListener(this);
+    }
+
+    public void init(){
+
+        snakeX[0] = 100;
+        snakeY[0] = 100;
+
+
+
+
+    }
+
+
+
+
+    @Override
+    public void actionPerformed(ActionEvent e) {
+
+    }
+
+    @Override
+    public void keyTyped(KeyEvent e) {
+
+    }
+
+    @Override
+    public void keyPressed(KeyEvent e) {
+
+    }
+
+    @Override
+    public void keyReleased(KeyEvent e) {
+
+    }
+}

+ 23 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/project/test/MainTest.java

@@ -0,0 +1,23 @@
+package com.css.simulation.resource.project.test;
+
+public class MainTest {
+    public static void main(String[] args) {
+        int[] a = new int[]{1,1,2};
+        int i = removeDuplicates(a);
+        System.out.println(i);
+
+    }
+
+    public static int removeDuplicates(int[] nums) {
+        int m = 0;
+        for(int i = 0;i< nums.length;i++){
+            if(nums[i] != nums[m]){
+                nums[++m] = nums[i];
+            }
+        }
+        return ++m;
+
+    }
+
+
+}

+ 10 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/project/test/TestDate.java

@@ -0,0 +1,10 @@
+package com.css.simulation.resource.project.test;
+
+import javax.swing.*;
+import java.util.Objects;
+
+public class TestDate {
+
+    public static ImageIcon header = new ImageIcon(Objects.requireNonNull(TestDate.class.getResource("E:\\icon\\1.bmp")));
+    public static ImageIcon body = new ImageIcon(Objects.requireNonNull(TestDate.class.getResource("E:\\icon\\2.bmp")));
+}

+ 46 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/project/test/TestImage.java

@@ -0,0 +1,46 @@
+package com.css.simulation.resource.project.test;
+
+import javax.swing.*;
+import java.awt.*;
+
+public class TestImage extends JFrame {
+
+    public static void main(String[] args) {
+
+        //创建窗口
+        JFrame jFrame = new JFrame();
+
+        //设置窗体标题
+        jFrame.setTitle("test");
+
+        //窗体是否可见
+        jFrame.setVisible(true);
+
+        //窗体关闭方式(点击关闭按钮)
+        jFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
+
+        //窗体大小
+/*        Dimension dimension = new Dimension();
+        dimension.setSize(50,50);
+        jFrame.setSize(dimension);*/
+
+        //设置窗体左上角的坐标
+/*        jFrame.setLocation(45,89);*/
+
+        //设置窗体坐标和大小
+        jFrame.setBounds(45,89,500,500);
+
+        //获取窗体容器
+/*        Container contentPane = jFrame.getContentPane();
+
+        //设置窗体背景颜色
+        contentPane.setBackground(Color.white);*/
+
+
+
+
+
+
+    }
+
+}