Sfoglia il codice sorgente

scene上传工程完善

WXF 3 anni fa
parent
commit
59b23cb00f
28 ha cambiato i file con 856 aggiunte e 1 eliminazioni
  1. 6 0
      api-common/src/main/java/api/common/pojo/constants/DictConstants.java
  2. 13 0
      api-common/src/main/java/api/common/pojo/param/scene/SceneImportParam.java
  3. 27 0
      api-common/src/main/java/api/common/pojo/po/system/SceneImportPO.java
  4. 10 0
      simulation-resource-scene/pom.xml
  5. 39 0
      simulation-resource-scene/src/main/java/com/css/simulation/resource/scene/SceneImportCtrl.java
  6. 13 0
      simulation-resource-scene/src/main/java/com/css/simulation/resource/scene/SceneImportMapper.java
  7. 33 0
      simulation-resource-scene/src/main/java/com/css/simulation/resource/scene/SceneImportService.java
  8. 4 0
      simulation-resource-scene/src/main/java/com/css/simulation/resource/scene/SimulationResourceSceneApplication.java
  9. 30 0
      simulation-resource-scene/src/main/java/com/css/simulation/resource/scene/common/config/FeignConfiguration.java
  10. 53 0
      simulation-resource-scene/src/main/java/com/css/simulation/resource/scene/common/config/OAuth2Config.java
  11. 85 0
      simulation-resource-scene/src/main/java/com/css/simulation/resource/scene/common/config/TransactionConfig.java
  12. 48 0
      simulation-resource-scene/src/main/java/com/css/simulation/resource/scene/common/exception/GlobalExceptionHandler.java
  13. 45 0
      simulation-resource-scene/src/main/java/com/css/simulation/resource/scene/common/oauth/MyUserAuthenticationConverter.java
  14. 59 0
      simulation-resource-scene/src/main/java/com/css/simulation/resource/scene/common/oauth/MyUserDetails.java
  15. 16 0
      simulation-resource-scene/src/main/java/com/css/simulation/resource/scene/common/oauth/OauthParameter.java
  16. 62 0
      simulation-resource-scene/src/main/java/com/css/simulation/resource/scene/common/utils/AuthUtil.java
  17. 48 0
      simulation-resource-scene/src/main/java/com/css/simulation/resource/scene/common/utils/PoUtil.java
  18. 18 0
      simulation-resource-scene/src/main/java/com/css/simulation/resource/scene/feign/SceneService.java
  19. 12 0
      simulation-resource-scene/src/main/java/com/css/simulation/resource/scene/feign/SceneServiceFallback.java
  20. 1 1
      simulation-resource-scene/src/main/resources/bootstrap.yaml
  21. 13 0
      simulation-resource-scene/src/main/resources/mapper/SceneImportMapper.xml
  22. 21 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/feign/SceneService.java
  23. 13 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/feign/fallback/SceneServiceFallback.java
  24. 50 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/system/ctrl/SceneImportCtrl.java
  25. 20 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/system/mapper/SceneImportMapper.java
  26. 50 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/system/service/SceneImportService.java
  27. 9 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/system/service/UserService.java
  28. 58 0
      simulation-resource-server/src/main/resources/mapper/system/SceneImportMapper.xml

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

@@ -103,5 +103,11 @@ public class DictConstants {
     public static final String USE_TYPE_EXCLUSIVE = "1";//独占使用
     public static final String USE_TYPE_PUBLIC = "2";//公共使用
 
+    //场景上传任务状态
+    public static final String SCENE_IMPORT_STATUS_0 = "0"; //未执行
+    public static final String SCENE_IMPORT_STATUS_1 = "1"; //上传中
+    public static final String SCENE_IMPORT_STATUS_2 = "2"; //上传完成
+    public static final String SCENE_IMPORT_STATUS_3 = "3"; //解析中
+    public static final String SCENE_IMPORT_STATUS_4 = "4"; //解析完成
 
 }

+ 13 - 0
api-common/src/main/java/api/common/pojo/param/scene/SceneImportParam.java

@@ -0,0 +1,13 @@
+package api.common.pojo.param.scene;
+
+import lombok.Data;
+
+@Data
+public class SceneImportParam {
+
+    //任务id
+    private String id;
+    //Minio路径
+    private String minioDirectory;
+
+}

+ 27 - 0
api-common/src/main/java/api/common/pojo/po/system/SceneImportPO.java

