framework/src/main/java/com/yuanchu/limslaboratory/config/DruidConfig.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,57 @@ package com.yuanchu.limslaboratory.config; import com.alibaba.druid.pool.DruidDataSource; import com.alibaba.druid.support.http.StatViewServlet; import com.alibaba.druid.support.http.WebStatFilter; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.boot.web.servlet.ServletRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import javax.sql.DataSource; import java.util.Arrays; import java.util.HashMap; import java.util.Map; @Configuration public class DruidConfig { //å è½½application.yamlä¸çDruidé ç½® @ConfigurationProperties(prefix = "spring.datasource") @Bean public DataSource druid(){ return new DruidDataSource(); } //é ç½®Druidççæ§ //1ãé ç½®ä¸ä¸ªç®¡çåå°çServlet @Bean public ServletRegistrationBean statViewServlet(){ ServletRegistrationBean bean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*"); Map<String,String> initParams = new HashMap<>(); initParams.put("loginUsername","root"); initParams.put("loginPassword","123456"); initParams.put("allow","");//é»è®¤å°±æ¯å 许ææè®¿é® // initParams.put("deny","192.168.15.21"); ç¦æ¢è¯¥IPè®¿é® bean.setInitParameters(initParams); return bean; } //2ãé ç½®ä¸ä¸ªwebçæ§çfilter @Bean public FilterRegistrationBean webStatFilter(){ FilterRegistrationBean bean = new FilterRegistrationBean(); bean.setFilter(new WebStatFilter()); Map<String,String> initParams = new HashMap<>(); initParams.put("exclusions","*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"); bean.setInitParameters(initParams); bean.setUrlPatterns(Arrays.asList("/*")); return bean; } } framework/src/main/java/com/yuanchu/limslaboratory/config/MyBatisPlusConfig.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,18 @@ package com.yuanchu.limslaboratory.config; import com.baomidou.mybatisplus.extension.plugins.OptimisticLockerInterceptor; import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor; import org.mybatis.spring.annotation.MapperScan; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @MapperScan("com.yuanchu.limslaboratory.mapper") // æ«æMybatisä¸çmapperå @Configuration public class MyBatisPlusConfig { // ä¹è§éæä»¶ @Bean public OptimisticLockerInterceptor optimisticLockerInterceptor() { return new OptimisticLockerInterceptor(); } } framework/src/main/java/com/yuanchu/limslaboratory/config/MyCorsConfig.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,37 @@ package com.yuanchu.limslaboratory.config; import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.Ordered; import org.springframework.web.cors.CorsConfiguration; import org.springframework.web.cors.UrlBasedCorsConfigurationSource; import org.springframework.web.filter.CorsFilter; @Configuration public class MyCorsConfig { private CorsConfiguration buildConfig() { CorsConfiguration corsConfiguration = new CorsConfiguration(); // 1 è®¾ç½®è®¿é®æºå°å corsConfiguration.addAllowedOrigin("*"); // 2 è®¾ç½®è®¿é®æºè¯·æ±å¤´ corsConfiguration.addAllowedHeader("*"); // 3 è®¾ç½®è®¿é®æºè¯·æ±æ¹æ³ corsConfiguration.addAllowedMethod("*"); // 4 æ´é²åªäºå¤´é¨ä¿¡æ¯ // corsConfiguration.addExposedHeader(JwtConstant.HEADER); return corsConfiguration; } @Bean public FilterRegistrationBean<CorsFilter> corsFilter() { // log.info("è·¨å设置ãããã"); UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); // 5 对æ¥å£é 置跨å设置 source.registerCorsConfiguration("/**", buildConfig()); //æå¤ä¸ªfilteræ¶æ¤å¤è®¾ç½®æ¹CorsFilterçä¼å æ§è¡é¡ºåº FilterRegistrationBean<CorsFilter> bean = new FilterRegistrationBean<>(new CorsFilter(source)); bean.setOrder(Ordered.HIGHEST_PRECEDENCE); return bean; } } framework/src/main/java/com/yuanchu/limslaboratory/config/Swagger3.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,122 @@ package com.yuanchu.limslaboratory.config; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import springfox.documentation.builders.ApiInfoBuilder; import springfox.documentation.builders.PathSelectors; import springfox.documentation.builders.RequestHandlerSelectors; import springfox.documentation.oas.annotations.EnableOpenApi; import springfox.documentation.service.*; import springfox.documentation.spi.DocumentationType; import springfox.documentation.spi.service.contexts.SecurityContext; import springfox.documentation.spring.web.plugins.Docket; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; @Configuration @EnableOpenApi public class Swagger3 { // è·¯å¾http://localhost:8080/doc.html @Value("${swagger.enabled}") private boolean enable; private final String swaggerPackage = "com.yuanchu.limslaboratory"; /** * æ·»å æè¦ä¿¡æ¯ */ private ApiInfo apiInfo() { // ç¨ApiInfoBuilderè¿è¡å®å¶ return new ApiInfoBuilder() // 设置æ é¢ .title("æ±èéµ·éç½ç»ç§ææéå ¬å¸ç®¡çç³»ç»") // æè¿° .description("æ±èéµ·éç½ç»ç§ææéå ¬å¸ç®¡çç³»ç»") // ä½è ä¿¡æ¯ .contact(new Contact("Crunchy", null, null)) // çæ¬ .version("çæ¬å·:V.1") //åè®® .license("The Apache License") //åè®®url .licenseUrl("http://www.baidu.com") .build(); } /** * å建API * http:IP:端å£å·/swagger-ui/index.html åçå°å * http:IP:端å£å·/doc.html bootStrap-UIå°å */ @Bean public Docket createRestApi() { return new Docket(DocumentationType.OAS_30).pathMapping("/") // ç¨æ¥å建该APIçåºæ¬ä¿¡æ¯ï¼å±ç¤ºå¨ææ¡£ç页é¢ä¸ï¼èªå®ä¹å±ç¤ºçä¿¡æ¯ï¼ .enable(enable) .apiInfo(apiInfo()) // 设置åªäºæ¥å£æ´é²ç»Swaggerå±ç¤º .select() // æ«æææææ³¨è§£çapiï¼ç¨è¿ç§æ¹å¼æ´çµæ´» .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class)) // æ«ææå®å ä¸çswagger注解 .apis(RequestHandlerSelectors.basePackage(swaggerPackage)) // æ«æææ .apis(RequestHandlerSelectors.any()) .paths(PathSelectors.regex("(?!/ApiError.*).*")) .paths(PathSelectors.any()) .build() // æ¯æçé讯åè®®éå .protocols(newHashSet("https", "http")) .securitySchemes(securitySchemes()) .securityContexts(securityContexts()); } /** * æ¯æçé讯åè®®éå * @param type1 * @param type2 * @return */ private Set<String> newHashSet(String type1, String type2){ Set<String> set = new HashSet<>(); set.add(type1); set.add(type2); return set; } /** * 认è¯çå®å ¨ä¸ä¸æ */ private List<SecurityScheme> securitySchemes() { List<SecurityScheme> securitySchemes = new ArrayList<>(); securitySchemes.add((SecurityScheme) new ApiKey("token", "token", "header")); return securitySchemes; } /** * ææä¿¡æ¯å ¨å±åºç¨ */ private List<SecurityContext> securityContexts() { List<SecurityContext> securityContexts = new ArrayList<>(); securityContexts.add(SecurityContext.builder() .securityReferences(defaultAuth()) .forPaths(PathSelectors.any()).build()); return securityContexts; } private List<SecurityReference> defaultAuth() { AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything"); AuthorizationScope[] authorizationScopes = new AuthorizationScope[1]; authorizationScopes[0] = authorizationScope; List<SecurityReference> securityReferences = new ArrayList<>(); securityReferences.add(new SecurityReference("Authorization", authorizationScopes)); return securityReferences; } } framework/src/main/java/com/yuanchu/limslaboratory/config/WebMvcConfig.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,26 @@ package com.yuanchu.limslaboratory.config; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport; import java.io.File; @Configuration public class WebMvcConfig extends WebMvcConfigurationSupport { @Override protected void addResourceHandlers(ResourceHandlerRegistry registry) { // swaggerå¯è§åé ç½® registry.addResourceHandler("/systemPictures/**") .addResourceLocations("file:" + System.getProperty("user.dir")+ File.separator+"uploadFile"+File.separator+"systemPictures"+File.separator); registry.addResourceHandler("/uploadFile/pluginFiles/logo/**") .addResourceLocations("file:" + System.getProperty("user.dir")+ File.separator+"uploadFile"+File.separator+"pluginFiles"+File.separator+"logo"+File.separator); registry.addResourceHandler("doc.html").addResourceLocations("classpath:/META-INF/resources/"); registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/"); //设置æä»¶èæè·¯å¾æ å° registry.addResourceHandler("/img/**").addResourceLocations("file:E:\\webapp\\images\\"); } } framework/src/main/java/com/yuanchu/limslaboratory/handler/GlobalExceptionHandler.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,164 @@ package com.yuanchu.limslaboratory.handler; import com.yuanchu.limslaboratory.vo.Result; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.ConversionNotSupportedException; import org.springframework.beans.TypeMismatchException; import org.springframework.beans.factory.NoSuchBeanDefinitionException; import org.springframework.dao.DuplicateKeyException; import org.springframework.http.converter.HttpMessageNotReadableException; import org.springframework.http.converter.HttpMessageNotWritableException; import org.springframework.jdbc.BadSqlGrammarException; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerAdvice; import java.io.FileNotFoundException; import java.io.IOException; import java.sql.SQLException; @Slf4j @RestControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(SQLException.class) public Result<?> handlerSQLException(SQLException e) { log.error(e.getMessage().toLowerCase(), e); return Result.fail("æ°æ®æä½å¤±è´¥ï¼è¯·è系管çå"); } /** * å¯ä¸å¼å¨æ°æ®åºä¸éå¤ * Duplicate entry ' ' for key ' ' * @param eï¼éå¤é®å¼å¸¸ * @return 199 */ @ExceptionHandler public Result<?> DuplicateKeyException(DuplicateKeyException e) { log.error(String.valueOf(e)); String message = e.getCause().getMessage(); String[] split = message.split("'"); return Result.fail("é夿·»å ï¼ã" + split[1] + "ãæä½å¤±è´¥ï¼"); } @ExceptionHandler public Result<?> NullPointerException(NullPointerException e){ log.error(e.getMessage(), e.getCause()); return Result.fail("é¨ååæ°ä¸ºç©ºï¼è¯·æ£æ¥ï¼"); } /** è¿è¡æ¶å¼å¸¸ */ @ExceptionHandler(RuntimeException.class) public Result<?> runtimeExceptionHandler(RuntimeException e) { log.error(e.getMessage(), e.getCause()); return Result.fail("è¿è¡æ¶å¼å¸¸"); } /** ç±»å转æ¢å¼å¸¸ */ @ExceptionHandler(ClassCastException.class) public Result<?> classCastExceptionHandler(ClassCastException e) { log.error(e.getMessage(), e.getCause()); return Result.fail("ç±»å转æ¢å¼å¸¸"); } /** æä»¶æªæ¾å°å¼å¸¸ */ @ExceptionHandler(FileNotFoundException.class) public Result<?> FileNotFoundException(FileNotFoundException e) { log.error(e.getMessage(), e.getCause()); return Result.fail("æä»¶æªæ¾å°å¼å¸¸"); } /** æ°åæ ¼å¼å¼å¸¸ */ @ExceptionHandler(NumberFormatException.class) public Result<?> NumberFormatException(NumberFormatException e) { log.error(e.getMessage(), e.getCause()); return Result.fail("æ°åæ ¼å¼å¼å¸¸"); } /** å®å ¨å¼å¸¸ */ @ExceptionHandler(SecurityException.class) public Result<?> SecurityException(SecurityException e) { log.error(e.getMessage(), e.getCause()); return Result.fail("å®å ¨å¼å¸¸"); } /** ç±»åä¸åå¨å¼å¸¸ */ @ExceptionHandler(TypeNotPresentException.class) public Result<?> TypeNotPresentException(TypeNotPresentException e) { log.error(e.getMessage(), e.getCause()); return Result.fail("ç±»åä¸åå¨å¼å¸¸"); } /** IOå¼å¸¸ */ @ExceptionHandler(IOException.class) public Result<?> iOExceptionHandler(IOException e) { log.error(e.getMessage(), e.getCause()); return Result.fail("IOå¼å¸¸"); } /** æªç¥æ¹æ³å¼å¸¸ */ @ExceptionHandler(NoSuchMethodException.class) public Result<?> noSuchMethodExceptionHandler(NoSuchMethodException e) { log.error(e.getMessage(), e.getCause()); return Result.fail("æªç¥æ¹æ³å¼å¸¸"); } /** æ°ç»è¶çå¼å¸¸ */ @ExceptionHandler(IndexOutOfBoundsException.class) public Result<?> indexOutOfBoundsExceptionHandler(IndexOutOfBoundsException e) { log.error(e.getMessage(), e.getCause()); return Result.fail("æ°ç»è¶çå¼å¸¸"); } /** sqlè¯æ³é误å¼å¸¸ */ @ExceptionHandler(BadSqlGrammarException.class) public Result<?> BadSqlGrammarException(BadSqlGrammarException e) { log.error(e.getMessage(), e.getCause()); return Result.fail("sqlè¯æ³é误å¼å¸¸"); } /** æ æ³æ³¨å ¥beanå¼å¸¸ */ @ExceptionHandler(NoSuchBeanDefinitionException.class) public Result<?> NoSuchBeanDefinitionException(NoSuchBeanDefinitionException e) { log.error(e.getMessage(), e.getCause()); return Result.fail("æ æ³æ³¨å ¥bean"); } /** Httpæ¶æ¯ä¸å¯è¯»å¼å¸¸ */ @ExceptionHandler({HttpMessageNotReadableException.class}) public Result<?> requestNotReadable(HttpMessageNotReadableException e) { log.error(e.getMessage(), e.getCause()); return Result.fail("Httpæ¶æ¯ä¸å¯è¯»"); } /** 400é误 */ @ExceptionHandler({TypeMismatchException.class}) public Result<?> requestTypeMismatch(TypeMismatchException e) { log.error(e.getMessage(), e.getCause()); return Result.fail("æå¡å¨å¼å¸¸"); } /** 500é误 */ @ExceptionHandler({ConversionNotSupportedException.class, HttpMessageNotWritableException.class}) public Result<?> server500(RuntimeException e) { log.error(e.getMessage(), e.getCause()); return Result.fail("æå¡å¨å¼å¸¸"); } /** æ æº¢åº */ @ExceptionHandler({StackOverflowError.class}) public Result<?> requestStackOverflow(StackOverflowError e) { log.error(e.getMessage(), e.getCause()); return Result.fail("æ æº¢åºå¼å¸¸"); } /** 餿°ä¸è½ä¸º0 */ @ExceptionHandler({ArithmeticException.class}) public Result<?> arithmeticException(ArithmeticException e) { log.error(e.getMessage(), e.getCause()); return Result.fail("餿°ä¸è½ä¸º0å¼å¸¸"); } /** å ¶ä»é误 */ @ExceptionHandler({Exception.class}) public Result<?> exception(Exception e) { log.error(e.getMessage(), e.getCause()); return Result.fail("ç½ç»è¿æ¥å¤±è´¥ï¼è¯·éåºååè¯"); } } framework/src/main/java/com/yuanchu/limslaboratory/handler/MyMetaObjectHandler.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,22 @@ package com.yuanchu.limslaboratory.handler; import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; import org.apache.ibatis.reflection.MetaObject; import org.springframework.stereotype.Component; import java.time.LocalDateTime; @Component public class MyMetaObjectHandler implements MetaObjectHandler { @Override public void insertFill(MetaObject metaObject) { this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now()); // èµ·å§çæ¬ 3.3.0(æ¨è使ç¨) this.strictInsertFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now()); // èµ·å§çæ¬ 3.3.0(æ¨è使ç¨) } @Override public void updateFill(MetaObject metaObject) { // updateçæ¶å使ç¨ï¼æ´æ°çæ¶å强å¶è¿è¡å¡«å this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now()); // èµ·å§çæ¬ 3.3.0(æ¨è) } } framework/src/main/java/com/yuanchu/limslaboratory/utils/FileSaveUtils.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,60 @@ package com.yuanchu.limslaboratory.utils; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.http.fileupload.IOUtils; import org.springframework.stereotype.Component; import java.io.ByteArrayInputStream; import java.io.FileOutputStream; import java.io.IOException; /** * ä¿åæä»¶å·¥å · */ @Slf4j @Component public class FileSaveUtils { // åymlä¸çè·¯å¾ + / // @Value("${file.path}") private String FILE_PATH; /** * å卿件䏻彿° * @param content æä»¶äºè¿å¶æµ * @param originalFilename æä»¶åç§° * @return è¿åæä»¶åç§°ç¨äºå卿°æ®åº */ public String StoreFile(byte[] content, String originalFilename) { // çæéæºåç§°ï¼æ¶é´_éæº6使°å String FileName = System.currentTimeMillis() + "_" + MyUtils.getNumber(6); String suffix = originalFilename.substring(originalFilename.lastIndexOf(".")); // åç§°æ¼æ¥ String fileName = FileName + suffix; // è¿è¡åå¨ storeFileWithFileName(content, fileName); return fileName; } /** * å卿件彿° * @param content æä»¶äºè¿å¶æµ * @param fileName æä»¶åç§° */ private void storeFileWithFileName(byte[] content, String fileName) { // åå¨è·¯å¾ String path = FILE_PATH + java.io.File.separatorChar; // ç®å½ä¸åå¨åå建 java.io.File file = new java.io.File(path); if (!file.exists()) { file.mkdirs(); } // å¼å§åå¨ try (FileOutputStream os = new FileOutputStream(path + fileName); ByteArrayInputStream is = new ByteArrayInputStream(content)) { IOUtils.copy(is, os); } catch (IOException e) { MyUtils.PrintLog("å卿件å¼å¸¸ï¼" + e); } } } framework/src/main/java/com/yuanchu/limslaboratory/utils/JackSonUtil.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,123 @@ package com.yuanchu.limslaboratory.utils; import com.fasterxml.jackson.core.JsonGenerationException; import com.fasterxml.jackson.core.JsonParseException; import com.fasterxml.jackson.databind.JsonMappingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectWriter; import org.springframework.stereotype.Component; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; /** * JSONè§£æå¤ç * * @author å¼ å®¾ */ @Component public class JackSonUtil { private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); private static final ObjectWriter OBJECT_WRITER = OBJECT_MAPPER.writerWithDefaultPrettyPrinter(); public static void marshal(File file, Object value) throws Exception { try { OBJECT_WRITER.writeValue(file, value); } catch (JsonGenerationException e) { throw new Exception(e); } catch (JsonMappingException e) { throw new Exception(e); } catch (IOException e) { throw new Exception(e); } } public static void marshal(OutputStream os, Object value) throws Exception { try { OBJECT_WRITER.writeValue(os, value); } catch (JsonGenerationException e) { throw new Exception(e); } catch (JsonMappingException e) { throw new Exception(e); } catch (IOException e) { throw new Exception(e); } } public static String marshal(Object value) throws Exception { try { return OBJECT_WRITER.writeValueAsString(value); } catch (JsonGenerationException e) { throw new Exception(e); } catch (JsonMappingException e) { throw new Exception(e); } catch (IOException e) { throw new Exception(e); } } public static byte[] marshalBytes(Object value) throws Exception { try { return OBJECT_WRITER.writeValueAsBytes(value); } catch (JsonGenerationException e) { throw new Exception(e); } catch (JsonMappingException e) { throw new Exception(e); } catch (IOException e) { throw new Exception(e); } } public static <T> T unmarshal(File file, Class<T> valueType) throws Exception { try { return OBJECT_MAPPER.readValue(file, valueType); } catch (JsonParseException e) { throw new Exception(e); } catch (JsonMappingException e) { throw new Exception(e); } catch (IOException e) { throw new Exception(e); } } public static <T> T unmarshal(InputStream is, Class<T> valueType) throws Exception { try { return OBJECT_MAPPER.readValue(is, valueType); } catch (JsonParseException e) { throw new Exception(e); } catch (JsonMappingException e) { throw new Exception(e); } catch (IOException e) { throw new Exception(e); } } public static <T> T unmarshal(String str, Class<T> valueType) throws Exception { try { return OBJECT_MAPPER.readValue(str, valueType); } catch (JsonParseException e) { throw new Exception(e); } catch (JsonMappingException e) { throw new Exception(e); } catch (IOException e) { throw new Exception(e); } } public static <T> T unmarshal(byte[] bytes, Class<T> valueType) throws Exception { try { if (bytes == null) { bytes = new byte[0]; } return OBJECT_MAPPER.readValue(bytes, 0, bytes.length, valueType); } catch (JsonParseException e) { throw new Exception(e); } catch (JsonMappingException e) { throw new Exception(e); } catch (IOException e) { throw new Exception(e); } } } framework/src/main/java/com/yuanchu/limslaboratory/utils/JwtUtils.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,37 @@ package com.yuanchu.limslaboratory.utils; import com.auth0.jwt.JWT; import com.auth0.jwt.algorithms.Algorithm; import com.auth0.jwt.exceptions.JWTCreationException; import java.util.Date; public class JwtUtils { // è¿ææ¶é´ 2 å°æ¶ // private static final long EXPIRE_TIME = 2 * 60 * 60 * 1000; private static final long EXPIRE_TIME = 10; /** * çæç¾å,åç¡®å°è¯´æ¯çætoken * @param secret * @return */ public static String sign(String account, String secret){ try{ Date date = new Date(System.currentTimeMillis() + EXPIRE_TIME); Algorithm algorithm = Algorithm.HMAC256(secret); //é带username,nicknameä¿¡æ¯ return JWT.create() .withClaim("account",account) .withExpiresAt(date) .sign(algorithm); } catch (JWTCreationException e){ e.printStackTrace(); return null; } catch (Exception e){ e.printStackTrace(); return null; } } } framework/src/main/java/com/yuanchu/limslaboratory/utils/MyUtils.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,65 @@ package com.yuanchu.limslaboratory.utils; import org.springframework.stereotype.Component; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Random; @Component public class MyUtils<T> { /** * èªå®ä¹è°è¯å·¥å ·ç±» * @return */ public static void PrintLog(String str){ // ç±»å String className = Thread.currentThread().getStackTrace()[2].getClassName(); // 彿°å String methodName = Thread.currentThread().getStackTrace()[2].getMethodName(); System.out.println("\033[1;94m" + className + "-->" + methodName + "-->" + str + "\033[0m"); } /** * æ¥æå·¥å ·ç±» * @return */ public static String MyDateFormat(){ //è·åæ¥æ //导 import java.util.Date; ä¸çå Date date = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm"); return sdf.format(date); } /** * è·åéæºå å¯ç * @param n 使° * @return è¿åéæºå å¯ç */ public static String getSalt(int n) { char[] chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz01234567890!@#$%^&*()+-=/[];~.".toCharArray(); StringBuilder sb = new StringBuilder(); for (int i = 0; i < n; i++) { char c = chars[new Random().nextInt(chars.length)]; sb.append(c); } return sb.toString(); } /** * è·åéæºå å¯ç * @param n 使° * @return è¿åéæºå¼ */ public static String getNumber(int n) { char[] chars = "1234567890".toCharArray(); StringBuilder sb = new StringBuilder(); for (int i = 0; i < n; i++) { char c = chars[new Random().nextInt(chars.length)]; sb.append(c); } return sb.toString(); } } framework/src/main/java/com/yuanchu/limslaboratory/utils/RedisUtil.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,622 @@ package com.yuanchu.limslaboratory.utils; import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.PropertyAccessor; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; import org.springframework.data.redis.serializer.StringRedisSerializer; import org.springframework.stereotype.Component; import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.Set; import java.util.concurrent.TimeUnit; @Component public class RedisUtil { private static RedisTemplate<String, Object> redisTemplate; public static RedisTemplate<String, Object> getRedisTemplate() { return redisTemplate; } @Autowired private RedisUtil(RedisConnectionFactory redisConnectionFactory){ // redisTemplate模æ¿åå§å redisTemplate = new RedisTemplate<>(); redisTemplate.setConnectionFactory(redisConnectionFactory); // å°å¯¹è±¡åºåå ObjectMapper om=new ObjectMapper(); om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); om.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY); // Stringçåºåå StringRedisSerializer stringRedisSerializer = new StringRedisSerializer(); // jsonåºååé ç½® Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer=new Jackson2JsonRedisSerializer<>(Object.class); jackson2JsonRedisSerializer.setObjectMapper(om); //keyéç¨Stringçåºååæ¹å¼ redisTemplate.setKeySerializer(stringRedisSerializer); //hashçkeyä¹éç¨String çåºååæ¹å¼ redisTemplate.setHashKeySerializer(stringRedisSerializer); //valueçåºååæ¹å¼éç¨jacksonçæ¹å¼ redisTemplate.setValueSerializer(jackson2JsonRedisSerializer); // //hashçvalueåºååæ¹å¼éç¨jackson redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer); redisTemplate.afterPropertiesSet(); } // =============================common============================ /** * æå®ç¼åå¤±ææ¶é´ * @param key é® * @param time æ¶é´(ç§) */ public static boolean expire(String key, long time) { try { if (time > 0) { redisTemplate.expire(key, time, TimeUnit.SECONDS); } return true; } catch (Exception e) { e.printStackTrace(); return false; } } /** * æ ¹æ®key è·åè¿ææ¶é´ * @param key é® ä¸è½ä¸ºnull * @return æ¶é´(ç§) è¿å0ä»£è¡¨ä¸ºæ°¸ä¹ ææ */ public static long getExpire(String key) { return redisTemplate.getExpire(key, TimeUnit.SECONDS); } /** * 夿keyæ¯å¦åå¨ * @param key é® * @return true åå¨ falseä¸åå¨ */ public static boolean hasKey(String key) { try { return redisTemplate.hasKey(key); } catch (Exception e) { e.printStackTrace(); return false; } } /** * å é¤ç¼å * @param key å¯ä»¥ä¼ ä¸ä¸ªå¼ æå¤ä¸ª */ // @SuppressWarnings("unchecked") public static void del(String... key) { if (key != null && key.length > 0) { if (key.length == 1) { redisTemplate.delete(key[0]); } else { redisTemplate.delete(Arrays.asList(key)); // redisTemplate.delete(CollectionUtils.arrayToList(key)); } } } /** * è·åå¹¶å é¤ç¼å * @param key é® * @return å¼ */ public static Object getAndDelete(String key) { try{ return key == null ? null : get(key); }finally { del(key); } } // ============================String============================= /** * æ®éç¼åè·å * @param key é® * @return å¼ */ public static Object get(String key) { return key == null ? null : redisTemplate.opsForValue().get(key); } /** * æ®éç¼åæ¾å ¥ * @param key é® * @param value å¼ * @return trueæå false失败 */ public static boolean set(String key, Object value) { try { redisTemplate.opsForValue().set(key, value); return true; } catch (Exception e) { e.printStackTrace(); return false; } } /** * æ®éç¼åæ¾å ¥å¹¶è®¾ç½®æ¶é´ * @param key é® * @param value å¼ * @param time æ¶é´(ç§) timeè¦å¤§äº0 妿timeå°äºçäº0 å°è®¾ç½®æ éæ * @return trueæå false 失败 */ public static boolean set(String key, Object value, long time) { try { if (time > 0) { redisTemplate.opsForValue().set(key, value, time, TimeUnit.MINUTES); } else { // åªä¿®æ¹åæ°ä¸ä¿®æ¹ttl redisTemplate.opsForValue().set(key, value, 0); } return true; } catch (Exception e) { e.printStackTrace(); return false; } } /** * éå¢ * @param key é® * @param delta è¦å¢å å (大äº0) */ public static long incr(String key, long delta) { if (delta < 0) { throw new RuntimeException("éå¢å åå¿ é¡»å¤§äº0"); } return redisTemplate.opsForValue().increment(key, delta); } /** * éå * @param key é® * @param delta è¦åå°å (å°äº0) */ public static long decr(String key, long delta) { if (delta < 0) { throw new RuntimeException("éåå åå¿ é¡»å¤§äº0"); } return redisTemplate.opsForValue().increment(key, -delta); } // ================================Map================================= /** * HashGet * @param key é® ä¸è½ä¸ºnull * @param item 项 ä¸è½ä¸ºnull */ public static Object hget(String key, String item) { return redisTemplate.opsForHash().get(key, item); } /** * è·åhashKey对åºçææé®å¼ * @param key é® * @return 对åºçå¤ä¸ªé®å¼ */ public static Map<Object, Object> hmget(String key) { return redisTemplate.opsForHash().entries(key); } /** * HashSet * @param key é® * @param map 对åºå¤ä¸ªé®å¼ */ public static boolean hmset(String key, Map<String, Object> map) { try { redisTemplate.opsForHash().putAll(key, map); return true; } catch (Exception e) { e.printStackTrace(); return false; } } /** * HashSet 并设置æ¶é´ * @param key é® * @param map 对åºå¤ä¸ªé®å¼ * @param time æ¶é´(ç§) * @return trueæå false失败 */ public static boolean hmset(String key, Map<String, Object> map, long time) { try { if (time > 0) { redisTemplate.opsForHash().putAll(key, map); expire(key, time); } return true; } catch (Exception e) { e.printStackTrace(); return false; } } /** * åä¸å¼ hashè¡¨ä¸æ¾å ¥æ°æ®,妿ä¸åå¨å°å建 * * @param key é® * @param item 项 * @param value å¼ * @return true æå false失败 */ public static boolean hset(String key, String item, Object value) { try { redisTemplate.opsForHash().put(key, item, value); return true; } catch (Exception e) { e.printStackTrace(); return false; } } /** * åä¸å¼ hashè¡¨ä¸æ¾å ¥æ°æ®,妿ä¸åå¨å°å建 * * @param key é® * @param item 项 * @param value å¼ * @param time æ¶é´(ç§) 注æ:妿已åå¨çhashè¡¨ææ¶é´,è¿éå°ä¼æ¿æ¢åæçæ¶é´ * @return true æå false失败 */ public static boolean hset(String key, String item, Object value, long time) { try { if (time > 0) { redisTemplate.opsForHash().put(key, item, value); expire(key, time); } return true; } catch (Exception e) { e.printStackTrace(); return false; } } /** * å é¤hash表ä¸çå¼ * * @param key é® ä¸è½ä¸ºnull * @param item 项 å¯ä»¥ä½¿å¤ä¸ª ä¸è½ä¸ºnull */ public static void hdel(String key, Object... item) { redisTemplate.opsForHash().delete(key, item); } /** * 夿hashè¡¨ä¸æ¯å¦æè¯¥é¡¹çå¼ * * @param key é® ä¸è½ä¸ºnull * @param item 项 ä¸è½ä¸ºnull * @return true åå¨ falseä¸åå¨ */ public static boolean hHasKey(String key, String item) { return redisTemplate.opsForHash().hasKey(key, item); } /** * hashéå¢ å¦æä¸åå¨,å°±ä¼å建ä¸ä¸ª å¹¶ææ°å¢åçå¼è¿å * * @param key é® * @param item 项 * @param by è¦å¢å å (大äº0) */ public static double hincr(String key, String item, double by) { return redisTemplate.opsForHash().increment(key, item, by); } /** * hashéå * * @param key é® * @param item 项 * @param by è¦åå°è®°(å°äº0) */ public static double hdecr(String key, String item, double by) { return redisTemplate.opsForHash().increment(key, item, -by); } // ============================set============================= /** * æ ¹æ®keyè·åSetä¸çææå¼ * @param key é® */ public static Set<Object> sGet(String key) { try { return redisTemplate.opsForSet().members(key); } catch (Exception e) { e.printStackTrace(); return null; } } /** * æ ¹æ®valueä»ä¸ä¸ªset䏿¥è¯¢,æ¯å¦åå¨ * * @param key é® * @param value å¼ * @return true åå¨ falseä¸åå¨ */ public static boolean sHasKey(String key, Object value) { try { return redisTemplate.opsForSet().isMember(key, value); } catch (Exception e) { e.printStackTrace(); return false; } } /** * å°æ°æ®æ¾å ¥setç¼å * * @param key é® * @param values å¼ å¯ä»¥æ¯å¤ä¸ª * @return æåä¸ªæ° */ public static long sSet(String key, Object... values) { try { return redisTemplate.opsForSet().add(key, values); } catch (Exception e) { e.printStackTrace(); return 0; } } /** * å°setæ°æ®æ¾å ¥ç¼å * * @param key é® * @param time æ¶é´(ç§) * @param values å¼ å¯ä»¥æ¯å¤ä¸ª * @return æåä¸ªæ° */ public static long sSetAndTime(String key, long time, Object... values) { try { Long count = (long)values.length; if (time > 0) { count = redisTemplate.opsForSet().add(key, values); expire(key, time); } return count; } catch (Exception e) { e.printStackTrace(); return 0; } } /** * è·åsetç¼åçé¿åº¦ * * @param key é® */ public static long sGetSetSize(String key) { try { return redisTemplate.opsForSet().size(key); } catch (Exception e) { e.printStackTrace(); return 0; } } /** * ç§»é¤å¼ä¸ºvalueç * * @param key é® * @param values å¼ å¯ä»¥æ¯å¤ä¸ª * @return ç§»é¤çä¸ªæ° */ public static long setRemove(String key, Object... values) { try { return redisTemplate.opsForSet().remove(key, values); } catch (Exception e) { e.printStackTrace(); return 0; } } // ===============================list================================= /** * è·ålistç¼åçå 容 * * @param key é® * @param start å¼å§ * @param end ç»æ 0 å° -1代表ææå¼ */ public static List<Object> lGet(String key, long start, long end) { try { return redisTemplate.opsForList().range(key, start, end); } catch (Exception e) { e.printStackTrace(); return null; } } /** * è·ålistç¼åçé¿åº¦ * * @param key é® */ public static long lGetListSize(String key) { try { return redisTemplate.opsForList().size(key); } catch (Exception e) { e.printStackTrace(); return 0; } } /** * éè¿ç´¢å¼ è·ålistä¸çå¼ * * @param key é® * @param index ç´¢å¼ index>=0æ¶ï¼ 0 表头ï¼1 第äºä¸ªå ç´ ï¼ä¾æ¬¡ç±»æ¨ï¼index<0æ¶ï¼-1ï¼è¡¨å°¾ï¼-2åæ°ç¬¬äºä¸ªå ç´ ï¼ä¾æ¬¡ç±»æ¨ */ public static Object lGetIndex(String key, long index) { try { return redisTemplate.opsForList().index(key, index); } catch (Exception e) { e.printStackTrace(); return null; } } /** * å°listæ¾å ¥ç¼å * * @param key é® * @param value å¼ */ public static boolean lSet(String key, Object value) { try { redisTemplate.opsForList().rightPush(key, value); return true; } catch (Exception e) { e.printStackTrace(); return false; } } /** * å°listæ¾å ¥ç¼å * @param key é® * @param value å¼ * @param time æ¶é´(ç§) */ public static boolean lSet(String key, Object value, long time) { try { if (time > 0) { redisTemplate.opsForList().rightPush(key, value); expire(key, time); } return true; } catch (Exception e) { e.printStackTrace(); return false; } } /** * å°listæ¾å ¥ç¼å * * @param key é® * @param value å¼ * @return true åæ¾æå falseåæ¾å¤±è´¥ */ public static boolean lSet(String key, List<Object> value) { try { redisTemplate.opsForList().rightPushAll(key, value); return true; } catch (Exception e) { e.printStackTrace(); return false; } } /** * å°listæ¾å ¥ç¼å * * @param key é® * @param value å¼ * @param time æ¶é´(ç§) * @return true åæ¾æå falseåæ¾å¤±è´¥ */ public static boolean lSet(String key, List<Object> value, long time) { try { if (time > 0) { redisTemplate.opsForList().rightPushAll(key, value); expire(key, time); } return true; } catch (Exception e) { e.printStackTrace(); return false; } } /** * æ ¹æ®ç´¢å¼ä¿®æ¹listä¸çææ¡æ°æ® * * @param key é® * @param index ç´¢å¼ * @param value å¼ * @return true åæ¾æå falseåæ¾å¤±è´¥ */ public static boolean lUpdateIndex(String key, long index, Object value) { try { redisTemplate.opsForList().set(key, index, value); return true; } catch (Exception e) { e.printStackTrace(); return false; } } /** * ç§»é¤N个å¼ä¸ºvalue * * @param key é® * @param count ç§»é¤å¤å°ä¸ª * @param value å¼ * @return ç§»é¤çä¸ªæ° */ public static long lRemove(String key, long count, Object value) { try { return redisTemplate.opsForList().remove(key, count, value); } catch (Exception e) { e.printStackTrace(); return 0; } } } framework/src/main/java/com/yuanchu/limslaboratory/utils/SpringUtils.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,51 @@ package com.yuanchu.limslaboratory.utils; import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.stereotype.Component; @Component public class SpringUtils implements ApplicationContextAware { private static ApplicationContext context; @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { context = applicationContext; } public static void set(ApplicationContext applicationContext) { context = applicationContext; } /** * éè¿åèç è·å * @param beanClass * @param <T> * @return */ public static <T> T getBean(Class<T> beanClass) { return context.getBean(beanClass); } /** * éè¿BeanNameè·å * @param beanName * @param <T> * @return */ public static <T> T getBean(String beanName) { return (T) context.getBean(beanName); } /** * éè¿beanNameååèç è·å * @param name * @param beanClass * @param <T> * @return */ public static <T> T getBean(String name, Class<T> beanClass) { return context.getBean(name, beanClass); } } framework/src/main/java/com/yuanchu/limslaboratory/vo/Result.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,53 @@ package com.yuanchu.limslaboratory.vo; import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @Data @NoArgsConstructor @AllArgsConstructor public class Result<T> { @ApiModelProperty(value = "ååºç ï¼200æåï¼201失败") private int code; @ApiModelProperty(value = "ååºæ¶æ¯") private String message; @ApiModelProperty(value = "ååºåæ°") private T data; public static <T> Result<T> success(){ return new Result<>(200, "success",null); } public static <T> Result<T> success(String message){ return new Result<>(200, message,null); } public static <T> Result<T> success(T data){ return new Result<>(200, "success",data); } public static <T> Result<T> success(String message, T data){ return new Result<>(200, message,data); } public static <T> Result<T> fail(){ return new Result<>(201, "fail", null); } public static <T> Result<T> fail(String message){ return new Result<>(201, message, null); } public static <T> Result<T> fail(Integer code){ return new Result<>(code, "fail", null); } public static <T> Result<T> fail(Integer code, String message){ return new Result<>(code, message, null); } } sys/src/main/java/com/yuanchu/limslaboratory/SysApplication.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,13 @@ package com.yuanchu.limslaboratory; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class SysApplication { public static void main(String[] args) { SpringApplication.run(SysApplication.class, args); } } sys/src/test/java/com/yuanchu/limslaboratory/CodeGenerator.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,129 @@ package com.yuanchu.limslaboratory; import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException; import com.baomidou.mybatisplus.core.toolkit.StringPool; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.generator.AutoGenerator; import com.baomidou.mybatisplus.generator.InjectionConfig; import com.baomidou.mybatisplus.generator.config.*; import com.baomidou.mybatisplus.generator.config.po.TableInfo; import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy; import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine; import java.util.ArrayList; import java.util.List; import java.util.Scanner; // æ¼ç¤ºä¾åï¼æ§è¡ main æ¹æ³æ§å¶å°è¾å ¥æ¨¡å表åå车èªå¨çæå¯¹åºé¡¹ç®ç®å½ä¸ public class CodeGenerator { public static String database_url = "jdbc:mysql://localhost:3306/lims_manage?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai"; public static String database_driver_name = "com.mysql.cj.jdbc.Driver"; public static String database_username = "root"; public static String database_password= "123456"; public static String author = "æ±èéµ·éç½ç»ç§ææéå ¬å¸"; public static String model_name = "/user-server"; // å¦æä¸ºåå¸å¼å¡«å模ååç§°ï¼å¦æä¸æ¯åå¸å¼ä¸ºç©ºå³å¯ public static String setParent = "com.yunchu.limslaboratory"; // å è·¯å¾ public static Boolean Override = true; // æ¯å¦è¦ç忥çæä»¶ï¼ public static void main(String[] args) { // 代ç çæå¨ AutoGenerator mpg = new AutoGenerator(); String projectPath = System.getProperty("user.dir"); System.out.println(projectPath+"==================="); GlobalConfig gc = new GlobalConfig() // å ¨å±é ç½® .setOutputDir(projectPath + model_name + "/src/main/java") // è¾åºè·¯å¾ .setAuthor(author) // ä½è 注é .setOpen(false) // æ¯å¦æå¼ .setSwagger2(true) //å®ä½å±æ§ Swagger2 注解 .setServiceName("%sService") // 设置serviceNameçåç§°å»å¤§åI .setFileOverride(Override);// æ¯å¦è¦çå·²çææä»¶ mpg.setGlobalConfig(gc); // æ°æ®æºé ç½® æ°æ®åºå è´¦å·å¯ç DataSourceConfig dsc = new DataSourceConfig() .setUrl(database_url) .setDriverName(database_driver_name) .setUsername(database_username) .setPassword(database_password); mpg.setDataSource(dsc); // å é ç½® PackageConfig pc = new PackageConfig() .setModuleName(null) .setParent(setParent) .setEntity("pojo");// å è·¯å¾ mpg.setPackageInfo(pc); // èªå®ä¹é ç½® InjectionConfig cfg = new InjectionConfig() { @Override public void initMap() { // to do nothing } }; // å¦ææ¨¡æ¿å¼ææ¯ freemarker String templatePath = "/templates/mapper.xml.ftl"; // å¦ææ¨¡æ¿å¼ææ¯ velocity // String templatePath = "/templates/mapper.xml.vm"; // èªå®ä¹è¾åºé ç½® List<FileOutConfig> focList = new ArrayList<>(); // èªå®ä¹é ç½®ä¼è¢«ä¼å è¾åº focList.add(new FileOutConfig(templatePath) { @Override public String outputFile(TableInfo tableInfo) { // èªå®ä¹è¾åºæä»¶å ï¼ å¦æä½ Entity 设置äºååç¼ãæ¤å¤æ³¨æ xml çåç§°ä¼è·çåçååï¼ return projectPath + model_name + "/src/main/resources/mapper/" + "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML; } }); cfg.setFileOutConfigList(focList); mpg.setCfg(cfg); // é ç½®æ¨¡æ¿ TemplateConfig templateConfig = new TemplateConfig() .setXml(null); mpg.setTemplate(templateConfig); // çç¥é ç½® StrategyConfig strategy = new StrategyConfig() .setNaming(NamingStrategy.underline_to_camel) .setColumnNaming(NamingStrategy.underline_to_camel) .setEntityLombokModel(true) .setRestControllerStyle(true) .setInclude(scanner("表åï¼å¤ä¸ªç©ºæ ¼åå²").split(" ")) .setControllerMappingHyphenStyle(true) .setTablePrefix("m_"); mpg.setStrategy(strategy); mpg.setTemplateEngine(new FreemarkerTemplateEngine()); //妿ä¸è°ç¨è¯¥æ¹æ³ãå°±ä¼ä½¿ç¨MyBatis-Plusé»è®¤çæä»¶çæè·¯å¾åå è·¯å¾çææä»¶ãä½å¯ä»¥ä½¿ç¨ä¸é¢çPackageConfigåä¸äºç®åçé ç½® mpg.execute(); } /** * <p> * è¯»åæ§å¶å°å 容 * </p> */ public static String scanner(String tip) { Scanner scanner = new Scanner(System.in); StringBuilder help = new StringBuilder(); help.append("请è¾å ¥" + tip + "ï¼"); System.out.println(help.toString()); if (scanner.hasNext()) { String ipt = scanner.next(); if (StringUtils.isNotBlank(ipt)) { return ipt; } } throw new MybatisPlusException("请è¾å ¥æ£ç¡®ç" + tip + "ï¼"); } } sys/src/test/java/com/yuanchu/limslaboratory/SysApplicationTests.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,16 @@ package com.yuanchu.limslaboratory; import com.yuanchu.limslaboratory.utils.MyUtils; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; @SpringBootTest class SysApplicationTests { @Test void contextLoads() { String number = MyUtils.getNumber(6); System.out.println(number); } } user-server/src/main/java/com/yuanchu/limslaboratory/clients/UserClient.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,19 @@ package com.yuanchu.limslaboratory.clients; import com.yuanchu.limslaboratory.vo.Result; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestParam; import java.util.Map; @FeignClient(value = "userservice", url = "localhost:6789") public interface UserClient { @PostMapping("/business/login") Result<?> BusynessUserLogin(@RequestBody Map<String, Object> mapData); @PostMapping("/business/code") Result<?> BusynessUserLoginToken(@RequestParam("code") String code); } user-server/src/main/java/com/yuanchu/limslaboratory/clients/UserLoginUtils.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,73 @@ package com.yuanchu.limslaboratory.clients; import com.yuanchu.limslaboratory.vo.Result; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.util.HashMap; import java.util.Map; @Component public class UserLoginUtils { @Resource private UserClient userClient; @Value("${login.userID}") private String LoginUserID; @Value("${login.secret}") private String LoginSecret; // public Result<Map<String, Object>> LoginExamine(User user){ // Map<String, Object> mapData = new HashMap<>(); // mapData.put("LoginUserID", LoginUserID); // mapData.put("LoginSecret", LoginSecret); // Result<?> code = userClient.BusynessUserLogin(mapData); // if (code.getCode() == 200){ // Result<?> result = userClient.BusynessUserLoginToken(code.getData().toString()); // if (result.getCode() == 200){ // Map data = (Map) result.getData(); // String token = data.get("token").toString(); // data.remove("token"); // user.setMap(data); // //åå ¥redis,äºä¸ªå°æ¶åå é¤ // RedisUtil.set(token, user, 2); // // å°ç¾åç JWT token è¿åç»å端 // HashMap<String, Object> map = new HashMap<>(); // String refresh = JwtUtils.sign(user.getAccount()); // map.put("token", token); // map.put("refresh", refresh); // RedisUtil.set(user.getAccount(), map, 168); // return Result.success(map); // } else { // return Result.fail(result.getMessage()); // } // } else { // return Result.fail(code.getMessage()); // } // } public Result<Map<String, Object>> LoginExamine(){ Map<String, Object> mapData = new HashMap<>(); mapData.put("LoginUserID", LoginUserID); mapData.put("LoginSecret", LoginSecret); Result<?> code = userClient.BusynessUserLogin(mapData); if (code.getCode() == 200){ Result<?> result = userClient.BusynessUserLoginToken(code.getData().toString()); if (result.getCode() == 200){ Map data = (Map) result.getData(); String token = data.get("token").toString(); data.remove("token"); // å°ç¾åç JWT token è¿åç»å端 HashMap<String, Object> map = new HashMap<>(); map.put("token", token); return Result.success(map); } else { return Result.fail(result.getMessage()); } } else { return Result.fail(code.getMessage()); } } } user-server/src/main/java/com/yuanchu/limslaboratory/config/FeignConfig.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,37 @@ package com.yuanchu.limslaboratory.config; import feign.Feign; import okhttp3.OkHttpClient; import org.springframework.boot.autoconfigure.AutoConfigureBefore; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.cloud.commons.httpclient.OkHttpClientFactory; import org.springframework.cloud.openfeign.EnableFeignClients; import org.springframework.cloud.openfeign.FeignAutoConfiguration; import org.springframework.cloud.openfeign.support.FeignHttpClientProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import java.util.concurrent.TimeUnit; @EnableFeignClients("com.yuanchu.limslaboratory.clients") // æ«æfeignæ¥å£æå¨å éè¦ @Configuration @ConditionalOnClass(Feign.class) @AutoConfigureBefore(FeignAutoConfiguration.class) public class FeignConfig { private OkHttpClient okHttpClient; //æ³¨å ¥okhttp @Bean public OkHttpClient okHttpClient(OkHttpClientFactory okHttpClientFactory, FeignHttpClientProperties httpClientProperties) { this.okHttpClient = okHttpClientFactory.createBuilder(httpClientProperties.isDisableSslValidation()).connectTimeout(httpClientProperties.getConnectionTimeout(),TimeUnit.SECONDS) .followRedirects(httpClientProperties.isFollowRedirects()) .build(); return this.okHttpClient; } } user-server/src/main/java/com/yuanchu/limslaboratory/controller/AdminController.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,70 @@ package com.yuanchu.limslaboratory.controller; import com.yuanchu.limslaboratory.clients.UserLoginUtils; import com.yuanchu.limslaboratory.pojo.Admin; import com.yuanchu.limslaboratory.service.AdminService; import com.yuanchu.limslaboratory.utils.SpringUtils; import com.yuanchu.limslaboratory.vo.Result; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.List; import java.util.Map; /** * <p> * å端æ§å¶å¨ * </p> * * @author æ±èéµ·éç½ç»ç§ææéå ¬å¸ * @since 2023-07-04 */ @Api(tags = "管çåæä½æ¥å£") @RestController @RequestMapping("/admin") public class AdminController { @Autowired private AdminService service; @ApiOperation("Postæ¥å£") @PostMapping("/post") public Result<Map<String, Object>> post(Admin admin) { UserLoginUtils bean = SpringUtils.getBean(UserLoginUtils.class); return bean.LoginExamine(); } @ApiOperation("å 餿¥å£") @ApiImplicitParams(value = { @ApiImplicitParam(name = "id", value = "éè¦å é¤çID", dataTypeClass = String.class, required = true) }) @PostMapping("/delete") public Result<?> delete(Integer id) { service.removeById(id); return Result.success("ç»å½æå"); } @ApiOperation("æ¥è¯¢æ¥å£") @GetMapping("/get") public Result<?> get() { List<Admin> list = service.list(); return Result.success(list); } @GetMapping("/æ´æ°æ¥å£") @ApiOperation("Crunchy") @ApiImplicitParams(value = { @ApiImplicitParam(name = "id", value = "éè¦çID", dataTypeClass = String.class, required = true) }) public Result<?> put(String id) { Admin systest2 = service.getById(id); systest2.setId(1); service.updateById(systest2); return Result.success(); } } user-server/src/main/java/com/yuanchu/limslaboratory/mapper/AdminMapper.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,16 @@ package com.yuanchu.limslaboratory.mapper; import com.yuanchu.limslaboratory.pojo.Admin; import com.baomidou.mybatisplus.core.mapper.BaseMapper; /** * <p> * Mapper æ¥å£ * </p> * * @author æ±èéµ·éç½ç»ç§ææéå ¬å¸ * @since 2023-07-04 */ public interface AdminMapper extends BaseMapper<Admin> { } user-server/src/main/java/com/yuanchu/limslaboratory/pojo/Admin.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,52 @@ package com.yuanchu.limslaboratory.pojo; import com.baomidou.mybatisplus.annotation.*; import java.time.LocalDateTime; import java.io.Serializable; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; /** * <p> * * </p> * * @author æ±èéµ·éç½ç»ç§ææéå ¬å¸ * @since 2023-07-04 */ @Data @EqualsAndHashCode(callSuper = false) @ApiModel(value="Admin对象", description="") public class Admin implements Serializable { private static final long serialVersionUID = 1L; @ApiModelProperty(value = "主é®ID", hidden = true) @TableId(value = "id", type = IdType.AUTO) private Integer id; @ApiModelProperty(value = "å建æ¶é´", hidden = true) @TableField(fill = FieldFill.INSERT) @JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone="GMT+8") // åå°ç»åç«¯åæ¶é´æ ¼å¼å private LocalDateTime createTime; @ApiModelProperty(value = "æ´æ°æ¶é´", hidden = true) @TableField(fill = FieldFill.INSERT_UPDATE, update = "now()") @JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone="GMT+8") // åå°ç»åç«¯åæ¶é´æ ¼å¼å private LocalDateTime updateTime; @TableLogic(value = "0", delval = "1") @ApiModelProperty(value = "é»è¾å é¤", hidden = true) private Integer isDelete; @ApiModelProperty(value = "ä¹è§é", hidden = true) // @Version private Integer version; } user-server/src/main/java/com/yuanchu/limslaboratory/service/AdminService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,16 @@ package com.yuanchu.limslaboratory.service; import com.yuanchu.limslaboratory.pojo.Admin; import com.baomidou.mybatisplus.extension.service.IService; /** * <p> * æå¡ç±» * </p> * * @author æ±èéµ·éç½ç»ç§ææéå ¬å¸ * @since 2023-07-04 */ public interface AdminService extends IService<Admin> { } user-server/src/main/java/com/yuanchu/limslaboratory/service/impl/AdminServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,20 @@ package com.yuanchu.limslaboratory.service.impl; import com.yuanchu.limslaboratory.pojo.Admin; import com.yuanchu.limslaboratory.mapper.AdminMapper; import com.yuanchu.limslaboratory.service.AdminService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service; /** * <p> * æå¡å®ç°ç±» * </p> * * @author æ±èéµ·éç½ç»ç§ææéå ¬å¸ * @since 2023-07-04 */ @Service public class AdminServiceImpl extends ServiceImpl<AdminMapper, Admin> implements AdminService { }