Bladeren bron

Merge remote-tracking branch 'origin/master'

martin 3 jaren geleden
bovenliggende
commit
e45c823ff6
72 gewijzigde bestanden met toevoegingen van 2865 en 134 verwijderingen
  1. 1 0
      api-common/src/main/java/api/common/pojo/constants/DictConstants.java
  2. 32 0
      api-common/src/main/java/api/common/pojo/constants/LogConstants.java
  3. 27 0
      api-common/src/main/java/api/common/pojo/param/log/LogPageParam.java
  4. 18 0
      api-common/src/main/java/api/common/pojo/param/model/VehiclePageParam.java
  5. 9 0
      api-common/src/main/java/api/common/pojo/param/project/SimulationManualProjectParam.java
  6. 1 0
      api-common/src/main/java/api/common/pojo/po/log/LogLoginPO.java
  7. 24 0
      api-common/src/main/java/api/common/pojo/po/log/LogOperationPO.java
  8. 27 0
      api-common/src/main/java/api/common/pojo/po/log/LogSystemPO.java
  9. 70 0
      api-common/src/main/java/api/common/pojo/po/model/VehicleTempPO.java
  10. 1 0
      api-common/src/main/java/api/common/pojo/po/project/BasePo.java
  11. 48 0
      api-common/src/main/java/api/common/pojo/po/project/SimulationAutomaticSubProjectPo.java
  12. 16 0
      api-common/src/main/java/api/common/pojo/po/project/SimulationMptFirstTargetScorePo.java
  13. 1 0
      api-common/src/main/java/api/common/pojo/po/system/UserPO.java
  14. 2 0
      api-common/src/main/java/api/common/pojo/vo/model/VehicleTempVO.java
  15. 33 0
      api-common/src/main/java/api/common/pojo/vo/project/AutomaticProjectVo.java
  16. 3 0
      api-common/src/main/java/api/common/pojo/vo/project/ProjectDetailsVo.java
  17. 6 0
      api-common/src/main/java/api/common/pojo/vo/project/SimulationManualProjectSingleVo.java
  18. 23 0
      api-common/src/main/java/api/common/pojo/vo/project/SimulationManualProjectVo.java
  19. 3 0
      api-common/src/main/java/api/common/pojo/vo/project/SublistScoreVo.java
  20. 5 0
      api-common/src/main/java/api/common/pojo/vo/system/UserVO.java
  21. 31 0
      api-common/src/main/java/api/common/util/LogUtil.java
  22. 1 1
      simulation-oauth-client/src/main/java/com/css/simulation/oauth/client/controller/SignController.java
  23. 3 0
      simulation-resource-monitor/src/main/java/com/css/simulation/resource/monitor/SimulationResourceMonitorApplication.java
  24. 54 0
      simulation-resource-monitor/src/main/java/com/css/simulation/resource/monitor/controller/ProjectTaskCtrl.java
  25. 19 0
      simulation-resource-monitor/src/main/java/com/css/simulation/resource/monitor/feign/ProjectService.java
  26. 15 0
      simulation-resource-monitor/src/main/java/com/css/simulation/resource/monitor/feign/ProjectServiceFallback.java
  27. 1 1
      simulation-resource-monitor/src/main/java/com/css/simulation/resource/monitor/scheduler/MyScheduler.java
  28. 173 0
      simulation-resource-monitor/src/main/java/com/css/simulation/resource/monitor/scheduler/ProjectScheduler.java
  29. 121 0
      simulation-resource-monitor/src/main/resources/logback-spring.xml
  30. 2 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/Application.java
  31. 1 1
      simulation-resource-server/src/main/java/com/css/simulation/resource/algorithm/serviceImpl/AlgorithmServiceImpl.java
  32. 1 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/common/config/OAuth2Config.java
  33. 122 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/common/log/LogAdvice.java
  34. 10 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/common/utils/AuthUtil.java
  35. 2 2
      simulation-resource-server/src/main/java/com/css/simulation/resource/feign/FileDownService.java
  36. 30 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/feign/MonitorService.java
  37. 3 2
      simulation-resource-server/src/main/java/com/css/simulation/resource/feign/RedisService.java
  38. 27 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/feign/fallback/MonitorServiceFallback.java
  39. 46 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/log/ctrl/LogCtrl.java
  40. 26 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/log/mapper/LogMapper.java
  41. 93 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/log/service/LogService.java
  42. 2 1
      simulation-resource-server/src/main/java/com/css/simulation/resource/model/ctrl/VehicleCtrl.java
  43. 60 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/model/ctrl/VehicleTempCtrl.java
  44. 14 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/model/mapper/VehicleTempMapper.java
  45. 5 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/model/service/VehicleService.java
  46. 41 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/model/service/VehicleTempService.java
  47. 45 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/open/ctrl/MonitorCtrl.java
  48. 7 1
      simulation-resource-server/src/main/java/com/css/simulation/resource/project/constants/ProjectConstants.java
  49. 79 7
      simulation-resource-server/src/main/java/com/css/simulation/resource/project/ctrl/SimulationProjectCtrl.java
  50. 626 78
      simulation-resource-server/src/main/java/com/css/simulation/resource/project/impl/SimulationProjectServiceImpl.java
  51. 12 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/project/mapper/SimulationAutomaticProjectMapper.java
  52. 33 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/project/mapper/SimulationAutomaticSubProjectMapper.java
  53. 2 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/project/mapper/SimulationMptFirstTargetScoreMapper.java
  54. 4 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/project/mapper/SimulationProjectMapper.java
  55. 3 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/project/mapper/SimulationProjectTaskMapper.java
  56. 17 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/project/service/SimulationProjectService.java
  57. 80 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/project/test/GamePanel.java
  58. 23 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/project/test/MainTest.java
  59. 10 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/project/test/TestDate.java
  60. 46 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/project/test/TestImage.java
  61. 23 1
      simulation-resource-server/src/main/java/com/css/simulation/resource/system/ctrl/UserCtrl.java
  62. 2 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/system/mapper/UserMapper.java
  63. 18 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/system/service/UserService.java
  64. 1 1
      simulation-resource-server/src/main/resources/logback-spring.xml
  65. 128 0
      simulation-resource-server/src/main/resources/mapper/log/LogMapper.xml
  66. 187 0
      simulation-resource-server/src/main/resources/mapper/model/VehicleTempMapper.xml
  67. 65 5
      simulation-resource-server/src/main/resources/mapper/project/SimulationAutomaticProjectMapper.xml
  68. 108 0
      simulation-resource-server/src/main/resources/mapper/project/SimulationAutomaticSubProjectMapper.xml
  69. 9 0
      simulation-resource-server/src/main/resources/mapper/project/SimulationMptFirstTargetScoreMapper.xml
  70. 30 5
      simulation-resource-server/src/main/resources/mapper/project/SimulationProjectMapper.xml
  71. 9 0
      simulation-resource-server/src/main/resources/mapper/project/SimulationProjectTaskMapper.xml
  72. 45 28
      simulation-resource-server/src/main/resources/mapper/system/UserMapper.xml

+ 1 - 0
api-common/src/main/java/api/common/pojo/constants/DictConstants.java