@@ -0,0 +1,27 @@
+package api.common.pojo.po.system;
+
+import api.common.pojo.common.CommonPO;
+import lombok.Data;
+
+@Data
+public class SceneImportPO extends CommonPO {
+    
+    //任务id
+    private String id;
+    //任务名称
+    private String name;
+    //场景包路径
+    private String dataDirectory;
+    //场景类型
+    private String sceneType;
+    //任务执行状态
+    private String status;
+    //成功数量
+    private int successNum;
+    //失败数量
+    private int falseNum;
+    //错误信息
+    private String errorMessage;
+    //总用时长
+    private String totalTime;
+}

+ 10 - 0
simulation-resource-scene/pom.xml

@@ -36,6 +36,16 @@
         </dependency>
         <!-- 数据库 - 结束 -->
 
+        <!-- 权限认证 - 开始 -->
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-security</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-oauth2</artifactId>
+        </dependency>
+        <!-- 权限认证 - 结束 -->
 
         <!-- nacos - 开始 -->
         <dependency>

+ 39 - 0
simulation-resource-scene/src/main/java/com/css/simulation/resource/scene/SceneImportCtrl.java

@@ -0,0 +1,39 @@
+package com.css.simulation.resource.scene;
+
+import api.common.pojo.common.ResponseBodyVO;
+import api.common.pojo.param.scene.SceneImportParam;
+import api.common.pojo.po.system.SceneImportPO;
+import com.css.simulation.resource.scene.feign.SceneService;
+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 javax.annotation.Resource;
+
+@Controller
+@RequestMapping("/sceneImport")
+public class SceneImportCtrl {
+
+    @Autowired
+    SceneImportService sceneImportService;
+
+    @Resource
+    SceneService sceneService;
+
+    /**
+     * 上传
+     */
+    @RequestMapping("/startImport")
+    @ResponseBody
+    public ResponseBodyVO startImport(@RequestBody SceneImportPO po) {
+        ResponseBodyVO<Boolean> response = new ResponseBodyVO(ResponseBodyVO.Response.SUCCESS);
+        response.setInfo(sceneImportService.startImport(po));
+        SceneImportParam param = new SceneImportParam();
+        param.setId(po.getId());
+        param.setMinioDirectory(po.getDataDirectory());
+        sceneService.saveSceneAccidentBatch(param);
+        return response;
+    }
+}

+ 13 - 0
simulation-resource-scene/src/main/java/com/css/simulation/resource/scene/SceneImportMapper.java

@@ -0,0 +1,13 @@
+package com.css.simulation.resource.scene;
+
+import api.common.pojo.po.system.SceneImportPO;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+@Mapper
+@Repository
+public interface SceneImportMapper {
+
+    void updateStatus(SceneImportPO po);
+
+}

+ 33 - 0
simulation-resource-scene/src/main/java/com/css/simulation/resource/scene/SceneImportService.java

@@ -0,0 +1,33 @@
+package com.css.simulation.resource.scene;
+
+import api.common.pojo.constants.DictConstants;
+import api.common.pojo.param.scene.SceneImportParam;
+import api.common.pojo.po.system.SceneImportPO;
+import com.css.simulation.resource.scene.common.utils.AuthUtil;
+import com.css.simulation.resource.scene.common.utils.PoUtil;
+import com.css.simulation.resource.scene.feign.SceneService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+
+@Service
+public class SceneImportService {
+
+    @Autowired
+    SceneImportMapper sceneImportMapper;
+
+    public Boolean startImport(SceneImportPO po) {
+        po.setStatus(DictConstants.SCENE_IMPORT_STATUS_1);
+        PoUtil.initUpdatePo(po);
+        sceneImportMapper.updateStatus(po);
+
+        //TODO
+
+        po.setStatus(DictConstants.SCENE_IMPORT_STATUS_2);
+        sceneImportMapper.updateStatus(po);
+        return true;
+    }
+
+}

+ 4 - 0
simulation-resource-scene/src/main/java/com/css/simulation/resource/scene/SimulationResourceSceneApplication.java

@@ -3,9 +3,13 @@ package com.css.simulation.resource.scene;
 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;
 
 @SpringBootApplication
 @EnableFeignClients
+@EnableResourceServer
+@EnableAsync
 public class SimulationResourceSceneApplication {
 
     public static void main(String[] args) {

+ 30 - 0
simulation-resource-scene/src/main/java/com/css/simulation/resource/scene/common/config/FeignConfiguration.java

@@ -0,0 +1,30 @@
+package com.css.simulation.resource.scene.common.config;
+
+import feign.Logger;
+import feign.RequestInterceptor;
+import feign.RequestTemplate;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * 转发 token
+ */
+@Configuration
+public class FeignConfiguration implements RequestInterceptor {
+
+    @Bean
+    public Logger.Level feignLoggerLevel() {
+        return Logger.Level.FULL;
+    }
+
+    @Override
+    public void apply(RequestTemplate requestTemplate) {
+        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
+        HttpServletRequest request = attributes.getRequest();
+        requestTemplate.header("Authorization", request.getHeader("Authorization"));
+    }
+}

+ 53 - 0
simulation-resource-scene/src/main/java/com/css/simulation/resource/scene/common/config/OAuth2Config.java

@@ -0,0 +1,53 @@
+package com.css.simulation.resource.scene.common.config;
+
+import com.css.simulation.resource.scene.common.oauth.MyUserAuthenticationConverter;
+import com.css.simulation.resource.scene.common.oauth.OauthParameter;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.security.config.annotation.web.builders.HttpSecurity;
+import org.springframework.security.config.http.SessionCreationPolicy;
+import org.springframework.security.oauth2.config.annotation.web.configuration.ResourceServerConfigurerAdapter;
+import org.springframework.security.oauth2.config.annotation.web.configurers.ResourceServerSecurityConfigurer;
+import org.springframework.security.oauth2.provider.token.DefaultAccessTokenConverter;
+import org.springframework.security.oauth2.provider.token.RemoteTokenServices;
+
+import javax.annotation.Resource;
+
+@Configuration
+public class OAuth2Config extends ResourceServerConfigurerAdapter {
+
+    @Resource
+    private OauthParameter oauthParameter;
+
+    @Resource
+    MyUserAuthenticationConverter myUserAuthenticationConverter;
+
+    @Override
+    public void configure(ResourceServerSecurityConfigurer resources) {
+        //令牌解析服务配置
+        RemoteTokenServices services = new RemoteTokenServices();
+        services.setCheckTokenEndpointUrl(oauthParameter.getCheckTokenEndpointUrl());  // 需要在授权服务器公开 /oauth/check_token
+        services.setClientId(oauthParameter.getClientId());
+        services.setClientSecret(oauthParameter.getClientSecret());
+        //自定义令牌转换器
+        DefaultAccessTokenConverter defaultAccessTokenConverter = new DefaultAccessTokenConverter();
+        defaultAccessTokenConverter.setUserTokenConverter(myUserAuthenticationConverter);
+        services.setAccessTokenConverter(defaultAccessTokenConverter);
+        resources.resourceId(oauthParameter.getResourceId())      // 资源 id
+                .tokenServices(services)    // 使用远程服务验证令牌的服务
+                .stateless(true);   // 无状态模式,即无需用户登录,无 session
+    }
+
+    /**
+     * 配置拦截请求,通过 scope
+     */
+    @Override
+    public void configure(HttpSecurity http) throws Exception {
+        http.csrf().disable()   // 禁用 csrf
+                .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)// 无状态验证
+                .and()
+                .authorizeRequests()
+                .antMatchers("/druid/**").permitAll()
+                .anyRequest().access("#oauth2.hasScope('all')") // 拦截所有请求判断 scope
+        ;
+    }
+}

+ 85 - 0
simulation-resource-scene/src/main/java/com/css/simulation/resource/scene/common/config/TransactionConfig.java

@@ -0,0 +1,85 @@
+package com.css.simulation.resource.scene.common.config;
+
+import org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.jdbc.datasource.DataSourceTransactionManager;
+import org.springframework.transaction.TransactionDefinition;
+import org.springframework.transaction.TransactionManager;
+import org.springframework.transaction.interceptor.*;
+
+import javax.sql.DataSource;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 声明式事务配置
+ */
+@Configuration
+public class TransactionConfig {
+
+    @Autowired
+    DataSource dataSource;
+
+    @Bean(name = "masterTransactionManager")
+    public DataSourceTransactionManager masterTransactionManager(DataSource dataSource) {
+        return new DataSourceTransactionManager(dataSource);
+    }
+
+    @Autowired
+    @Qualifier(value = "masterTransactionManager")
+    private TransactionManager transactionManager;
+
+    @Bean
+    public TransactionInterceptor txAdvice() {
+
+        /*只读事务,不做更新操作*/
+        RuleBasedTransactionAttribute readOnlyTx = new RuleBasedTransactionAttribute();
+        readOnlyTx.setReadOnly(true);
+        readOnlyTx.setPropagationBehavior(TransactionDefinition.PROPAGATION_NOT_SUPPORTED);
+
+        /*当前存在事务就使用当前事务,当前不存在事务就创建一个新的事务*/
+        RuleBasedTransactionAttribute requiredTx = new RuleBasedTransactionAttribute();
+        requiredTx.setRollbackRules(Collections.singletonList(new RollbackRuleAttribute(Exception.class)));
+        requiredTx.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
+        requiredTx.setTimeout(5000);
+
+
+        Map<String, TransactionAttribute> txMap = new HashMap<>();
+        txMap.put("save*", requiredTx);
+        txMap.put("insert*", requiredTx);
+        txMap.put("update*", requiredTx);
+        txMap.put("remove*", requiredTx);
+        txMap.put("add*", requiredTx);
+        txMap.put("share*", requiredTx);
+        txMap.put("fx*", requiredTx);
+        txMap.put("del*", requiredTx);
+        /*select,count开头的方法,开启只读,提高数据库访问性能*/
+        txMap.put("select*", readOnlyTx);
+        txMap.put("query*", readOnlyTx);
+        txMap.put("get*", readOnlyTx);
+        txMap.put("list*", readOnlyTx);
+        txMap.put("find*", readOnlyTx);
+        txMap.put("count*", readOnlyTx);
+        txMap.put("*", requiredTx);
+
+        NameMatchTransactionAttributeSource source = new NameMatchTransactionAttributeSource();
+        source.setNameMap(txMap);
+
+        TransactionInterceptor txAdvice = new TransactionInterceptor(transactionManager, source);
+        return txAdvice;
+    }
+
+    @Bean
+    public BeanNameAutoProxyCreator txProxy() {
+        final BeanNameAutoProxyCreator creator = new BeanNameAutoProxyCreator();
+        creator.setInterceptorNames("txAdvice");
+        creator.setBeanNames("*Service");
+        creator.setProxyTargetClass(true);
+        return creator;
+    }
+
+}

+ 48 - 0
simulation-resource-scene/src/main/java/com/css/simulation/resource/scene/common/exception/GlobalExceptionHandler.java

@@ -0,0 +1,48 @@
+package com.css.simulation.resource.scene.common.exception;
+
+import api.common.pojo.common.ResponseBodyVO;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.context.annotation.Scope;
+import org.springframework.http.converter.HttpMessageNotReadableException;
+import org.springframework.web.bind.MethodArgumentNotValidException;
+import org.springframework.web.bind.annotation.ControllerAdvice;
+import org.springframework.web.bind.annotation.ExceptionHandler;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import java.util.Objects;
+
+@ControllerAdvice
+@Slf4j
+@Scope("singleton")
+public class GlobalExceptionHandler {
+    /**
+     * 方法参数校验
+     */
+    @ExceptionHandler(MethodArgumentNotValidException.class)
+    @ResponseBody
+    public ResponseBodyVO<Object> handleMethodArgumentNotValidException(MethodArgumentNotValidException e) {
+        log.error(e.getMessage(), e);
+        return new ResponseBodyVO<>(ResponseBodyVO.Response.SERVER_FAILURE, Objects.requireNonNull(e.getBindingResult().getFieldError()).getDefaultMessage());
+    }
+
+    /**
+     * 请求体缺失异常统一处理
+     */
+    @ExceptionHandler(HttpMessageNotReadableException.class)
+    @ResponseBody
+    public ResponseBodyVO<Object> handleHttpMessageNotReadableException(Exception e) {
+        log.error(e.getMessage(), e);
+        return new ResponseBodyVO<>(ResponseBodyVO.Response.SERVER_FAILURE, "Required request body is missing!");
+    }
+
+    /**
+     * 服务器错误异常统一处理
+     */
+    @ExceptionHandler(Exception.class)
+    @ResponseBody
+    public ResponseBodyVO<Object> handleException(Exception e) {
+        log.error(e.getMessage(), e);
+        return new ResponseBodyVO<>(ResponseBodyVO.Response.SERVER_FAILURE, "服务器错误!");
+    }
+
+}

+ 45 - 0
simulation-resource-scene/src/main/java/com/css/simulation/resource/scene/common/oauth/MyUserAuthenticationConverter.java

@@ -0,0 +1,45 @@
+package com.css.simulation.resource.scene.common.oauth;
+
+import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
+import org.springframework.security.core.Authentication;
+import org.springframework.security.core.GrantedAuthority;
+import org.springframework.security.core.authority.AuthorityUtils;
+import org.springframework.security.oauth2.provider.token.DefaultUserAuthenticationConverter;
+import org.springframework.stereotype.Component;
+import org.springframework.util.StringUtils;
+
+import java.util.Collection;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+
+@Component
+public class MyUserAuthenticationConverter extends DefaultUserAuthenticationConverter {
+
+    @Override
+    public Authentication extractAuthentication(Map<String, ?> map) {
+        List<GrantedAuthority> list = new LinkedList<>();
+        //解析权限
+        if (map.containsKey(AUTHORITIES)) {
+            Object authorities = map.get(AUTHORITIES);
+            if (authorities instanceof String) {
+                list = AuthorityUtils.commaSeparatedStringToAuthorityList((String) authorities);
+            } else if (authorities instanceof Collection) {
+                list = AuthorityUtils.commaSeparatedStringToAuthorityList(StringUtils.collectionToCommaDelimitedString((Collection) authorities));
+            } else {
+                throw new IllegalArgumentException("Authorities must be either a String or a Collection");
+            }
+        }
+        //解析当前登录人信息
+        MyUserDetails userDetails = new MyUserDetails();
+        userDetails.setId((String) map.get("id"));
+        userDetails.setUsername((String) map.get("username"));
+        userDetails.setRoleCode((String) map.get("roleCode"));
+        userDetails.setUseType((String) map.get("useType"));
+        userDetails.setCreateUserId((String) map.get("createUserId"));
+        return new UsernamePasswordAuthenticationToken(userDetails, "N/A", list);
+    }
+
+
+
+}

+ 59 - 0
simulation-resource-scene/src/main/java/com/css/simulation/resource/scene/common/oauth/MyUserDetails.java

@@ -0,0 +1,59 @@
+package com.css.simulation.resource.scene.common.oauth;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springframework.security.core.GrantedAuthority;
+import org.springframework.security.core.userdetails.UserDetails;
+
+import java.io.Serializable;
+import java.util.Set;
+
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class MyUserDetails implements UserDetails, Serializable {
+    private static final long serialVersionUID = -158357727659030597L;
+    private String id;
+    private String username;
+    private String password;
+    private String roleCode;
+    private String useType;
+    private String createUserId;
+    private Set<GrantedAuthority> authorities;
+
+
+    /**
+     * 默认 false 是将用户账号过期,需改成 true 不过期
+     */
+    @Override
+    public boolean isAccountNonExpired() {
+        return true;
+    }
+
+    /**
+     * 默认 false 是将用户上锁,需改成 true 不上锁
+     */
+    @Override
+    public boolean isAccountNonLocked() {
+        return true;
+    }
+
+    /**
+     * 默认 false 是用户凭证国汽,需改成 true 不过期
+     */
+    @Override
+    public boolean isCredentialsNonExpired() {
+        return true;
+    }
+
+    /**
+     * 默认 false 是将用户失效,需改成 true 不失效
+     */
+    @Override
+    public boolean isEnabled() {
+        return true;
+    }
+}

+ 16 - 0
simulation-resource-scene/src/main/java/com/css/simulation/resource/scene/common/oauth/OauthParameter.java

@@ -0,0 +1,16 @@
+package com.css.simulation.resource.scene.common.oauth;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix="oauth")
+public class OauthParameter {
+
+    private String resourceId;
+    private String checkTokenEndpointUrl;
+    private String clientId;
+    private String clientSecret;
+}