@@ -27,6 +27,7 @@ public class DictConstants {
     public static final String PROJECT_RUN_STATE = "projectRunState";//项目运行状态
     public static final String VALIDATION_STATUS = "validationStatus";//项目运行状态
     public static final String ROLE_CODE = "roleCode";//用户类型(角色编码)
+    public static final String USE_TYPE = "useType";//占用类型
 
     public static final String ALGORITHM_FILE = "algorithmFile";//算法文件上传type
 

+ 32 - 0
api-common/src/main/java/api/common/pojo/constants/LogConstants.java

@@ -0,0 +1,32 @@
+package api.common.pojo.constants;
+
+public class LogConstants {
+
+    //字典类型
+    public static final String MODULE_TYPE = "moduleType";//模块
+    public static final String OPERATION_TYPE = "operationType";//操作类型
+    public static final String SYS_LOG_TYPE = "sysLogType";//系统日志类型
+
+    //字典项
+    public static final String MODULE_VEHICLE = "1";//模块-车辆模型
+    public static final String MODULE_CAMERA = "2";//模块-传感器模型-摄像头
+    public static final String MODULE_OGT = "3";//模块-传感器模型-完美传感器
+    public static final String MODULE_LIDAR = "4";//模块-传感器模型-激光雷达
+    public static final String MODULE_GPS = "5";//模块-传感器模型-GPS
+    public static final String MODULE_CONFIG = "6";//模块-车辆配置
+    public static final String MODULE_ALGORITH = "7";//模块-算法库
+    public static final String MODULE_SCENE_TEST_PACKAGE = "8";//模块-场景库-场景测试包
+    public static final String MODULE_SCORING = "9";//模块-场景库-评分规则
+    public static final String MODULE_SCENE_NATURAL = "10";//模块-场景库-自然驾驶场景
+    public static final String MODULE_SCENE_STANDARDS = "11";//模块-场景库-标准法规场景
+    public static final String MODULE_SCENE_ACCIDENT = "12";//模块-场景库-交通事故场景
+
+
+    public static final String SYS_LOG_USER = "01";//用户管理
+    public static final String SYS_LOG_USER_INSERT = "0101";//用户管理-新增
+    public static final String SYS_LOG_USER_UPDATE = "0102";//用户管理-修改
+    public static final String SYS_LOG_USER_RESET = "0103";//用户管理-重置密码
+    public static final String SYS_LOG_USER_START = "0104";//用户管理-启用
+    public static final String SYS_LOG_USER_STOP = "0105";//用户管理-停用
+
+}

+ 27 - 0
api-common/src/main/java/api/common/pojo/param/log/LogPageParam.java

@@ -0,0 +1,27 @@
+package api.common.pojo.param.log;
+
+import api.common.pojo.common.PageVO;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import java.sql.Timestamp;
+
+@Data
+public class LogPageParam extends PageVO {
+
+    //账户id
+    private String id;
+    //账户名
+    private String username;
+    //模块
+    private String module;
+    //操作类型
+    private String operationType;
+    //操作内容
+    private String content;
+    //操作时间起
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
+    private Timestamp createTimeBegin;
+    //操作时间止
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
+    private Timestamp createTimeEnd;
+}

+ 18 - 0
api-common/src/main/java/api/common/pojo/param/model/VehiclePageParam.java

@@ -0,0 +1,18 @@
+package api.common.pojo.param.model;
+
+import api.common.pojo.common.PageVO;
+import lombok.Data;
+
+@Data
+public class VehiclePageParam extends PageVO {
+
+    //主键id
+    private String id;
+    //车辆编码
+    private String vehicleCode;
+    //车辆名称
+    private String vehicleName;
+    //模型标识
+    private String modelLabel;
+
+}

+ 9 - 0
api-common/src/main/java/api/common/pojo/param/project/SimulationManualProjectParam.java

@@ -22,6 +22,9 @@ public class SimulationManualProjectParam extends PageVO {
     //项目id
     private String projectId;
 
+    //周期表达式
+    private String cron;
+
     //项目名称
     private String projectName;
 
@@ -102,6 +105,9 @@ public class SimulationManualProjectParam extends PageVO {
     //算法类型
     private String algorithmType;
 
+    //算法来源1、文件上传,2、仓库地址
+    private String algorithmSource;
+
     //仿真结果地址
     private String runResultFilePath;
 
@@ -127,5 +133,8 @@ public class SimulationManualProjectParam extends PageVO {
     //父级项目id
     private String parentId;
 
+    //项目类型 1.手动;2.自动
+    private String projectType;
+
 
 }

+ 1 - 0
api-common/src/main/java/api/common/pojo/po/log/LogLoginPO.java

@@ -1,5 +1,6 @@
 package api.common.pojo.po.log;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
 
 import java.sql.Timestamp;

+ 24 - 0
api-common/src/main/java/api/common/pojo/po/log/LogOperationPO.java

@@ -0,0 +1,24 @@
+package api.common.pojo.po.log;
+
+import lombok.Data;
+
+import java.sql.Timestamp;
+
+@Data
+public class LogOperationPO {
+
+    //主键id
+    private String id;
+    //账户id
+    private String userId;
+    //账户名
+    private String username;
+    //操作IP
+    private String ip;
+    //模块
+    private String module;
+    //操作类型
+    private String operationType;
+    //创建时间
+    private Timestamp createTime;
+}

+ 27 - 0
api-common/src/main/java/api/common/pojo/po/log/LogSystemPO.java

@@ -0,0 +1,27 @@
+package api.common.pojo.po.log;
+
+import lombok.Data;
+
+import java.sql.Timestamp;
+
+@Data
+public class LogSystemPO {
+
+    //主键id
+    private String id;
+    //账户id
+    private String userId;
+    //账户名
+    private String username;
+    //账户类型
+    private String roleCode;
+    //模块
+    private String module;
+    //操作类型
+    private String operationType;
+    //操作内容
+    private String content;
+    //创建时间
+    private Timestamp createTime;
+
+}

+ 70 - 0
api-common/src/main/java/api/common/pojo/po/model/VehicleTempPO.java

@@ -0,0 +1,70 @@
+package api.common.pojo.po.model;
+
+
+import api.common.pojo.common.CommonPO;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class VehicleTempPO extends CommonPO {
+
+    //主键id
+    private String id;
+    //车辆编码
+    private String vehicleCode;
+    //车辆名称
+    private String vehicleName;
+    //车辆描述
+    private String description;
+    //模型标识
+    private String modelLabel;
+    //车辆类型(字典代码)
+    private String vehicleType;
+    //车辆型号
+    private String vehicleModel;
+    //车辆颜色
+    private String vehicleColour;
+    //车辆前视图
+    private String vehicleFrontView;
+    //车辆俯视图
+    private String vehicleTopView;
+    //最大速度(千米/小时)
+    private BigDecimal maxSpeed;
+    //发动机功率(千瓦)
+    private BigDecimal enginePower;
+    //最大减速度(米/秒2)
+    private BigDecimal maxDeceleration;
+    //最大转角(度)
+    private BigDecimal maxSteeringAngle;
+    //质量(千克)
+    private BigDecimal mass;
+    //前表面有效面积(平方米)
+    private BigDecimal frontSurfaceEffective;
+    //空气阻力系数
+    private BigDecimal airDragCoefficient;
+    //滚动阻力系数
+    private BigDecimal rollingResistanceCoefficient;
+    //车轮直径(米)
+    private BigDecimal wheelDiameter;
+    //驱动方式
+    private String wheelDrive;
+    //总效率
+    private BigDecimal overallEfficiency;
+    //车前距(米)
+    private BigDecimal frontDistance;
+    //车后距(米)
+    private BigDecimal rearDistance;
+    //车左距(米)
+    private BigDecimal leftDistance;
+    //车右距(米)
+    private BigDecimal rightDistance;
+    //车高(米)
+    private BigDecimal heightDistance;
+    //轴距(米)
+    private BigDecimal wheelbase;
+    //是否启用
+    private String valid;
+    //序号
+    private int sort;
+}

+ 1 - 0
api-common/src/main/java/api/common/pojo/po/project/BasePo.java

@@ -40,6 +40,7 @@ public class BasePo {
         modifyTime = nowForMysql;
         isDeleted = "0";
         createUserId = userId;
+        modifyUserId = userId;
     }
 
     public void updatePo(String userId){

+ 48 - 0
api-common/src/main/java/api/common/pojo/po/project/SimulationAutomaticSubProjectPo.java

@@ -0,0 +1,48 @@
+package api.common.pojo.po.project;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Date;
+
+/**
+ * 自动运行项目子表
+ */
+@Getter
+@Setter
+public class SimulationAutomaticSubProjectPo extends BasePo {
+
+    //主项目表id
+    private String parentId;
+
+    //主项目表项目id
+    private String parentProjectId;
+
+    //项目日期
+    private Integer projectDate;
+
+    //项目序号
+    private Integer projectNum;
+
+    //项目id
+    private String projectId;
+
+    //项目名称
+    private String projectName;
+
+    //当前运行状态
+    private String nowRunState;
+
+    //评测等级
+    private String evaluationLevel;
+
+    //开始时间
+    private Date startTime;
+
+    //完成时间
+    private Date finishTime;
+
+    //算法得分
+    private Double algorithmScore;
+
+}

+ 16 - 0
api-common/src/main/java/api/common/pojo/po/project/SimulationMptFirstTargetScorePo.java

@@ -19,4 +19,20 @@ public class SimulationMptFirstTargetScorePo extends BasePo {
     //得分
     private Double score;
 
+
+    //以下额外的,不在po中
+    //指标名称
+    private String sublistName;
+
+    //场景数量
+    private Integer sceneNum;
+
+    //测试权重
+    private String weight;
+
+    //指标id
+    private String sublistId;
+
+
+
 }

+ 1 - 0
api-common/src/main/java/api/common/pojo/po/system/UserPO.java

@@ -14,6 +14,7 @@ public class UserPO extends CommonPO {
     private String photo;           // 头像
     private String company;         // 所属公司
     private String roleCode;       // 账户角色类型
+    private String useType;       // 占用类型
     private String visible;         // 是否启用
     private String openid;          // 众工业平台的 openid
 }

+ 2 - 0
api-common/src/main/java/api/common/pojo/vo/model/VehicleTempVO.java

@@ -15,6 +15,8 @@ public class VehicleTempVO {
     private String vehicleName;
     //车辆描述
     private String description;
+    //模型标识
+    private String modelLabel;
     //车辆类型(字典代码)
     private String vehicleType;
     //车辆型号

+ 33 - 0
api-common/src/main/java/api/common/pojo/vo/project/AutomaticProjectVo.java

@@ -0,0 +1,33 @@
+package api.common.pojo.vo.project;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 自动运行项目信息
+ */
+@Getter
+@Setter
+public class AutomaticProjectVo {
+
+    //id
+    private String id;
+    //项目名称
+    private String projectName;
+    //项目描述
+    private String projectDescribe;
+    //算法名称
+    private String algorithmName;
+    //车辆
+    private String vehicle;
+    //传感器
+    private String sensor;
+    //场景包名称
+    private String sceneName;
+    //运行周期
+    private String operationCycle;
+    //并行度
+    private String parallelism;
+    //是否选择GPU
+    private String isChoiceGpu;
+}

+ 3 - 0
api-common/src/main/java/api/common/pojo/vo/project/ProjectDetailsVo.java

@@ -84,5 +84,8 @@ public class ProjectDetailsVo {
     //是否选择gpu
     private String isChoiceGpu;
 
+    //是否生成报告
+    private boolean createReport;
+
 
 }

+ 6 - 0
api-common/src/main/java/api/common/pojo/vo/project/SimulationManualProjectSingleVo.java

@@ -38,4 +38,10 @@ public class SimulationManualProjectSingleVo {
     //是否选择gpu(0:是,1:否)
     private String isChoiceGpu;
 
+    //运行周期
+    private String operationCycle;
+
+    //规则查看
+    private String ruleView;
+
 }

+ 23 - 0
api-common/src/main/java/api/common/pojo/vo/project/SimulationManualProjectVo.java

@@ -35,5 +35,28 @@ public class SimulationManualProjectVo {
 
     private Long maxSimulationTime;
 
+    private Date startTime;
+
+    private String startTimeFmt;
+
+    private Date finishTime;
+
+    private String finishTimeFmt;
+
+    private String scene;//场景测试包id
+
+    private String algorithmType;//算法类型
+
+    private String vehicle;//车俩配置id
+
+    private String projectDescribe; //项目描述
+
+    private String parallelism;
+
+    private String isChoiceGpu;
+
+
+
+
 
 }

+ 3 - 0
api-common/src/main/java/api/common/pojo/vo/project/SublistScoreVo.java

@@ -25,4 +25,7 @@ public class SublistScoreVo {
     private String returnSceneId;
     private String runResult;
 
+    private String firTarget;
+    private String lasTarget;
+
 }

+ 5 - 0
api-common/src/main/java/api/common/pojo/vo/system/UserVO.java

@@ -2,6 +2,8 @@ package api.common.pojo.vo.system;
 
 import lombok.Data;
 
+import java.sql.Timestamp;
+
 @Data
 public class UserVO {
 
@@ -13,7 +15,10 @@ public class UserVO {
     private String photo;           // 头像
     private String company;         // 所属公司
     private String roleCode;       // 账户角色类型
+    private String useType;       // 占用类型
     private String visible;         // 是否启用
+    public Timestamp createTime;    //创建时间
+    public String createUserName;    //创建人
     //private String openid;          // 众工业平台的 openid
 
 }

+ 31 - 0
api-common/src/main/java/api/common/util/LogUtil.java

@@ -0,0 +1,31 @@
+package api.common.util;
+
+public abstract class LogUtil {
+
+    protected static final ThreadLocal<String> OPERATION_TYPE = new ThreadLocal();
+
+    public static void insert(){
+        OPERATION_TYPE.set("1");
+    };
+
+    public static void update(){
+        OPERATION_TYPE.set("2");
+    };
+
+    public static void delete(){
+        OPERATION_TYPE.set("0");
+    };
+
+    public static String getOperationType(){
+        return OPERATION_TYPE.get();
+    };
+
+    public static void remove(){
+        OPERATION_TYPE.remove();
+    };
+
+    public static void share() {
+        OPERATION_TYPE.set("3");
+    }
+
+}

+ 1 - 1
simulation-oauth-client/src/main/java/com/css/simulation/oauth/client/controller/SignController.java

@@ -240,7 +240,7 @@ public class SignController {
         //登录逻辑判断
         if (userVO == null ) {
             return new ResponseBodyVO<>(ResponseBodyVO.Response.CLIENT_FAILURE, "用户名或密码错误!");
-        }else if("0".equals(userVO.getVisible())){
+        }else if(!"1".equals(userVO.getVisible())){
             return new ResponseBodyVO<>(ResponseBodyVO.Response.CLIENT_FAILURE, "账户已停用!");
         }else if(!userVO.getPassword().equals(password)) {
             //记录登录错误日志

+ 3 - 0
simulation-resource-monitor/src/main/java/com/css/simulation/resource/monitor/SimulationResourceMonitorApplication.java

@@ -3,14 +3,17 @@ package com.css.simulation.resource.monitor;
 
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.openfeign.EnableFeignClients;
 import org.springframework.scheduling.annotation.EnableScheduling;
 
 @SpringBootApplication
 @EnableScheduling
+@EnableFeignClients
 public class SimulationResourceMonitorApplication {
 
     public static void main(String[] args) {
         SpringApplication.run(SimulationResourceMonitorApplication.class, args);
+        System.out.println("-------------启动成功----------------");
     }
 
 }

+ 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);
+    }
+}

+ 1 - 1
simulation-resource-monitor/src/main/java/com/css/simulation/resource/monitor/scheduler/MyScheduler.java

@@ -35,7 +35,7 @@ public class MyScheduler {
 
 
     //    @Scheduled(fixedDelay = 60 * 60 * 1000)
-    @Scheduled(fixedDelay = 2 * 1000)
+    //@Scheduled(fixedDelay = 2 * 1000)
     public void server() throws IOException, InterruptedException, DocumentException {
         List<SystemServerPO> systemServerPOList = new ArrayList<>();
         for (Host host : hostList) {

+ 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);
+        }
+    }
+
+}

+ 121 - 0
simulation-resource-monitor/src/main/resources/logback-spring.xml

@@ -0,0 +1,121 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration>
+    <!-- 项目名称 -->
+    <springProperty scop="context" name="PROJECT_NAME" source="spring.application.name" defaultValue="" />
+    <!--定义不同环境的日志文件的存储地址 使用相对路径-->
+    <springProfile name="dev">
+        <property name="LOG_HOME" value="logs/${PROJECT_NAME}"/>
+    </springProfile>
+    <springProfile name="aliyun">
+        <property name="LOG_HOME" value="/opt/simulation-cloud/simulation-resource-server/log"/>
+    </springProfile>
+
+    <!--输出到控制台-->
+    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
+        <!--此日志appender是为开发使用,只配置最底级别,控制台输出的日志级别是大于或等于此级别的日志信息-->
+        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
+            <level>debug</level>
+        </filter>
+        <encoder>
+            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern>
+            <charset>utf-8</charset>
+        </encoder>
+    </appender>
+
+    <!--输出到debug-->
+    <appender name="debug" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+            <!--日志文件输出的文件名-->
+            <FileNamePattern>${LOG_HOME}/debug.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
+            <!--日志文件保留天数-->
+            <MaxHistory>15</MaxHistory>
+            <!--日志文件最大的大小-->
+            <MaxFileSize>10MB</MaxFileSize>
+        </rollingPolicy>
+        <append>true</append>
+        <encoder>
+            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern>
+            <charset>utf-8</charset>
+        </encoder>
+        <filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 只打印DEBUG日志 -->
+            <level>DEBUG</level>
+            <onMatch>ACCEPT</onMatch>
+            <onMismatch>DENY</onMismatch>
+        </filter>
+    </appender>
+
+    <!--输出到info-->
+    <appender name="info" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+            <!--日志文件输出的文件名-->
+            <FileNamePattern>${LOG_HOME}/info.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
+            <!--日志文件保留天数-->
+            <MaxHistory>15</MaxHistory>
+            <!--日志文件最大的大小-->
+            <MaxFileSize>10MB</MaxFileSize>
+        </rollingPolicy>
+        <append>true</append>
+        <encoder>
+            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern>
+            <charset>utf-8</charset>
+        </encoder>
+        <filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 只打印INFO日志 -->
+            <level>INFO</level>
+            <onMatch>ACCEPT</onMatch>
+            <onMismatch>DENY</onMismatch>
+        </filter>
+    </appender>
+
+    <!--输出到error-->
+    <appender name="error" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+            <!--日志文件输出的文件名-->
+            <FileNamePattern>${LOG_HOME}/error.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
+            <!--日志文件保留天数-->
+            <MaxHistory>15</MaxHistory>
+            <!--日志文件最大的大小-->
+            <MaxFileSize>10MB</MaxFileSize>
+        </rollingPolicy>
+        <append>true</append>
+        <encoder>
+            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern>
+            <charset>utf-8</charset>
+        </encoder>
+        <filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 只打印ERROR日志 -->
+            <level>ERROR</level>
+            <onMatch>ACCEPT</onMatch>
+            <onMismatch>DENY</onMismatch>
+        </filter>
+    </appender>
+
+    <!--输出到warn-->
+    <appender name="warn" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+            <!--日志文件输出的文件名-->
+            <FileNamePattern>${LOG_HOME}/warn.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
+            <!--日志文件保留天数-->
+            <MaxHistory>15</MaxHistory>
+            <!--日志文件最大的大小-->
+            <MaxFileSize>10MB</MaxFileSize>
+        </rollingPolicy>
+        <append>true</append>
+        <encoder>
+            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern>
+            <charset>utf-8</charset>
+        </encoder>
+        <filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 只打印WARN日志 -->
+            <level>WARN</level>
+            <onMatch>ACCEPT</onMatch>
+            <onMismatch>DENY</onMismatch>
+        </filter>
+    </appender>
+
+    <!--分别设置对应的日志输出节点 -->
+    <root level="info">
+        <appender-ref ref="console"/>
+        <appender-ref ref="debug"/>
+        <appender-ref ref="info"/>
+        <appender-ref ref="error"/>
+        <appender-ref ref="warn"/>
+    </root>
+</configuration>

+ 2 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/Application.java

@@ -3,6 +3,7 @@ package com.css.simulation.resource;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.cloud.openfeign.EnableFeignClients;
+import org.springframework.scheduling.annotation.EnableAsync;
 import org.springframework.security.oauth2.config.annotation.web.configuration.EnableResourceServer;
 import org.springframework.transaction.annotation.EnableTransactionManagement;
 
@@ -11,6 +12,7 @@ import org.springframework.transaction.annotation.EnableTransactionManagement;
 @EnableFeignClients
 @EnableResourceServer
 @EnableTransactionManagement
+@EnableAsync
 public class Application {
 
     public static void main(String[] args) {

+ 1 - 1
simulation-resource-server/src/main/java/com/css/simulation/resource/algorithm/serviceImpl/AlgorithmServiceImpl.java

@@ -49,7 +49,7 @@ public class AlgorithmServiceImpl implements AlgorithmService {
 
     @Autowired
     DictService dictService;
-    
+
     @Override
     public ResponseBodyVO addOrUpdate(AlgorithmParameter param) {
 

+ 1 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/common/config/OAuth2Config.java

@@ -47,6 +47,7 @@ public class OAuth2Config extends ResourceServerConfigurerAdapter {
                 .and()
                 .authorizeRequests()
                 .antMatchers("/**/report/**").access("#oauth2.hasScope('other')")//算法平台接口
+                .antMatchers("/**/monitor/createAutomaticSubProject").permitAll()//定时任务接口
                 .antMatchers("/druid/**").permitAll()
                 .anyRequest().access("#oauth2.hasScope('all')") // 拦截所有请求判断 scope
         ;

+ 122 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/common/log/LogAdvice.java

@@ -0,0 +1,122 @@
+package com.css.simulation.resource.common.log;
+
+import api.common.pojo.common.ResponseBodyVO;
+import api.common.pojo.po.log.LogOperationPO;
+import api.common.util.LogUtil;
+import api.common.util.ObjectUtil;
+import com.css.simulation.resource.common.utils.AuthUtil;
+import com.css.simulation.resource.log.service.LogService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.MethodParameter;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.MediaType;
+import org.springframework.http.server.ServerHttpRequest;
+import org.springframework.http.server.ServerHttpResponse;
+import org.springframework.web.bind.annotation.ControllerAdvice;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+
+@ControllerAdvice
+public class LogAdvice implements ResponseBodyAdvice {
+
+    @Autowired
+    LogService logService;
+
+    @Override
+    public boolean supports(MethodParameter methodParameter, Class aClass) {
+        return true;
+    }
+
+    @Override
+    public Object beforeBodyWrite(Object o, MethodParameter methodParameter, MediaType mediaType, Class aClass, ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse) {
+        //没有操作标记则返回
+        String operationType = LogUtil.getOperationType();
+        LogUtil.remove();//线程标记清空
+        if(ObjectUtil.isNull(operationType)){
+            return o;
+        }
+        //异常后返回
+        if(o instanceof ResponseBodyVO){
+            boolean status = ((ResponseBodyVO) o).isStatus();
+            if(!status){
+                return o;
+            }
+        }
+        //类注解的模块名
+        Class<?> containingClass = methodParameter.getContainingClass();
+        RequestMapping classAnnotation = containingClass.getAnnotation(RequestMapping.class);
+        if(ObjectUtil.isNull(classAnnotation)){
+            return o;
+        }
+        String modelName = classAnnotation.name();
+        if(ObjectUtil.isNull(modelName)){
+            modelName = "未命名模块";
+        }
+        try {
+            //获取ip
+            String ip = getRemoteAddress(serverHttpRequest);
+            LogOperationPO po = new LogOperationPO();
+            po.setIp(ip);
+            po.setModule(modelName);
+            po.setOperationType(operationType);
+            po.setUserId(AuthUtil.getCurrentUserId());
+            po.setUsername(AuthUtil.getCurrentUsername());
+            logService.saveOperationLog(po);
+        }catch (Exception e){
+            //e.printStackTrace();
+        }
+        return o;
+    }
+
+    //IP地址获取
+    private String getRemoteAddress(ServerHttpRequest serverHttpRequest) {
+        HttpHeaders headers = serverHttpRequest.getHeaders();
+        String ip = headers.getFirst("x-forwarded-for");
+        if(ip != null && ip.length() != 0){
+            if(ip.indexOf(",") != -1){
+                ip = ip.split(",")[0];
+            }
+        }
+        if(ip == null || ip.length() == 0){
+            ip = headers.getFirst("Proxy-Client-IP");
+        }
+        if(ip == null || ip.length() == 0){
+            ip = headers.getFirst("WL-Proxy-Client-IP");
+        }
+        if(ip == null || ip.length() == 0){
+            ip = headers.getFirst("HTTP_CLIENT_IP");
+        }
+        if(ip == null || ip.length() == 0){
+            ip = headers.getFirst("HTTP_X_FORWARDED_FOR");
+        }
+        if(ip == null || ip.length() == 0){
+            ip = headers.getFirst("X-Real-IP");
+        }
+        if(ip == null || ip.length() == 0){
+            ip = serverHttpRequest.getRemoteAddress().getAddress().getHostAddress();
+        }
+        if(isIpv4(ip)){
+            return ip;
+        }else{
+            return "Illegal IP address";
+        }
+
+    }
+
+    //IP地址验证,防止非法地址
+    private boolean isIpv4(String ipAddress) {
+        String ip = "^(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|[1-9])\\."
+                +"(00?\\d|1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)\\."
+                +"(00?\\d|1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)\\."
+                +"(00?\\d|1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)$";
+
+        Pattern pattern = Pattern.compile(ip);
+        Matcher matcher = pattern.matcher(ipAddress);
+        return matcher.matches();
+    }
+
+}

+ 10 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/common/utils/AuthUtil.java

@@ -39,4 +39,14 @@ public class AuthUtil {
         return userType;
     }
 
+    /**
+     * 获取当前登录人username
+     */
+    public static String getCurrentUsername(){
+        Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
+        MyUserDetails userDetails = (MyUserDetails)authentication.getPrincipal();
+        String username = userDetails.getUsername();
+        return username;
+    }
+
 }

+ 2 - 2
simulation-resource-server/src/main/java/com/css/simulation/resource/feign/FileDownService.java

@@ -15,7 +15,7 @@ import org.springframework.web.multipart.MultipartFile;
 import java.util.List;
 
 
-//@FeignClient(name = "test", url = "http://10.15.12.72:8001",path = "/simulation/resource/common", fallback = FileDownServiceFallback.class, configuration = FeignConfiguration.class)
+//@FeignClient(name = "test2", url = "http://47.94.105.148",path = "/simulation/resource/common", fallback = FileDownServiceFallback.class, configuration = FeignConfiguration.class)
 @FeignClient(
         contextId = "file",
         value = "simulation-resource-common",
@@ -38,7 +38,7 @@ public interface FileDownService {
     Response download(@RequestBody @Validated MinioParameter minioParameter);
 
     @PostMapping("/minio/list")
-    ResponseBodyVO<List<String>> list( @RequestBody @Validated MinioParameter minioParameter );
+    ResponseBodyVO<List<String>> list(@RequestBody @Validated MinioParameter minioParameter);
 
     @PostMapping("/minio/listDeepOne")
     ResponseBodyVO<List<String>> listDeepOne( @RequestBody @Validated MinioParameter minioParameter );

+ 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);
+
+
+
+}

+ 3 - 2
simulation-resource-server/src/main/java/com/css/simulation/resource/feign/RedisService.java

@@ -13,11 +13,12 @@ import java.util.List;
 import java.util.Map;
 
 //@FeignClient(name = "test", url = "http://10.15.12.72:8001", fallback = RedisServiceFallback.class, configuration = FeignConfiguration.class)
-@FeignClient(value = "simulation-resource-common",
+@FeignClient(name = "test1", url = "http://47.93.217.159", path = "/simulation/resource/common", fallback = RedisServiceFallback.class, configuration = FeignConfiguration.class)
+/*@FeignClient(value = "simulation-resource-common",
         contextId = "redis",
         path = "/simulation/resource/common",
         fallback = RedisServiceFallback.class,
-        configuration = FeignConfiguration.class)
+        configuration = FeignConfiguration.class)*/
 public interface RedisService {
 
     @PostMapping("/redis/setDictLists")

+ 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);
+    }
+}

+ 46 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/log/ctrl/LogCtrl.java

@@ -0,0 +1,46 @@
+package com.css.simulation.resource.log.ctrl;
+
+import api.common.pojo.common.ResponseBodyVO;
+import api.common.pojo.param.log.LogPageParam;
+import api.common.pojo.po.log.LogLoginPO;
+import api.common.pojo.po.log.LogOperationPO;
+import api.common.pojo.po.log.LogSystemPO;
+import com.css.simulation.resource.log.service.LogService;
+import com.github.pagehelper.PageInfo;
+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;
+
+@Controller
+@RequestMapping("/log")
+public class LogCtrl {
+
+    @Autowired
+    LogService logService;
+
+    @RequestMapping("/getLoginLogPageList")
+    @ResponseBody
+    public ResponseBodyVO<PageInfo<LogLoginPO>> getLoginLogPageList(@RequestBody LogPageParam pageParam){
+        ResponseBodyVO<PageInfo<LogLoginPO>> response = new ResponseBodyVO<PageInfo<LogLoginPO>>(ResponseBodyVO.Response.SUCCESS);
+        response.setInfo(logService.getLoginLogPageList(pageParam));
+        return response;
+    }
+
+    @RequestMapping("/getOperationLogPageList")
+    @ResponseBody
+    public ResponseBodyVO<PageInfo<LogOperationPO>> getOperationLogPageList(@RequestBody LogPageParam pageParam){
+        ResponseBodyVO<PageInfo<LogOperationPO>> response = new ResponseBodyVO<PageInfo<LogOperationPO>>(ResponseBodyVO.Response.SUCCESS);
+        response.setInfo(logService.getOperationLogPageList(pageParam));
+        return response;
+    }
+
+    @RequestMapping("/getSystemLogPageList")
+    @ResponseBody
+    public ResponseBodyVO<PageInfo<LogSystemPO>> getSystemLogPageList(@RequestBody LogPageParam pageParam){
+        ResponseBodyVO<PageInfo<LogSystemPO>> response = new ResponseBodyVO<PageInfo<LogSystemPO>>(ResponseBodyVO.Response.SUCCESS);
+        response.setInfo(logService.getSystemLogPageList(pageParam));
+        return response;
+    }
+}

+ 26 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/log/mapper/LogMapper.java

@@ -0,0 +1,26 @@
+package com.css.simulation.resource.log.mapper;
+
+import api.common.pojo.param.log.LogPageParam;
+import api.common.pojo.po.log.LogLoginPO;
+import api.common.pojo.po.log.LogOperationPO;
+import api.common.pojo.po.log.LogSystemPO;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+@Mapper
+@Repository
+public interface LogMapper {
+
+    void insertOperationLog(LogOperationPO po);
+
+    List<LogLoginPO> getLoginLogPageList(LogPageParam pageParam);
+
+    List<LogOperationPO> getOperationLogPageList(LogPageParam pageParam);
+
+    List<LogSystemPO> getSystemLogPageList(LogPageParam pageParam);
+
+    void insertSystemLog(LogSystemPO po);
+
+}

+ 93 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/log/service/LogService.java

@@ -0,0 +1,93 @@
+package com.css.simulation.resource.log.service;
+
+import api.common.pojo.constants.LogConstants;
+import api.common.pojo.param.log.LogPageParam;
+import api.common.pojo.po.log.LogLoginPO;
+import api.common.pojo.po.log.LogOperationPO;
+import api.common.pojo.po.log.LogSystemPO;
+import api.common.pojo.po.system.UserPO;
+import api.common.util.ObjectUtil;
+import api.common.util.StringUtil;
+import api.common.util.TimeUtil;
+import com.css.simulation.resource.common.utils.AuthUtil;
+import com.css.simulation.resource.common.utils.PageUtil;
+import com.css.simulation.resource.log.mapper.LogMapper;
+import com.css.simulation.resource.system.service.DictService;
+import com.github.pagehelper.PageInfo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+
+
+@Service
+public class LogService {
+
+    @Autowired
+    LogMapper logMapper;
+
+    @Autowired
+    DictService dictService;
+
+    @Async
+    public void saveOperationLog(LogOperationPO po) {
+        po.setId(StringUtil.getRandomUUID());
+        po.setCreateTime(TimeUtil.getNowForMysql());
+        logMapper.insertOperationLog(po);
+    }
+
+    public PageInfo<LogLoginPO> getLoginLogPageList(LogPageParam pageParam) {
+        PageUtil.setPageInfo(pageParam);
+        List<LogLoginPO> list = logMapper.getLoginLogPageList(pageParam);
+        return new PageInfo<>(list);
+    }
+
+    public PageInfo<LogOperationPO> getOperationLogPageList(LogPageParam pageParam) {
+        PageUtil.setPageInfo(pageParam);
+        List<LogOperationPO> list = logMapper.getOperationLogPageList(pageParam);
+        //字典翻译
+        Map<String, Map<String, String>> dictMaps = dictService.getDictMapsByTypes(LogConstants.MODULE_TYPE + "," + LogConstants.OPERATION_TYPE);
+        list.forEach(po ->{
+            po.setModule(dictMaps.get(LogConstants.MODULE_TYPE).get(po.getModule()));
+            po.setOperationType(dictMaps.get(LogConstants.OPERATION_TYPE).get(po.getOperationType()));
+        });
+        return new PageInfo<>(list);
+    }
+
+    public PageInfo<LogSystemPO> getSystemLogPageList(LogPageParam pageParam) {
+        PageUtil.setPageInfo(pageParam);
+        List<LogSystemPO> list = logMapper.getSystemLogPageList(pageParam);
+        //字典翻译
+        Map<String, Map<String, String>> dictMaps = dictService.getDictMapsByTypes(LogConstants.SYS_LOG_TYPE);
+        list.forEach(po ->{
+            po.setModule(dictMaps.get(LogConstants.SYS_LOG_TYPE).get(po.getModule()));
+            po.setOperationType(dictMaps.get(LogConstants.SYS_LOG_TYPE).get(po.getOperationType()));
+        });
+        return new PageInfo<>(list);
+    }
+
+    public void logUser(String operationType, UserPO userPO) {
+        try {
+            LogSystemPO po = new LogSystemPO();
+            po.setId(StringUtil.getRandomUUID());
+            po.setCreateTime(TimeUtil.getNowForMysql());
+            po.setUserId(AuthUtil.getCurrentUserId());
+            po.setUsername(AuthUtil.getCurrentUsername());
+            po.setRoleCode(AuthUtil.getCurrentUserRoleCode());
+            po.setModule(LogConstants.SYS_LOG_USER);
+            String userId = userPO.getId();
+            String username = userPO.getUsername();
+            if(ObjectUtil.isNull(username)){
+                username = "XX";
+            }
+            String content = username + " ( ID: " + userId + " )";
+            po.setContent(content);
+            po.setOperationType(operationType);
+            logMapper.insertSystemLog(po);
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+    }
+}

+ 2 - 1
simulation-resource-server/src/main/java/com/css/simulation/resource/model/ctrl/VehicleCtrl.java

@@ -2,6 +2,7 @@ package com.css.simulation.resource.model.ctrl;
 
 
 import api.common.pojo.common.ResponseBodyVO;
+import api.common.pojo.constants.LogConstants;
 import api.common.pojo.param.model.VehicleParam;
 import api.common.pojo.po.model.VehiclePO;
 import api.common.pojo.vo.model.VehicleVO;
@@ -16,7 +17,7 @@ import org.springframework.web.bind.annotation.ResponseBody;
 import java.util.List;
 
 @Controller
-@RequestMapping("/vehicle")
+@RequestMapping(value = "/vehicle",name = LogConstants.MODULE_VEHICLE)
 public class VehicleCtrl {
 
     @Autowired

+ 60 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/model/ctrl/VehicleTempCtrl.java

@@ -1,9 +1,15 @@
 package com.css.simulation.resource.model.ctrl;
 
 import api.common.pojo.common.ResponseBodyVO;
+import api.common.pojo.param.model.VehiclePageParam;
+import api.common.pojo.po.model.VehicleTempPO;
+import api.common.pojo.vo.model.VehicleTempVO;
+import api.common.util.ObjectUtil;
 import com.css.simulation.resource.model.service.VehicleTempService;
+import com.github.pagehelper.PageInfo;
 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;
 
@@ -24,4 +30,58 @@ public class VehicleTempCtrl {
         response.setInfo(vehicleTempService.getVehicleTempTree());
         return response;
     }
+
+    /**
+     * 获取列表
+     */
+    @RequestMapping("/getVehicleTempPageList")
+    @ResponseBody
+    public ResponseBodyVO<PageInfo<VehicleTempVO>> getVehicleTempPageList(@RequestBody VehiclePageParam pageParam){
+        ResponseBodyVO<PageInfo<VehicleTempVO>> response = new ResponseBodyVO<>(ResponseBodyVO.Response.SUCCESS);
+        response.setInfo(vehicleTempService.getVehicleTempPageList(pageParam));
+        return response;
+    }
+
+    /**
+     * 根据id获取详情
+     */
+    @RequestMapping("/getVehicleTempInfo")
+    @ResponseBody
+    public ResponseBodyVO<VehicleTempVO> getVehicleTempInfo(@RequestBody VehiclePageParam param){
+        ResponseBodyVO<VehicleTempVO> response = new ResponseBodyVO<>(ResponseBodyVO.Response.SUCCESS);
+        response.setInfo(vehicleTempService.getVehicleTempInfo(param));
+        return response;
+    }
+
+    /**
+     * 新增、修改
+     */
+    @RequestMapping("/saveVehicleTemp")
+    @ResponseBody
+    public ResponseBodyVO<VehicleTempPO> saveVehicleTemp(@RequestBody VehicleTempPO po){
+        if(ObjectUtil.isNull(po)){
+            return new ResponseBodyVO(false, 500, "参数必传!",null);
+        }
+        ResponseBodyVO<VehicleTempPO> response = new ResponseBodyVO<>(ResponseBodyVO.Response.SUCCESS);
+        po = vehicleTempService.saveVehicleTemp(po);
+        if(ObjectUtil.isNull(po.getId())){
+            return new ResponseBodyVO(false, 500, "车辆名称重复!",null);
+        }
+        response.setInfo(po);
+        return response;
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping("/delVehicleTempById")
+    @ResponseBody
+    public ResponseBodyVO delVehicleTempById(@RequestBody VehicleTempPO po){
+        int i = vehicleTempService.delVehicleTempById(po);
+        if(i>0){
+            return new ResponseBodyVO(ResponseBodyVO.Response.SUCCESS);
+        }else{
+            return new ResponseBodyVO(false, 500, "删除失败!",null);
+        }
+    }
 }

+ 14 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/model/mapper/VehicleTempMapper.java

@@ -1,5 +1,7 @@
 package com.css.simulation.resource.model.mapper;
 
+import api.common.pojo.param.model.VehiclePageParam;
+import api.common.pojo.po.model.VehicleTempPO;
 import api.common.pojo.vo.model.VehicleTempVO;
 import org.apache.ibatis.annotations.Mapper;
 import org.springframework.stereotype.Repository;
@@ -11,4 +13,16 @@ import java.util.List;
 public interface VehicleTempMapper {
 
     List<VehicleTempVO> getVehicleTempTree();
+
+    List<VehicleTempVO> getVehicleTempPageList(VehiclePageParam pageParam);
+
+    VehicleTempVO getVehicleTempInfo(VehiclePageParam param);
+
+    List<VehicleTempVO> checkVehicleName(VehicleTempPO po);
+
+    void insert(VehicleTempPO po);
+
+    void update(VehicleTempPO po);
+
+    int delVehicleTempById(VehicleTempPO po);
 }

+ 5 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/model/service/VehicleService.java

@@ -4,6 +4,7 @@ import api.common.pojo.constants.DictConstants;
 import api.common.pojo.param.model.VehicleParam;
 import api.common.pojo.po.model.VehiclePO;
 import api.common.pojo.vo.model.VehicleVO;
+import api.common.util.LogUtil;
 import api.common.util.ObjectUtil;
 import api.common.util.StringUtil;
 import com.css.simulation.resource.common.utils.AuthUtil;
@@ -75,8 +76,10 @@ public class VehicleService {
             vehiclePO.setId(StringUtil.getRandomUUID());
             vehiclePO.setVehicleCode(StringUtil.getRandomCode());
             vehicleMapper.insert(vehiclePO);
+            LogUtil.insert();
         }else{//修改
             vehicleMapper.update(vehiclePO);
+            LogUtil.update();
         }
         return vehiclePO;
     }
@@ -97,11 +100,13 @@ public class VehicleService {
         vehiclePO.setId(StringUtil.getRandomUUID());
         vehiclePO.setVehicleCode(StringUtil.getRandomCode());
         vehicleMapper.insert(vehiclePO);
+        LogUtil.share();
         return vehiclePO;
     }
 
     public int delVehicleById(VehiclePO vehiclePO) {
         PoUtil.initDelPo(vehiclePO);
+        LogUtil.delete();
         return vehicleMapper.delVehicleById(vehiclePO);
     }
 }

+ 41 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/model/service/VehicleTempService.java

@@ -1,9 +1,15 @@
 package com.css.simulation.resource.model.service;
 
+import api.common.pojo.param.model.VehiclePageParam;
+import api.common.pojo.po.model.VehicleTempPO;
 import api.common.pojo.vo.model.VehicleDefaultValueVO;
 import api.common.pojo.vo.model.VehicleTempVO;
 import api.common.util.ObjectUtil;
+import api.common.util.StringUtil;
+import com.css.simulation.resource.common.utils.PageUtil;
+import com.css.simulation.resource.common.utils.PoUtil;
 import com.css.simulation.resource.model.mapper.VehicleTempMapper;
+import com.github.pagehelper.PageInfo;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -49,4 +55,39 @@ public class VehicleTempService {
         });
         return treeList;
     }
+
+    public PageInfo<VehicleTempVO> getVehicleTempPageList(VehiclePageParam pageParam) {
+        PageUtil.setPageInfo(pageParam);
+        List<VehicleTempVO> list = vehicleTempMapper.getVehicleTempPageList(pageParam);
+        return new PageInfo<>(list);
+    }
+
+    public VehicleTempVO getVehicleTempInfo(VehiclePageParam param) {
+        return vehicleTempMapper.getVehicleTempInfo(param);
+    }
+
+    public VehicleTempPO saveVehicleTemp(VehicleTempPO po) {
+        //名称校验
+        List<VehicleTempVO> list = vehicleTempMapper.checkVehicleName(po);
+        if(ObjectUtil.isNotNull(list)){
+            po.setId(null);
+            return po;
+        }
+        String id = po.getId();
+        //常规字段赋值
+        PoUtil.initAddPo(po);
+        if(ObjectUtil.isNull(id)){//新增
+            po.setId(StringUtil.getRandomUUID());
+            po.setVehicleCode(StringUtil.getRandomCode());
+            vehicleTempMapper.insert(po);
+        }else{//修改
+            vehicleTempMapper.update(po);
+        }
+        return po;
+    }
+
+    public int delVehicleTempById(VehicleTempPO po) {
+        PoUtil.initDelPo(po);
+        return vehicleTempMapper.delVehicleTempById(po);
+    }
 }

+ 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);
+
+    }
+
+}

+ 7 - 1
simulation-resource-server/src/main/java/com/css/simulation/resource/project/constants/ProjectConstants.java

@@ -9,7 +9,13 @@ public class ProjectConstants {
     public static final String RUN_TASK_TOPIC = "manualProject";
 
     //任务终止,kafka推送主题
-    public static final String STOP_TASK_TOPPIC = "manualProject-stop";
+    public static final String STOP_TASK_TOPPIC = "stopManualProject";//   manualProject-stop
+
+    //自动任务运行开始
+    public static final String AUTO_PROJECT = "autoProject";
+
+    //自动任务运行中止
+    public static final String STOP_AUTO_PROJECT = "stopAutoProject";
 
     //第三方算法类型(索为)
     public static final String SY_ALGORITHM_TYPE="3";

+ 79 - 7
simulation-resource-server/src/main/java/com/css/simulation/resource/project/ctrl/SimulationProjectCtrl.java

@@ -4,17 +4,10 @@ import api.common.pojo.common.ResponseBodyVO;
 import api.common.pojo.param.project.DictParam;
 import api.common.pojo.param.project.SimulationManualProjectParam;
 import com.css.simulation.resource.project.service.SimulationProjectService;
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.itextpdf.text.DocumentException;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.*;
 
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
 /**
  * 工作台模块--项目运行
  */
@@ -244,4 +237,83 @@ public class SimulationProjectCtrl {
         return service.deleteAutomaticProjectByids(param);
     }
 
+    /**
+     * 修改自动运行状态
+     */
+    @RequestMapping("updateAutomaticRunState")
+    @ResponseBody
+    public  ResponseBodyVO updateAutomaticRunState(@RequestBody SimulationManualProjectParam param){
+        return service.updateAutomaticRunState(param);
+    };
+
+    /**
+     * 查询自动运行项目列表
+     */
+    @RequestMapping("selectAutomaticProject")
+    @ResponseBody
+    public ResponseBodyVO selectAutomaticProject(@RequestBody SimulationManualProjectParam param){
+        return service.selectAutomaticProject(param);
+    }
+
+    /**
+     * 手动运行自动项目
+     */
+    @RequestMapping("createAutomaticSubProject")
+    @ResponseBody
+    public ResponseBodyVO createAutomaticSubProject(@RequestBody SimulationManualProjectParam param){
+        return service.createAutomaticSubProject(param);
+    }
+
+    /**
+     * 删除自动运行子项目(支持批量删除)
+     */
+    @RequestMapping("deleteAutomaticSubProjectByIds")
+    @ResponseBody
+    public ResponseBodyVO deleteAutomaticSubProjectByIds(@RequestBody SimulationManualProjectParam param){
+
+        return service.deleteAutomaticSubProjectByIds(param);
+    }
+
+    /**
+     * 查询自动运行子工作信息
+     * @return
+     */
+    @RequestMapping("selectSubProjectInfo")
+    @ResponseBody
+    public ResponseBodyVO selectSubProjectInfo(@RequestBody SimulationManualProjectParam param){
+        return service.selectSubProjectInfo(param);
+    }
+
+
+    /**
+     * 查询自动运行子工作列表
+     * @return
+     */
+    @RequestMapping("selectSubProjectList")
+    @ResponseBody
+    public ResponseBodyVO selectSubProjectList(@RequestBody SimulationManualProjectParam param){
+        return service.selectSubProjectList(param);
+    }
+
+    /**
+     * 根据id查询自动运行项目信息
+     */
+    @RequestMapping("selectAutomaticProjectById")
+    @ResponseBody
+    public ResponseBodyVO selectAutomaticProjectById(@RequestBody SimulationManualProjectParam param){
+        return service.selectAutomaticProjectById(param);
+    }
+
+    /**
+     * 修改自动运行子工作运行状态
+     * @param param
+     * @return
+     */
+    @RequestMapping("updateAutoProjectNowRunState")
+    @ResponseBody
+    public ResponseBodyVO updateAutoProjectNowRunState(@RequestBody SimulationManualProjectParam param){
+        return service.updateAutoProjectNowRunState(param);
+    }
+
+
 }

File diff suppressed because it is too large
+ 626 - 78
simulation-resource-server/src/main/java/com/css/simulation/resource/project/impl/SimulationProjectServiceImpl.java


+ 12 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/project/mapper/SimulationAutomaticProjectMapper.java

@@ -25,6 +25,8 @@ public interface SimulationAutomaticProjectMapper {
 
      SimulationAutomaticProjectPo selectLastProjectId(Integer nowRq);
 
+     List<SimulationManualProjectVo> selecAutomatictProjectList(SimulationManualProjectParam param);
+
      int add(SimulationAutomaticProjectPo po);
 
      int updateById(SimulationAutomaticProjectPo po);
@@ -33,5 +35,15 @@ public interface SimulationAutomaticProjectMapper {
 
      int deleteProject(String[] ids);
 
+     int updateAutomaticRunState(SimulationManualProjectParam param);
+
+     AutomaticProjectVo selectAutomaticProjectInfoById(String id);
+
+     AlgorithmPO getAlgorithmGitVersion(AlgorithmPO po);
+
+     int updateAlgorithmGitVersion(AlgorithmPO po);
+
+     int updateAutomaticRunTimes(SimulationAutomaticProjectPo po);
+
 
 }

+ 33 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/project/mapper/SimulationAutomaticSubProjectMapper.java

@@ -0,0 +1,33 @@
+package com.css.simulation.resource.project.mapper;
+
+import api.common.pojo.param.project.SimulationManualProjectParam;
+import api.common.pojo.po.project.SimulationAutomaticProjectPo;
+import api.common.pojo.po.project.SimulationAutomaticSubProjectPo;
+import api.common.pojo.vo.project.SimulationManualProjectVo;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+@Mapper
+@Repository
+public interface SimulationAutomaticSubProjectMapper {
+
+     SimulationAutomaticSubProjectPo selectLastProjectId(String id);
+
+     int addAutomaticSubProject(SimulationAutomaticSubProjectPo po);
+
+     List<SimulationAutomaticSubProjectPo> selectProjectNowRunState(String[] ids);
+
+     int deleteProject(String[] ids);
+
+     List<SimulationManualProjectVo> selectList(SimulationManualProjectParam param);
+
+     SimulationAutomaticSubProjectPo selectById(SimulationManualProjectParam param);
+
+     SimulationManualProjectVo selectProjectInfo(SimulationManualProjectParam param);
+
+     int updateNowRunState(SimulationManualProjectParam param);
+
+
+}

+ 2 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/project/mapper/SimulationMptFirstTargetScoreMapper.java

@@ -21,5 +21,7 @@ public interface SimulationMptFirstTargetScoreMapper {
 
     SimulationMptFirstTargetScorePo selectFirstTargetScore(SimulationMptFirstTargetScorePo po);
 
+    List<SimulationMptFirstTargetScorePo> selectFirstTargetByPid(SimulationMptFirstTargetScorePo po);
+
 
 }

+ 4 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/project/mapper/SimulationProjectMapper.java

@@ -71,6 +71,8 @@ public interface SimulationProjectMapper {
 
     List<ScenePackageSubListVO> selectSubListByPid(String id);
 
+    List<SublistScoreVo> selectsublistByRootId(SimulationManualProjectParam param);
+
     int insertSimulationMptLastTargetScorePo(SimulationMptLastTargetScorePo po);
 
     int insertSimulationMptFirstTargetScorePo(SimulationMptFirstTargetScorePo po);
@@ -87,6 +89,8 @@ public interface SimulationProjectMapper {
 
     List<SublistScoreVo> selectSubScore(SimulationManualProjectParam param);
 
+    List<SublistScoreVo> selectSubScore2(SimulationManualProjectParam param);
+
     Integer selectRunProjectBySy(Map map);
 
     List<Map> selectRunProjectByState(Map map);

+ 3 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/project/mapper/SimulationProjectTaskMapper.java

@@ -37,6 +37,9 @@ public interface SimulationProjectTaskMapper {
     //更新仿真结果到数据库
     int updateTaksResult(ManualProjectTaskPo po);
 
+    SceneScoreVo selectRunStateByAborted(SimulationMptSceneScorePo po);
+
+
 
 
 

+ 17 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/project/service/SimulationProjectService.java

@@ -2,6 +2,7 @@ package com.css.simulation.resource.project.service;
 
 import api.common.pojo.common.ResponseBodyVO;
 import api.common.pojo.param.project.SimulationManualProjectParam;
+import org.springframework.web.bind.annotation.RequestBody;
 
 
 public interface SimulationProjectService {
@@ -61,4 +62,20 @@ public interface SimulationProjectService {
 
     ResponseBodyVO deleteAutomaticProjectByids(SimulationManualProjectParam param);
 
+    ResponseBodyVO updateAutomaticRunState(SimulationManualProjectParam param);
+
+    ResponseBodyVO selectAutomaticProject(SimulationManualProjectParam param);
+
+    ResponseBodyVO createAutomaticSubProject(SimulationManualProjectParam param);
+
+    ResponseBodyVO deleteAutomaticSubProjectByIds(SimulationManualProjectParam param);
+
+    ResponseBodyVO selectSubProjectInfo(SimulationManualProjectParam param);
+
+    ResponseBodyVO selectSubProjectList(SimulationManualProjectParam param);
+
+    ResponseBodyVO selectAutomaticProjectById(SimulationManualProjectParam param);
+
+    ResponseBodyVO updateAutoProjectNowRunState(SimulationManualProjectParam 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);*/
+
+
+
+
+
+
+    }
+
+}

+ 23 - 1
simulation-resource-server/src/main/java/com/css/simulation/resource/system/ctrl/UserCtrl.java

@@ -69,8 +69,30 @@ public class UserCtrl {
      */
     @RequestMapping("/saveDefaultPassword")
     @ResponseBody
-    public ResponseBodyVO<PageInfo<UserVO>> saveDefaultPassword(@RequestBody UserPO userPO) throws Exception {
+    public ResponseBodyVO saveDefaultPassword(@RequestBody UserPO userPO) throws Exception {
+        if(ObjectUtil.isNull(userPO)){
+            return new ResponseBodyVO(false, 400, "参数必传!",null);
+        }
+        if(ObjectUtil.isNull(userPO.getId())){
+            return new ResponseBodyVO(false, 400, "参数必传!",null);
+        }
         userService.saveDefaultPassword(userPO);
         return new ResponseBodyVO(ResponseBodyVO.Response.SUCCESS);
     }
+
+    /**
+     * 启用/停用账户
+     */
+    @RequestMapping("/saveVisible")
+    @ResponseBody
+    public ResponseBodyVO saveVisible(@RequestBody UserPO userPO) throws Exception {
+        if(ObjectUtil.isNull(userPO)){
+            return new ResponseBodyVO(false, 400, "参数必传!",null);
+        }
+        if(ObjectUtil.isNull(userPO.getId()) || ObjectUtil.isNull(userPO.getVisible())){
+            return new ResponseBodyVO(false, 400, "参数必传!",null);
+        }
+        userService.saveVisible(userPO);
+        return new ResponseBodyVO(ResponseBodyVO.Response.SUCCESS);
+    }
 }

+ 2 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/system/mapper/UserMapper.java

@@ -30,4 +30,6 @@ public interface UserMapper {
     void update(UserPO userPO);
 
     void saveDefaultPassword(UserPO userPO);
+
+    void saveVisible(UserPO userPO);
 }

+ 18 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/system/service/UserService.java

@@ -1,6 +1,7 @@
 package com.css.simulation.resource.system.service;
 
 import api.common.pojo.constants.DictConstants;
+import api.common.pojo.constants.LogConstants;
 import api.common.pojo.param.system.UserParam;
 import api.common.pojo.po.system.UserPO;
 import api.common.pojo.vo.system.UserVO;
@@ -11,6 +12,7 @@ import com.css.simulation.resource.common.oauth.OauthParameter;
 import com.css.simulation.resource.common.utils.AuthUtil;
 import com.css.simulation.resource.common.utils.PageUtil;
 import com.css.simulation.resource.common.utils.PoUtil;
+import com.css.simulation.resource.log.service.LogService;
 import com.css.simulation.resource.system.mapper.UserMapper;
 import com.github.pagehelper.PageInfo;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -29,6 +31,8 @@ public class UserService {
     @Autowired
     OauthParameter oauthParameter;
 
+    @Autowired
+    LogService logService;
 
     public UserVO getCurrentUserInfo() {
         String userId = AuthUtil.getCurrentUserId();
@@ -84,8 +88,10 @@ public class UserService {
             userPO.setPassword(EncryptUtil.getLowerMD5(oauthParameter.getSimulationDefaultPassword()));
             userPO.setVisible("1");
             userMapper.insert(userPO);
+            logService.logUser(LogConstants.SYS_LOG_USER_INSERT,userPO);
         }else{
             userMapper.update(userPO);
+            logService.logUser(LogConstants.SYS_LOG_USER_UPDATE,userPO);
         }
         //密码清空
         userPO.setPassword(null);
@@ -96,5 +102,17 @@ public class UserService {
         userPO.setPassword(EncryptUtil.getLowerMD5(oauthParameter.getSimulationDefaultPassword()));
         PoUtil.initUpdatePo(userPO);
         userMapper.saveDefaultPassword(userPO);
+        logService.logUser(LogConstants.SYS_LOG_USER_RESET,userPO);
+    }
+
+    public void saveVisible(UserPO userPO) {
+        PoUtil.initUpdatePo(userPO);
+        userMapper.saveVisible(userPO);
+        if("1".equals(userPO.getVisible())){
+            logService.logUser(LogConstants.SYS_LOG_USER_START,userPO);
+        }else{
+            logService.logUser(LogConstants.SYS_LOG_USER_STOP,userPO);
+        }
+
     }
 }

+ 1 - 1
simulation-resource-server/src/main/resources/logback-spring.xml

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<configuration debug="true">
+<configuration debug="false">
     <!-- 项目名称 -->
     <springProperty scop="context" name="PROJECT_NAME" source="spring.application.name" defaultValue="" />
     <!--定义不同环境的日志文件的存储地址 使用相对路径-->

+ 128 - 0
simulation-resource-server/src/main/resources/mapper/log/LogMapper.xml

@@ -0,0 +1,128 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.css.simulation.resource.log.mapper.LogMapper" >
+
+    <insert id="insertOperationLog" parameterType="api.common.pojo.po.log.LogOperationPO">
+        INSERT INTO log_operation (
+          id,
+          user_id,
+          username,
+          ip,
+          module,
+          operationType,
+          create_time)
+        VALUES(
+          #{id,jdbcType=VARCHAR},
+          #{userId,jdbcType=VARCHAR},
+          #{username,jdbcType=VARCHAR},
+          #{ip,jdbcType=VARCHAR},
+          #{module,jdbcType=VARCHAR},
+          #{operationType,jdbcType=VARCHAR},
+          #{createTime,jdbcType=TIMESTAMP}
+        )
+    </insert>
+
+    <select id="getLoginLogPageList" parameterType="api.common.pojo.param.log.LogPageParam" resultType="api.common.pojo.po.log.LogLoginPO">
+        SELECT
+          user_id,
+          username,
+          ip,
+          state,
+          create_time
+        FROM log_login
+        WHERE 1=1
+        <if test="username != null and username != ''">
+            and username like CONCAT('%',#{username,jdbcType=VARCHAR},'%')
+        </if>
+        <if test="createTimeBegin != null">
+            and create_time &gt;= #{createTimeBegin,jdbcType=TIMESTAMP}
+        </if>
+        <if test="createTimeEnd != null">
+            and create_time &lt;= #{createTimeEnd,jdbcType=TIMESTAMP}
+        </if>
+        ORDER BY create_time DESC
+    </select>
+
+    <select id="getOperationLogPageList" parameterType="api.common.pojo.param.log.LogPageParam" resultType="api.common.pojo.po.log.LogOperationPO">
+        select
+          id,
+          user_id,
+          username,
+          ip,
+          module,
+          operationType,
+          create_time
+        FROM log_operation
+        WHERE 1=1
+        <if test="username != null and username != ''">
+            and username like CONCAT('%',#{username,jdbcType=VARCHAR},'%')
+        </if>
+        <if test="module != null and module != ''">
+            and module = #{module,jdbcType=VARCHAR}
+        </if>
+        <if test="operationType != null and operationType != ''">
+            and operation_type = #{operationType,jdbcType=VARCHAR}
+        </if>
+        <if test="createTimeBegin != null">
+            and create_time &gt;= #{createTimeBegin,jdbcType=TIMESTAMP}
+        </if>
+        <if test="createTimeEnd != null">
+            and create_time &lt;= #{createTimeEnd,jdbcType=TIMESTAMP}
+        </if>
+        ORDER BY create_time DESC
+    </select>
+
+    <select id="getSystemLogPageList" parameterType="api.common.pojo.param.log.LogPageParam" resultType="api.common.pojo.po.log.LogSystemPO">
+        SELECT
+          id,
+          user_id,
+          username,
+          role_code,
+          module,
+          operation_type,
+          content,
+          create_time
+        FROM log_system
+        WHERE 1=1
+        <if test="username != null and username != ''">
+            and username like CONCAT('%',#{username,jdbcType=VARCHAR},'%')
+        </if>
+        <if test="module != null and module != ''">
+            and module = #{module,jdbcType=VARCHAR}
+        </if>
+        <if test="operationType != null and operationType != ''">
+            and operation_type = #{operationType,jdbcType=VARCHAR}
+        </if>
+        <if test="content != null and content != ''">
+            and content like CONCAT('%',#{content,jdbcType=VARCHAR},'%')
+        </if>
+        <if test="createTimeBegin != null">
+            and create_time &gt;= #{createTimeBegin,jdbcType=TIMESTAMP}
+        </if>
+        <if test="createTimeEnd != null">
+            and create_time &lt;= #{createTimeEnd,jdbcType=TIMESTAMP}
+        </if>
+        ORDER BY create_time DESC
+    </select>
+
+    <insert id="insertSystemLog" parameterType="api.common.pojo.po.log.LogSystemPO">
+        INSERT INTO log_system(
+          id,
+          user_id,
+          username,
+          role_code,
+          module,
+          operation_type,
+          content,
+          create_time
+        )VALUES(
+          #{id,jdbcType=VARCHAR},
+          #{userId,jdbcType=VARCHAR},
+          #{username,jdbcType=VARCHAR},
+          #{roleCode,jdbcType=VARCHAR},
+          #{module,jdbcType=VARCHAR},
+          #{operationType,jdbcType=VARCHAR},
+          #{content,jdbcType=VARCHAR},
+          #{createTime,jdbcType=TIMESTAMP})
+    </insert>
+</mapper>

+ 187 - 0
simulation-resource-server/src/main/resources/mapper/model/VehicleTempMapper.xml

@@ -36,4 +36,191 @@
         WHERE valid = '1' AND is_deleted = '0'
         ORDER BY sort
     </select>
+
+    <select id="getVehicleTempPageList" parameterType="api.common.pojo.param.model.VehiclePageParam" resultType="api.common.pojo.vo.model.VehicleTempVO">
+        SELECT
+          id,
+          vehicle_code,
+          vehicle_name,
+          description,
+          model_label,
+          vehicle_type,
+          vehicle_model,
+          vehicle_colour,
+          sort,
+          valid
+        FROM model_vehicle_template
+        WHERE is_deleted = '0'
+        <if test="vehicleCode != null and vehicleCode != ''">
+            and vehicle_code like CONCAT('%',#{vehicleCode,jdbcType=VARCHAR},'%')
+        </if>
+        <if test="vehicleName != null and vehicleName != ''">
+            and vehicle_name like CONCAT('%',#{vehicleName,jdbcType=VARCHAR},'%')
+        </if>
+        <if test="modelLabel != null and modelLabel != ''">
+            and model_label like CONCAT('%',#{modelLabel,jdbcType=VARCHAR},'%')
+        </if>
+        ORDER BY sort
+    </select>
+
+    <select id="getVehicleTempInfo" parameterType="api.common.pojo.param.model.VehiclePageParam" resultType="api.common.pojo.vo.model.VehicleTempVO">
+        SELECT
+          id,
+          vehicle_code,
+          vehicle_name,
+          description,
+          model_label,
+          vehicle_type,
+          vehicle_model,
+          vehicle_colour,
+          vehicle_front_view,
+          vehicle_top_view,
+          max_speed,
+          engine_power,
+          max_deceleration,
+          max_steering_angle,
+          mass,
+          front_surface_effective,
+          air_drag_coefficient,
+          rolling_resistance_coefficient,
+          wheel_diameter,
+          wheel_drive,
+          overall_efficiency,
+          front_distance,
+          rear_distance,
+          left_distance,
+          right_distance,
+          height_distance,
+          wheelbase,
+          valid,
+          sort
+        FROM model_vehicle_template
+        WHERE id = #{id,jdbcType=VARCHAR} limit 1
+    </select>
+
+    <select id="checkVehicleName" parameterType="api.common.pojo.po.model.VehicleTempPO" resultType="api.common.pojo.vo.model.VehicleTempVO">
+         select
+            id
+        from model_vehicle_template
+        where is_deleted = '0'
+          and id &lt;&gt; #{id,jdbcType=VARCHAR}
+          and vehicle_name = #{vehicleName,jdbcType=VARCHAR}
+    </select>
+
+    <insert id="insert" parameterType="api.common.pojo.po.model.VehicleTempPO">
+        insert into model_vehicle_template(
+            id,
+            vehicle_code,
+            vehicle_name,
+            description,
+            model_label,
+            vehicle_type,
+            vehicle_model,
+            vehicle_colour,
+            vehicle_front_view,
+            vehicle_top_view,
+            max_speed,
+            engine_power,
+            max_deceleration,
+            max_steering_angle,
+            mass,
+            front_surface_effective,
+            air_drag_coefficient,
+            rolling_resistance_coefficient,
+            wheel_diameter,
+            wheel_drive,
+            overall_efficiency,
+            front_distance,
+            rear_distance,
+            left_distance,
+            right_distance,
+            height_distance,
+            wheelbase,
+            valid,
+            sort,
+            create_time,
+            modify_time,
+            create_user_id,
+            modify_user_id,
+            is_deleted
+        )
+        values(
+            #{id,jdbcType=VARCHAR},
+            #{vehicleCode,jdbcType=VARCHAR},
+            #{vehicleName,jdbcType=VARCHAR},
+            #{description,jdbcType=VARCHAR},
+            #{modelLabel,jdbcType=VARCHAR},
+            #{vehicleType,jdbcType=VARCHAR},
+            #{vehicleModel,jdbcType=VARCHAR},
+            #{vehicleColour,jdbcType=VARCHAR},
+            #{vehicleFrontView,jdbcType=VARCHAR},
+            #{vehicleTopView,jdbcType=VARCHAR},
+            #{maxSpeed,jdbcType=DECIMAL},
+            #{enginePower,jdbcType=DECIMAL},
+            #{maxDeceleration,jdbcType=DECIMAL},
+            #{maxSteeringAngle,jdbcType=DECIMAL},
+            #{mass,jdbcType=DECIMAL},
+            #{frontSurfaceEffective,jdbcType=DECIMAL},
+            #{airDragCoefficient,jdbcType=DECIMAL},
+            #{rollingResistanceCoefficient,jdbcType=DECIMAL},
+            #{wheelDiameter,jdbcType=DECIMAL},
+            #{wheelDrive,jdbcType=VARCHAR},
+            #{overallEfficiency,jdbcType=DECIMAL},
+            #{frontDistance,jdbcType=DECIMAL},
+            #{rearDistance,jdbcType=DECIMAL},
+            #{leftDistance,jdbcType=DECIMAL},
+            #{rightDistance,jdbcType=DECIMAL},
+            #{heightDistance,jdbcType=DECIMAL},
+            #{wheelbase,jdbcType=DECIMAL},
+            #{valid,jdbcType=VARCHAR},
+            #{sort,jdbcType=INTEGER},
+            #{createTime,jdbcType=TIMESTAMP},
+            #{modifyTime,jdbcType=TIMESTAMP},
+            #{createUserId,jdbcType=VARCHAR},
+            #{modifyUserId,jdbcType=VARCHAR},
+            #{isDeleted,jdbcType=VARCHAR}
+        )
+    </insert>
+
+    <update id="update" parameterType="api.common.pojo.po.model.VehicleTempPO">
+        update model_vehicle_template set
+            vehicle_name = #{vehicleName,jdbcType=VARCHAR},
+            description = #{description,jdbcType=VARCHAR},
+            model_label = #{modelLabel,jdbcType=VARCHAR},
+            vehicle_type = #{vehicleType,jdbcType=VARCHAR},
+            vehicle_model = #{vehicleModel,jdbcType=VARCHAR},
+            vehicle_colour = #{vehicleColour,jdbcType=VARCHAR},
+            vehicle_front_view = #{vehicleFrontView,jdbcType=VARCHAR},
+            vehicle_top_view = #{vehicleTopView,jdbcType=VARCHAR},
+            max_speed = #{maxSpeed,jdbcType=DECIMAL},
+            engine_power = #{enginePower,jdbcType=DECIMAL},
+            max_deceleration = #{maxDeceleration,jdbcType=DECIMAL},
+            max_steering_angle = #{maxSteeringAngle,jdbcType=DECIMAL},
+            mass = #{mass,jdbcType=DECIMAL},
+            front_surface_effective = #{frontSurfaceEffective,jdbcType=DECIMAL},
+            air_drag_coefficient = #{airDragCoefficient,jdbcType=DECIMAL},
+            rolling_resistance_coefficient = #{rollingResistanceCoefficient,jdbcType=DECIMAL},
+            wheel_diameter = #{wheelDiameter,jdbcType=DECIMAL},
+            wheel_drive = #{wheelDrive,jdbcType=VARCHAR},
+            overall_efficiency = #{overallEfficiency,jdbcType=DECIMAL},
+            front_distance = #{frontDistance,jdbcType=DECIMAL},
+            rear_distance = #{rearDistance,jdbcType=DECIMAL},
+            left_distance = #{leftDistance,jdbcType=DECIMAL},
+            right_distance = #{rightDistance,jdbcType=DECIMAL},
+            height_distance = #{heightDistance,jdbcType=DECIMAL},
+            wheelbase = #{wheelbase,jdbcType=DECIMAL},
+            valid = #{valid,jdbcType=VARCHAR},
+            sort = #{sort,jdbcType=INTEGER},
+            modify_time = #{modifyTime,jdbcType=TIMESTAMP},
+            modify_user_id = #{modifyUserId,jdbcType=VARCHAR}
+        where id = #{id,jdbcType=VARCHAR}
+    </update>
+
+    <update id="delVehicleTempById" parameterType="api.common.pojo.po.model.VehicleTempPO">
+        update model_vehicle_template set
+          modify_time = #{modifyTime,jdbcType=TIMESTAMP},
+          modify_user_id = #{modifyUserId,jdbcType=VARCHAR},
+          is_deleted = #{isDeleted,jdbcType=VARCHAR}
+        where id = #{id,jdbcType=VARCHAR}
+    </update>
 </mapper>

+ 65 - 5
simulation-resource-server/src/main/resources/mapper/project/SimulationAutomaticProjectMapper.xml

@@ -13,7 +13,7 @@
     <!--根据条件查询工作信息-->
     <select id="selectAutomaticProjectByQuery" parameterType="api.common.pojo.param.project.SimulationManualProjectParam" resultType="api.common.pojo.po.project.SimulationAutomaticProjectPo">
         select * from simulation_automatic_project
-        is_deleted = '0'
+        where is_deleted = '0'
         <if test="projectName != null and projectName != ''">
             and project_name = #{projectName,jdbcType=VARCHAR}
         </if>
@@ -28,6 +28,30 @@
         limit 1
     </select>
 
+    <!--查询自动项目列表-->
+    <select id="selecAutomatictProjectList" parameterType="api.common.pojo.param.project.SimulationManualProjectParam" resultType="api.common.pojo.vo.project.SimulationManualProjectVo">
+        select * from simulation_automatic_project
+        <where>
+            is_deleted = '0'
+            <if test="projectId != null and projectId != ''">
+                and project_id like CONCAT('%',#{projectId,jdbcType=VARCHAR},'%')
+            </if>
+            <if test="projectName != null and projectName != ''">
+                and project_name like CONCAT('%',#{projectName,jdbcType=VARCHAR},'%')
+            </if>
+            <if test="createTimeStart != null">
+                and create_time &gt;= #{createTimeStart,jdbcType=TIMESTAMP}
+            </if>
+            <if test="createTimeEnd != null">
+                and create_time &lt;= #{createTimeEnd,jdbcType=TIMESTAMP}
+            </if>
+            <if test="createUserId != null and createUserId != ''">
+                and create_user_id = #{createUserId,jdbcType=VARCHAR}
+            </if>
+        </where>
+        order by project_date desc, project_num desc, modify_time desc
+    </select>
+
     <!--创建项目信息-->
     <insert id="add" parameterType="api.common.pojo.po.project.SimulationAutomaticProjectPo">
         insert into simulation_automatic_project
@@ -92,16 +116,19 @@
         algorithm_type = #{algorithmType,jdbcType=VARCHAR},
         vehicle = #{vehicle,jdbcType=VARCHAR},
         scene = #{scene,jdbcType=VARCHAR},
-        operation_cycle = #{operation_cycle,jdbcType=VARCHAR},
+        operation_cycle = #{operationCycle,jdbcType=VARCHAR},
         parallelism = #{parallelism,jdbcType=VARCHAR},
-        is_choice_gpu = #{isChoiceGpu,jdbcType=VARCHAR}
+        rule_view = #{ruleView,jdbcType=VARCHAR},
+        is_choice_gpu = #{isChoiceGpu,jdbcType=VARCHAR},
+        modify_time = #{modifyTime,jdbcType=TIMESTAMP},
+        modify_user_id = #{modifyUserId,jdbcType=VARCHAR}
         where id = #{id,jdbcType=VARCHAR} and is_deleted = '0'
     </update>
 
 
-    <!--查询项目状态-->
+    <!--查询项目自动运行状态-->
     <select id="selectProjectNowRunState" resultType="api.common.pojo.po.project.SimulationAutomaticProjectPo">
-        select now_run_state
+        select automatic_run_state
         from simulation_automatic_project
         where
         is_deleted='0' and
@@ -122,6 +149,39 @@
 
     </update>
 
+    <!--修改自动运行状态-->
+    <update id="updateAutomaticRunState" parameterType="api.common.pojo.param.project.SimulationManualProjectParam">
+        update simulation_automatic_project
+        set automatic_run_state=#{automaticRunState,jdbcType=VARCHAR}
+        where id = #{id,jdbcType=VARCHAR}
+    </update>
+
+    <!--修改自动运行次数-->
+    <update id="updateAutomaticRunTimes" parameterType="api.common.pojo.po.project.SimulationAutomaticProjectPo">
+        update simulation_automatic_project
+        set automatic_Run_Times=#{automaticRunTimes,jdbcType=BIGINT}
+        where id = #{id,jdbcType=VARCHAR}
+    </update>
+
+    <!--自动运行项目详细页面信息-->
+    <select id="selectAutomaticProjectInfoById" parameterType="string" resultType="api.common.pojo.vo.project.AutomaticProjectVo">
+        select p.id, p.project_name, p.project_describe, p.operation_cycle, p.parallelism, p.is_choice_gpu, p.vehicle, a.algorithm_name, s.package_name as sceneName
+        from simulation_automatic_project p
+        left join algorithm a on p.algorithm = a.id
+        left join scene_package s on p.scene = s.package_id
+        where p.id = #{id,jdbcType=VARCHAR} and p.is_deleted = '0'
+    </select>
+
+    <!--根据算法id获取算法git版本号信息-->
+    <select id="getAlgorithmGitVersion" parameterType="api.common.pojo.po.algorithm.AlgorithmPO" resultType="api.common.pojo.po.algorithm.AlgorithmPO">
+        select id,git_version from algorithm where id=#{id}
+    </select>
+
+    <!--更新算法版本号-->
+    <update id="updateAlgorithmGitVersion" parameterType="api.common.pojo.po.algorithm.AlgorithmPO">
+        update algorithm set git_version=#{gitVersion} where id=#{id}
+    </update>
+
 
 
 </mapper>

+ 108 - 0
simulation-resource-server/src/main/resources/mapper/project/SimulationAutomaticSubProjectMapper.xml

@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.css.simulation.resource.project.mapper.SimulationAutomaticSubProjectMapper" >
+
+
+
+    <!--查询最新项目id-->
+    <select id="selectLastProjectId" parameterType="string" resultType="api.common.pojo.po.project.SimulationAutomaticSubProjectPo">
+        select project_date, project_num, project_id, parent_project_id
+        from simulation_automatic_subproject
+        where parent_id=#{id,jdbcType=VARCHAR} and is_deleted = '0'
+        order by project_num desc
+        limit 1
+    </select>
+
+    <!--添加自动运行子项目-->
+    <insert id="addAutomaticSubProject" parameterType="api.common.pojo.po.project.SimulationAutomaticSubProjectPo">
+        insert into simulation_automatic_subproject
+        (
+        id,
+        parent_id,
+        parent_project_id,
+        project_num,
+        project_id,
+        project_name,
+        now_run_state,
+        evaluation_level,
+        start_time,
+        finish_time,
+        create_time,
+        create_user_id,
+        modify_time,
+        modify_user_id,
+        is_deleted
+        )
+        values
+        (
+        #{id,jdbcType=VARCHAR},
+        #{parentId,jdbcType=VARCHAR},
+        #{parentProjectId,jdbcType=VARCHAR},
+        #{projectNum,jdbcType=INTEGER},
+        #{projectId,jdbcType=VARCHAR},
+        #{projectName,jdbcType=VARCHAR},
+        #{nowRunState,jdbcType=VARCHAR},
+        #{evaluationLevel,jdbcType=VARCHAR},
+        #{startTime,jdbcType=VARCHAR},
+        #{finishTime,jdbcType=VARCHAR},
+        #{createTime,jdbcType=TIMESTAMP},
+        #{createUserId,jdbcType=VARCHAR},
+        #{modifyTime,jdbcType=TIMESTAMP},
+        #{modifyUserId,jdbcType=VARCHAR},
+        #{isDeleted,jdbcType=VARCHAR}
+        )
+    </insert>
+
+    <!--查询项目状态-->
+    <select id="selectProjectNowRunState" resultType="api.common.pojo.po.project.SimulationAutomaticSubProjectPo">
+        select now_run_state
+        from simulation_automatic_subproject
+        where
+        is_deleted='0' and
+        id in
+        <foreach collection="array" open="(" separator="," close=")" item="id">
+            #{id,jdbcType=VARCHAR}
+        </foreach>
+    </select>
+
+    <!--删除-->
+    <update id="deleteProject">
+        update simulation_automatic_subproject
+        set is_deleted='1'
+        where id in
+        <foreach collection="array" open="(" separator="," close=")" item="id">
+            #{id,jdbcType=VARCHAR}
+        </foreach>
+
+    </update>
+
+    <!--查询列表-->
+    <select id="selectList" parameterType="api.common.pojo.param.project.SimulationManualProjectParam" resultType="api.common.pojo.vo.project.SimulationManualProjectVo" >
+        select * from simulation_automatic_subproject  where parent_id=#{parentId,jdbcType=VARCHAR} and is_deleted='0' order by project_num desc
+    </select>
+
+    <!--根据id查询-->
+    <select id="selectById" parameterType="api.common.pojo.param.project.SimulationManualProjectParam" resultType="api.common.pojo.po.project.SimulationAutomaticSubProjectPo">
+        select * from simulation_automatic_subproject where id = #{id,jdbcType=VARCHAR} and is_deleted='0'
+    </select>
+
+    <!--关联主表查询-->
+    <select id="selectProjectInfo" parameterType="api.common.pojo.param.project.SimulationManualProjectParam" resultType="api.common.pojo.vo.project.SimulationManualProjectVo">
+        select s.id, p.scene, s.project_id, p.project_name, p.algorithm, p.algorithm_type,
+        p.vehicle, p.project_describe, s.start_time, s.finish_time, s.now_run_state,
+        p.parallelism, p.max_simulation_time, p.is_choice_gpu
+        from simulation_automatic_subproject s
+        left join simulation_automatic_project p on s.parent_id = p.id
+        where s.id=#{id,jdbcType=VARCHAR}
+    </select>
+
+    <!--修改任务运行状态-->
+    <update id="updateNowRunState" parameterType="api.common.pojo.param.project.SimulationManualProjectParam">
+        update simulation_automatic_subproject
+        set now_run_state = #{nowRunState,jdbcType=VARCHAR}
+        where id = #{id,jdbcType=VARCHAR}
+    </update>
+
+
+
+</mapper>

+ 9 - 0
simulation-resource-server/src/main/resources/mapper/project/SimulationMptFirstTargetScoreMapper.xml

@@ -9,4 +9,13 @@
         where p_id = #{pId,jdbcType=VARCHAR} and target = #{target,jdbcType=VARCHAR} and is_deleted = '0'
     </select>
 
+    <!--查询项目下所有一级指标-->
+    <select id="selectFirstTargetByPid" parameterType="api.common.pojo.po.project.SimulationMptFirstTargetScorePo" resultType="api.common.pojo.po.project.SimulationMptFirstTargetScorePo">
+        select t.*,s.sublist_name,s.scene_num,s.weight, s.sublist_id
+        from simulation_mpt_first_target_score t
+        left join scene_package_sublist s on  t.target = s.sublist_id
+        where t.p_id = #{pId,jdbcType=VARCHAR} and t.is_deleted = '0'
+        order by s.seq
+    </select>
+
 </mapper>

+ 30 - 5
simulation-resource-server/src/main/resources/mapper/project/SimulationProjectMapper.xml

@@ -237,6 +237,9 @@
         <if test="createUserId != null and createUserId !=''">
             and create_user_id=#{createUserId,jdbcType=VARCHAR}
         </if>
+        <if test="uploadMode != null and uploadMode != ''">
+            and upload_mode = #{uploadMode,jdbcType=VARCHAR}
+        </if>
     </select>
 
     <!--获取车辆基本信息-->
@@ -284,6 +287,7 @@
         <if test="createUserId != null and createUserId !=''">
             and create_user_id=#{createUserId,jdbcType=VARCHAR}
         </if>
+         order by modify_time desc
     </select>
 
     <!--查询车辆与传感器关联信息-->
@@ -368,8 +372,15 @@
     <select id="selectsublistBySublistId" parameterType="string" resultType="api.common.pojo.vo.project.ScenePackageSubListVO">
         select sublist_id,sublist_name,scene_num,weight,parent_id,scene_natural_ids,scene_traffic_ids,scene_statue_ids,scene_generalization_ids
         from scene_package_sublist
-        where sublist_id = #{id,jdbcType=VARCHAR} and is_deleted = '0'
-        order by seq desc
+        where sublist_id = #{id,jdbcType=VARCHAR}
+    </select>
+
+    <!--获取场景包下指标信息-->
+    <select id="selectsublistByRootId" parameterType="api.common.pojo.param.project.SimulationManualProjectParam" resultType="api.common.pojo.vo.project.SublistScoreVo">
+        select sub.sublist_id as id, sub.parent_id, sub.sublist_name,sub.scene_num, sub.package_and_rules
+        from scene_package_sublist sub
+        where sub.root_id = #{packageId,jdbcType=VARCHAR}
+        order by sub.seq
     </select>
 
     <!--查询场景包id下最后一级所有指标和场景-->
@@ -467,10 +478,24 @@
         from scene_package_sublist sub
 				left JOIN simulation_mpt_first_target_score fir on fir.target=sub.sublist_id and fir.p_id=#{id,jdbcType=VARCHAR}
 				left JOIN simulation_mpt_last_target_score las on las.target = sub.sublist_id and las.p_id=#{id,jdbcType=VARCHAR}
-        where sub.root_id = #{packageId,jdbcType=VARCHAR} and sub.is_deleted='0'
-		order by seq
+        where sub.root_id = #{packageId,jdbcType=VARCHAR} and (fir.target is not null or las.target is not null)
+		order by sub.seq
     </select>
 
+    <!--查询所有指标得分-->
+    <select id="selectSubScore2" parameterType="api.common.pojo.param.project.SimulationManualProjectParam" resultType="api.common.pojo.vo.project.SublistScoreVo">
+        select sub.sublist_id as id, sub.parent_id, sub.sublist_name,sub.scene_num,
+        fir.score as firScore,las.score as lasScore, sub.package_and_rules, las.not_standard_scene_num, las.score_explain,
+        fir.target as firTarget, las.target as lasTarget
+        from scene_package_sublist sub
+				left JOIN simulation_mpt_first_target_score fir on fir.target=sub.sublist_id and fir.p_id=#{id,jdbcType=VARCHAR}
+				left JOIN simulation_mpt_last_target_score las on las.target = sub.sublist_id and las.p_id=#{id,jdbcType=VARCHAR}
+        where sub.root_id = #{packageId,jdbcType=VARCHAR}
+		order by sub.seq
+    </select>
+
+
+
     <!--查询某天运行项目数量-->
     <select id="selectRunProjectBySy" parameterType="java.util.Map" resultType="java.lang.Integer">
         select count(id) from simulation_manual_project
@@ -555,7 +580,7 @@
     <!--保存评测等级-->
     <update id="saveEvaluationLevel" parameterType="api.common.pojo.po.project.SimulationManualProjectPo">
         update simulation_manual_project
-        set evaluation_level = #{evaluationLevel}
+        set evaluation_level = #{evaluationLevel,jdbcType=VARCHAR}
         where id = #{id,jdbcType=VARCHAR} and is_deleted = '0'
     </update>
 </mapper>

+ 9 - 0
simulation-resource-server/src/main/resources/mapper/project/SimulationProjectTaskMapper.xml

@@ -125,4 +125,13 @@
     </update>
 
 
+    <!--查询Aborted的数量-->
+    <select id="selectRunStateByAborted" parameterType="api.common.pojo.po.project.SimulationMptSceneScorePo" resultType="api.common.pojo.vo.project.SceneScoreVo">
+        select count(*) as num
+        from simulation_manual_project_task
+        where p_id = #{pId,jdbcType=VARCHAR}
+        and run_state = 'Aborted' and is_deleted = '0'
+    </select>
+
+
 </mapper>

+ 45 - 28
simulation-resource-server/src/main/resources/mapper/system/UserMapper.xml

@@ -17,60 +17,66 @@
 
     <!-- 列表查询共用字段-->
     <sql id="pageColumn">
-        id,
-        username,
-        nickname,
-        photo,
-        phone,
-        company,
-        role_code,
-        visible
+        u.id,
+        u.username,
+        u.nickname,
+        u.photo,
+        u.phone,
+        u.company,
+        u.role_code,
+        u.use_type,
+        u.visible,
+        u.create_time,
+        t.username as createUserName
     </sql>
     <!-- 列表查询共用查询条件-->
     <sql id="pageWhere">
         <if test="username != null and username != ''">
-            and username like CONCAT('%',#{username,jdbcType=VARCHAR},'%')
+            and u.username like CONCAT('%',#{username,jdbcType=VARCHAR},'%')
         </if>
         <if test="nickname != null and nickname != ''">
-            and nickname like CONCAT('%',#{nickname,jdbcType=VARCHAR},'%')
+            and u.nickname like CONCAT('%',#{nickname,jdbcType=VARCHAR},'%')
         </if>
         <if test="company != null and company != ''">
-            and company like CONCAT('%',#{company,jdbcType=VARCHAR},'%')
+            and u.company like CONCAT('%',#{company,jdbcType=VARCHAR},'%')
         </if>
         <if test="roleCode != null and roleCode != ''">
-            and role_code = #{roleCode,jdbcType=VARCHAR}
+            and u.role_code = #{roleCode,jdbcType=VARCHAR}
         </if>
         <if test="visible != null and visible != ''">
-            and visible = #{visible,jdbcType=VARCHAR}
+            and u.visible = #{visible,jdbcType=VARCHAR}
         </if>
     </sql>
 
     <select id="getUserPageLista" parameterType="api.common.pojo.param.system.UserParam" resultType="api.common.pojo.vo.system.UserVO">
         SELECT
            <include refid="pageColumn"></include>
-        FROM system_user
-        WHERE is_deleted = '0' AND role_code &lt;&gt; '0'
-          <include refid="pageWhere"></include>
-        ORDER BY modify_time DESC
+        FROM system_user u
+        JOIN system_user t ON u.create_user_id = t.id
+        WHERE u.is_deleted = '0' AND u.role_code &lt;&gt; '0' and u.role_code &lt;&gt; '3'
+        <include refid="pageWhere"></include>
+        ORDER BY u.modify_time DESC
     </select>
 
     <select id="getUserPageListb" parameterType="api.common.pojo.param.system.UserParam" resultType="api.common.pojo.vo.system.UserVO">
         SELECT
         <include refid="pageColumn"></include>
-        FROM system_user
-        WHERE is_deleted = '0' AND role_code &lt;&gt; '0' and role_code &lt;&gt; '1'
+        FROM system_user u
+        JOIN system_user t ON u.create_user_id = t.id
+        WHERE u.is_deleted = '0' AND u.role_code = '2'
         <include refid="pageWhere"></include>
-        ORDER BY modify_time DESC
+        ORDER BY u.modify_time DESC
     </select>
 
     <select id="getUserPageListc" parameterType="api.common.pojo.param.system.UserParam" resultType="api.common.pojo.vo.system.UserVO">
         SELECT
         <include refid="pageColumn"></include>
-        FROM system_user
-        WHERE is_deleted = '0' AND role_code = '3'
+        FROM system_user u
+        JOIN system_user t ON u.create_user_id = t.id
+        WHERE u.is_deleted = '0' AND u.role_code = '3'
         <include refid="pageWhere"></include>
-        and create_user_id = #{createUserId,jdbcType=VARCHAR}
-        ORDER BY modify_time DESC
+        and u.create_user_id = #{createUserId,jdbcType=VARCHAR}
+        ORDER BY u.modify_time DESC
     </select>
 
     <select id="selectCount" resultType="java.lang.Integer">
@@ -99,6 +105,7 @@
             phone,
             company,
             role_code,
+            use_type,
             visible,
             create_time,
             modify_time,
@@ -115,6 +122,7 @@
             #{phone,jdbcType=VARCHAR},
             #{company,jdbcType=VARCHAR},
             #{roleCode,jdbcType=VARCHAR},
+            #{useType,jdbcType=VARCHAR},
             #{visible,jdbcType=VARCHAR},
             #{createTime,jdbcType=TIMESTAMP},
             #{modifyTime,jdbcType=TIMESTAMP},
@@ -128,13 +136,13 @@
         update system_user set
             username = #{username,jdbcType=VARCHAR},
             nickname = #{nickname,jdbcType=VARCHAR},
-            photo = #{photo,jdbcType=VARCHAR},
+            <!--photo = #{photo,jdbcType=VARCHAR},-->
             phone = #{phone,jdbcType=VARCHAR},
             company = #{company,jdbcType=VARCHAR},
-            visible = #{visible,jdbcType=VARCHAR},
+            <!--visible = #{visible,jdbcType=VARCHAR},-->
 
-            modify_time = #{modifyTime,jdbcType=TIMESTAMP},
-            modify_user_id = #{modifyUserId,jdbcType=VARCHAR}
+        modify_time = #{modifyTime,jdbcType=TIMESTAMP},
+        modify_user_id = #{modifyUserId,jdbcType=VARCHAR}
         where id = #{id,jdbcType=VARCHAR}
     </update>
 
@@ -146,4 +154,13 @@
         where id = #{id,jdbcType=VARCHAR}
     </update>
 
+    <update id="saveVisible" parameterType="api.common.pojo.po.system.UserPO">
+        update system_user set
+            visible = #{visible,jdbcType=VARCHAR},
+            modify_time = #{modifyTime,jdbcType=TIMESTAMP},
+            modify_user_id = #{modifyUserId,jdbcType=VARCHAR}
+        where id = #{id,jdbcType=VARCHAR}
+    </update>
+
+
 </mapper>

Some files were not shown because too many files changed in this diff