+ 62 - 0
simulation-resource-scene/src/main/java/com/css/simulation/resource/scene/common/utils/AuthUtil.java

@@ -0,0 +1,62 @@
+package com.css.simulation.resource.scene.common.utils;
+
+import com.css.simulation.resource.scene.common.oauth.MyUserDetails;
+import org.springframework.security.core.Authentication;
+import org.springframework.security.core.context.SecurityContextHolder;
+
+/**
+ * 认证信息工具类
+ */
+public class AuthUtil {
+
+    /**
+     * 获取当前登录人id
+     */
+    public static String getCurrentUserId(){
+        Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
+        MyUserDetails userDetails = (MyUserDetails)authentication.getPrincipal();
+        String userId = userDetails.getId();
+        return userId;
+    }
+
+    /**
+     * 获取当前登录人roleCode
+     */
+    public static String getCurrentUserRoleCode(){
+        Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
+        MyUserDetails userDetails = (MyUserDetails)authentication.getPrincipal();
+        String roleCode = userDetails.getRoleCode();
+        return roleCode;
+    }
+
+    /**
+     * 获取当前登录人useType
+     */
+    public static String getCurrentUseType(){
+        Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
+        MyUserDetails userDetails = (MyUserDetails)authentication.getPrincipal();
+        String useType = userDetails.getUseType();
+        return useType;
+    }
+
+    /**
+     * 获取当前登录人username
+     */
+    public static String getCurrentUsername(){
+        Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
+        MyUserDetails userDetails = (MyUserDetails)authentication.getPrincipal();
+        String username = userDetails.getUsername();
+        return username;
+    }
+
+    /**
+     * 获取当前登录人createUserId
+     */
+    public static String getCreateUserId(){
+        Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
+        MyUserDetails userDetails = (MyUserDetails)authentication.getPrincipal();
+        String createUserId = userDetails.getCreateUserId();
+        return createUserId;
+    }
+
+}

+ 48 - 0
simulation-resource-scene/src/main/java/com/css/simulation/resource/scene/common/utils/PoUtil.java

@@ -0,0 +1,48 @@
+package com.css.simulation.resource.scene.common.utils;
+
+import api.common.pojo.common.CommonPO;
+import api.common.pojo.constants.DictConstants;
+import api.common.util.ObjectUtil;
+import api.common.util.TimeUtil;
+
+import java.sql.Timestamp;
+
+public class PoUtil {
+
+    /**
+     * 初始化po的常规字段
+     */
+    public static void initAddPo(CommonPO po){
+        if(ObjectUtil.isNull(po)){
+            return ;
+        }
+        String currentUserId = AuthUtil.getCurrentUserId();
+        Timestamp currentTime = TimeUtil.getNowForMysql();
+        po.setCreateUserId(currentUserId);
+        po.setCreateTime(currentTime);
+        po.setModifyUserId(currentUserId);
+        po.setModifyTime(currentTime);
+        po.setIsDeleted(DictConstants.NO);
+    };
+
+    public static void initDelPo(CommonPO po){
+        if(ObjectUtil.isNull(po)){
+            return ;
+        }
+        String currentUserId = AuthUtil.getCurrentUserId();
+        Timestamp currentTime = TimeUtil.getNowForMysql();
+        po.setModifyUserId(currentUserId);
+        po.setModifyTime(currentTime);
+        po.setIsDeleted(DictConstants.YES);
+    };
+
+    public static void initUpdatePo(CommonPO po){
+        if(ObjectUtil.isNull(po)){
+            return ;
+        }
+        String currentUserId = AuthUtil.getCurrentUserId();
+        Timestamp currentTime = TimeUtil.getNowForMysql();
+        po.setModifyUserId(currentUserId);
+        po.setModifyTime(currentTime);
+    };
+}

+ 18 - 0
simulation-resource-scene/src/main/java/com/css/simulation/resource/scene/feign/SceneService.java

@@ -0,0 +1,18 @@
+package com.css.simulation.resource.scene.feign;
+
+import api.common.pojo.common.ResponseBodyVO;
+import api.common.pojo.param.scene.SceneImportParam;
+import com.css.simulation.resource.scene.common.config.FeignConfiguration;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.PostMapping;
+
+@FeignClient(value = "simulation-resource-server",
+        contextId = "SceneService",
+        path = "/simulation/resource/server",
+        fallback = SceneServiceFallback.class,
+        configuration = FeignConfiguration.class)
+public interface SceneService {
+
+    @PostMapping("/SceneAccident/saveSceneAccidentBatch")
+    ResponseBodyVO saveSceneAccidentBatch(SceneImportParam sceneImportParam);
+}

+ 12 - 0
simulation-resource-scene/src/main/java/com/css/simulation/resource/scene/feign/SceneServiceFallback.java

@@ -0,0 +1,12 @@
+package com.css.simulation.resource.scene.feign;
+
+import api.common.pojo.common.ResponseBodyVO;
+import api.common.pojo.param.scene.SceneImportParam;
+
+public class SceneServiceFallback implements SceneService {
+
+    @Override
+    public ResponseBodyVO saveSceneAccidentBatch(SceneImportParam sceneImportParam) {
+        return new ResponseBodyVO<>(ResponseBodyVO.Response.SERVER_FAILURE);
+    }
+}

+ 1 - 1
simulation-resource-scene/src/main/resources/bootstrap.yaml

@@ -5,6 +5,6 @@ spring:
     active: dev
 
 mybatis:
-  mapper-locations: classpath:/mapper/*/*.xml
+  mapper-locations: classpath:/mapper/*.xml
   configuration:
     map-underscore-to-camel-case: true

+ 13 - 0
simulation-resource-scene/src/main/resources/mapper/SceneImportMapper.xml

@@ -0,0 +1,13 @@
+<?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.scene.SceneImportMapper" >
+
+    <update id="updateStatus" parameterType="api.common.pojo.po.system.SceneImportPO">
+        update scene_import_task set
+          status = #{status,jdbcType=VARCHAR},
+          modify_time = #{modifyTime,jdbcType=TIMESTAMP},
+          modify_user_id = #{modifyUserId,jdbcType=VARCHAR}
+        where id = #{id,jdbcType=VARCHAR}
+    </update>
+
+</mapper>

+ 21 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/feign/SceneService.java

@@ -0,0 +1,21 @@
+package com.css.simulation.resource.feign;
+
+import api.common.pojo.common.ResponseBodyVO;
+import api.common.pojo.po.system.SceneImportPO;
+import com.css.simulation.resource.common.config.FeignConfiguration;
+import com.css.simulation.resource.feign.fallback.SceneServiceFallback;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.web.bind.annotation.PostMapping;
+
+@FeignClient(value = "simulation-resource-scene",
+        contextId = "scene",
+        path = "/simulation/resource/scene",
+        fallback = SceneServiceFallback.class,
+        configuration = FeignConfiguration.class)
+public interface SceneService {
+
+    @PostMapping("/sceneImport/startImport")
+    ResponseBodyVO startImport(SceneImportPO po);
+
+}

+ 13 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/feign/fallback/SceneServiceFallback.java

@@ -0,0 +1,13 @@
+package com.css.simulation.resource.feign.fallback;
+
+import api.common.pojo.common.ResponseBodyVO;
+import api.common.pojo.po.system.SceneImportPO;
+import com.css.simulation.resource.feign.SceneService;
+
+public class SceneServiceFallback implements SceneService {
+
+    @Override
+    public ResponseBodyVO startImport(SceneImportPO po) {
+        return new ResponseBodyVO<>(ResponseBodyVO.Response.SERVER_FAILURE);
+    }
+}

+ 50 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/system/ctrl/SceneImportCtrl.java

@@ -0,0 +1,50 @@
+package com.css.simulation.resource.system.ctrl;
+
+import api.common.pojo.common.ResponseBodyVO;
+import api.common.pojo.constants.DictConstants;
+import api.common.pojo.po.system.SceneImportPO;
+import api.common.util.ObjectUtil;
+import com.css.simulation.resource.feign.SceneService;
+import com.css.simulation.resource.system.service.SceneImportService;
+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 javax.annotation.Resource;
+
+@Controller
+@RequestMapping("/sceneImport")
+public class SceneImportCtrl {
+
+    @Autowired
+    SceneImportService sceneImportService;
+
+    @Resource
+    SceneService sceneService;
+
+    /**
+     * 保存上传任务
+     */
+    @RequestMapping("/saveTask")
+    @ResponseBody
+    public ResponseBodyVO saveTask(@RequestBody SceneImportPO po) {
+        if(ObjectUtil.isNull(po)){
+            return new ResponseBodyVO(false, 500, "参数错误!",null);
+        }
+        String sceneType = po.getSceneType();
+        if(ObjectUtil.isNull(sceneType) || DictConstants.SCENE_GENERAL.equals(sceneType)){
+            return new ResponseBodyVO(false, 500, "参数错误!",null);
+        }
+        po = sceneImportService.saveTask(po);
+        if(ObjectUtil.isNull(po.getId())){
+            return new ResponseBodyVO(false, 500, "任务名称重复!",null);
+        }
+        ResponseBodyVO<SceneImportPO> response = new ResponseBodyVO(ResponseBodyVO.Response.SUCCESS);
+        response.setInfo(po);
+        //启动上传
+        sceneService.startImport(po);
+        return response;
+    }
+}

+ 20 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/system/mapper/SceneImportMapper.java

@@ -0,0 +1,20 @@
+package com.css.simulation.resource.system.mapper;
+
+import api.common.pojo.po.system.SceneImportPO;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+@Mapper
+@Repository
+public interface SceneImportMapper {
+
+    List<SceneImportPO> checkName(SceneImportPO po);
+
+    void insert(SceneImportPO po);
+
+    void update(SceneImportPO po);
+
+    void updateStatus(SceneImportPO po);
+}

+ 50 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/system/service/SceneImportService.java

@@ -0,0 +1,50 @@
+package com.css.simulation.resource.system.service;
+
+import api.common.pojo.common.ResponseBodyVO;
+import api.common.pojo.constants.DictConstants;
+import api.common.pojo.po.system.SceneImportPO;
+import api.common.util.ObjectUtil;
+import api.common.util.SshUtil;
+import api.common.util.StringUtil;
+import com.css.simulation.resource.common.utils.PoUtil;
+import com.css.simulation.resource.feign.SceneService;
+import com.css.simulation.resource.system.mapper.SceneImportMapper;
+import org.apache.sshd.client.SshClient;
+import org.apache.sshd.client.session.ClientSession;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.io.IOException;
+import java.util.List;
+
+@Service
+public class SceneImportService {
+
+
+
+    @Autowired
+    SceneImportMapper sceneImportMapper;
+
+    public SceneImportPO saveTask(SceneImportPO po) {
+        //名称校验
+        List<SceneImportPO> list = sceneImportMapper.checkName(po);
+        if(ObjectUtil.isNotNull(list)){
+            po.setId(null);
+            return po;
+        }
+        //常规字段赋值
+        PoUtil.initAddPo(po);
+        String id = po.getId();
+        po.setStatus(DictConstants.SCENE_IMPORT_STATUS_0);//重置状态
+        if(ObjectUtil.isNull(id)) {//新增
+            po.setId(StringUtil.getRandomUUID());
+            sceneImportMapper.insert(po);
+        }else{
+            sceneImportMapper.update(po);
+        }
+        return po;
+    }
+
+}

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

@@ -20,6 +20,7 @@ import org.springframework.stereotype.Service;
 
 import java.security.NoSuchAlgorithmException;
 import java.util.List;
+import java.util.Map;
 
 
 @Service
@@ -34,6 +35,9 @@ public class UserService {
     @Autowired
     LogService logService;
 
+    @Autowired
+    DictService dictService;
+
     public UserVO getCurrentUserInfo() {
         String userId = AuthUtil.getCurrentUserId();
         UserVO userVO = userMapper.getUserInfo(userId);
@@ -55,6 +59,11 @@ public class UserService {
         }else{
             return null;
         }
+        //字典翻译
+        Map<String, Map<String, String>> dictMaps = dictService.getDictMapsByTypes(DictConstants.ROLE_CODE);
+        list.forEach(po ->{
+            po.setRoleCode(dictMaps.get(DictConstants.ROLE_CODE).get(po.getRoleCode()));
+        });
         return new PageInfo<>(list);
     }
 

+ 58 - 0
simulation-resource-server/src/main/resources/mapper/system/SceneImportMapper.xml

@@ -0,0 +1,58 @@
+<?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.system.mapper.SceneImportMapper" >
+
+    <select id="checkName" parameterType="api.common.pojo.po.system.SceneImportPO" resultType="api.common.pojo.po.system.SceneImportPO">
+        select
+        id
+        from scene_import_task
+        where is_deleted = '0'
+        and name = #{name,jdbcType=VARCHAR}
+        and id &lt;&gt; #{id,jdbcType=VARCHAR}
+    </select>
+
+    <insert id="insert" parameterType="api.common.pojo.po.system.SceneImportPO">
+        INSERT INTO scene_import_task (
+           id,
+           name,
+           data_directory,
+           scene_type,
+           status,
+           create_user_id,
+           create_time,
+           modify_user_id,
+           modify_time,
+           is_deleted
+        )VALUES(
+          #{id,jdbcType=VARCHAR},
+          #{name,jdbcType=VARCHAR},
+          #{dataDirectory,jdbcType=VARCHAR},
+          #{sceneType,jdbcType=VARCHAR},
+          #{status,jdbcType=VARCHAR},
+          #{createUserId,jdbcType=VARCHAR},
+          #{createTime,jdbcType=TIMESTAMP},
+          #{modifyUserId,jdbcType=VARCHAR},
+          #{modifyTime,jdbcType=TIMESTAMP},
+          #{isDeleted,jdbcType=VARCHAR}
+        )
+    </insert>
+
+    <update id="update" parameterType="api.common.pojo.po.system.SceneImportPO">
+        update scene_import_task set
+          name = #{name,jdbcType=VARCHAR},
+          data_directory = #{dataDirectory,jdbcType=VARCHAR},
+          scene_type = #{sceneType,jdbcType=VARCHAR},
+
+          modify_time = #{modifyTime,jdbcType=TIMESTAMP},
+          modify_user_id = #{modifyUserId,jdbcType=VARCHAR}
+        where id = #{id,jdbcType=VARCHAR}
+    </update>
+
+    <update id="updateStatus" parameterType="api.common.pojo.po.system.SceneImportPO">
+        update scene_import_task set
+          status = #{status,jdbcType=VARCHAR},
+          modify_time = #{modifyTime,jdbcType=TIMESTAMP},
+          modify_user_id = #{modifyUserId,jdbcType=VARCHAR}
+        where id = #{id,jdbcType=VARCHAR}
+    </update>
+</mapper>