Commit d3497d84 authored by 徐俊's avatar 徐俊

init project code

parent 55f9cd12
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CompilerConfiguration">
<annotationProcessing>
<profile default="true" name="Default" enabled="true" />
<profile name="Maven default annotation processors profile" enabled="true">
<sourceOutputDir name="target/generated-sources/annotations" />
<sourceTestOutputDir name="target/generated-test-sources/test-annotations" />
<outputRelativeToContentRoot value="true" />
<module name="science-admin" />
<module name="science-base" />
</profile>
</annotationProcessing>
<bytecodeTargetLevel>
<module name="nm-health-science" target="1.8" />
</bytecodeTargetLevel>
</component>
<component name="JavacSettings">
<option name="ADDITIONAL_OPTIONS_OVERRIDE">
<module name="science-admin" options="-parameters" />
<module name="science-base" options="-parameters" />
</option>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Encoding">
<file url="file://$PROJECT_DIR$/science-admin/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/science-base/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/src/main/resources" charset="UTF-8" />
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="RemoteRepositoriesConfiguration">
<remote-repository>
<option name="id" value="central" />
<option name="name" value="central" />
<option name="url" value="http://123.56.23.53:8081/nexus/content/groups/public/" />
</remote-repository>
<remote-repository>
<option name="id" value="nexus" />
<option name="name" value="nexus" />
<option name="url" value="http://123.56.23.53:8081/nexus/content/groups/public/" />
</remote-repository>
<remote-repository>
<option name="id" value="public" />
<option name="name" value="public" />
<option name="url" value="https://maven.aliyun.com/repository/public" />
</remote-repository>
<remote-repository>
<option name="id" value="central" />
<option name="name" value="Maven Central repository" />
<option name="url" value="https://repo1.maven.org/maven2" />
</remote-repository>
<remote-repository>
<option name="id" value="jboss.community" />
<option name="name" value="JBoss Community repository" />
<option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" />
</remote-repository>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="MavenProjectsManager">
<option name="originalFiles">
<list>
<option value="$PROJECT_DIR$/pom.xml" />
</list>
</option>
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" project-jdk-name="1.8" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/out" />
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="Git" />
</component>
</project>
\ No newline at end of file
# 卫生科技项目管理系统
卫生科技项目说明:
环境
local:本地开发环境,端口8080
dev:测试环境,端口8080
prod:上线环境,端口8080
分支
develop:本地开发,测试环境
master:上线环境,只有发布线上环境才能推到master
测试环境:http://123.56.183.13:8082/docs.html
发布说明:
1、登录服务器
2、执行 ./restart-yyb.sh science-admin
3、查看日志 tail -200f /home/data/logs/science-admin.log
## 环境依赖
- 数据库 Mysql
- 运行依赖 JDK8+
- 编译依赖 MAVEN
- 插件依赖 Lombok
## API文档
采用Swagger注解方式编写web层接口文档,非生产环境中启动项目后,可以通过`http://${address}:${port}/docs.html`的方式进行访问。
swagger-ui基于2.6.0进行了部分改造,接口可在notes中使用数字编号来调整显示顺序。
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.yiboshi</groupId>
<artifactId>yn-health-science</artifactId>
<modules>
<module>science-admin</module>
<module>science-base</module>
</modules>
<version>1.0.0-SNAPSHOT</version>
<packaging>pom</packaging>
<description>卫生科技项目管理系统</description>
<parent>
<groupId>com.yiboshi</groupId>
<artifactId>arch</artifactId>
<version>1.0.10-SNAPSHOT</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!-- <dependency>-->
<!-- <groupId>org.springframework.cloud</groupId>-->
<!-- <artifactId>spring-cloud-starter-feign</artifactId>-->
<!-- </dependency>-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version> 1.2.70 </version>
</dependency>
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-annotations</artifactId>
<version>1.5.22</version>
</dependency>
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-models</artifactId>
<version>1.5.22</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>
<!-- <dependency>-->
<!-- <groupId>org.springframework.boot</groupId>-->
<!-- <artifactId>spring-boot-devtools</artifactId>-->
<!-- <scope>provided</scope>-->
<!-- </dependency>-->
<!--Spring boot Redis-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!--spring boot2.x以上版本需要引入,不然启动会报错!-->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.2.8</version>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.0</version>
</dependency>
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-core</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>javax.activation</groupId>
<artifactId>activation</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>org.lionsoul</groupId>
<artifactId>ip2region</artifactId>
<version>1.7.2</version>
</dependency>
<!-- 解析客户端操作系统、浏览器信息 -->
<dependency>
<groupId>eu.bitwalker</groupId>
<artifactId>UserAgentUtils</artifactId>
<version>1.21</version>
</dependency>
</dependencies>
<repositories>
<repository>
<id>central</id>
<url>https://maven.aliyun.com/repository/central/</url>
</repository>
<repository>
<id>public</id>
<url>https://maven.aliyun.com/repository/public</url>
</repository>
<repository>
<id>nexus</id>
<url>http://123.56.23.53:8081/nexus/content/groups/public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
</project>
This diff is collapsed.
package com.yiboshi.science;
import com.yiboshi.science.utils.HtmlBuilder;
import org.apache.http.client.HttpClient;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.config.Registry;
import org.apache.http.config.RegistryBuilder;
import org.apache.http.conn.socket.ConnectionSocketFactory;
import org.apache.http.conn.socket.PlainConnectionSocketFactory;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import org.springframework.util.ResourceUtils;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer;
@EnableTransactionManagement
@MapperScan("com.yiboshi.science.dao")
@SpringBootApplication(scanBasePackages = "com.yiboshi")
public class ScienceAdminApplication {
@Bean
public HtmlBuilder htmlBuilder(FreeMarkerConfigurer freeMarkerConfigurer){
return new HtmlBuilder(freeMarkerConfigurer);
}
public static void main(String[] args) {
ConfigurableApplicationContext run = SpringApplication.run(ScienceAdminApplication.class, args);
}
@Bean
public WebMvcConfigurer corsConfigurer() {
return new WebMvcConfigurer() {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**").allowedOrigins("*").allowedMethods("*").allowCredentials(true);
}
};
}
// @Bean
// public SpringContextHolder springContextContainer() {
// return new SpringContextHolder();
// }
private static void openLocalApiDocs(ConfigurableEnvironment environment) {
try {
if ("local".equals(environment.getActiveProfiles()[0])) {
// 注意:不要使用IE作为默认浏览器
String command = String.format("cmd /c start http://localhost:%s/docs.html", environment.getProperty("server.port"));
System.out.println(command);
Runtime.getRuntime().exec(command);
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
@Bean
public MybatisPaginationInterceptor paginationInterceptor() {
return new MybatisPaginationInterceptor();
}
//
// @Bean
// public RestTemplate restTemplate() {
// return new RestTemplate(httpRequestFactory());
// }
//
// @Bean
// public ClientHttpRequestFactory httpRequestFactory() {
// return new HttpComponentsClientHttpRequestFactory(httpClient());
// }
@Bean
public HttpClient httpClient() {
Registry<ConnectionSocketFactory> registry = RegistryBuilder.<ConnectionSocketFactory>create()
.register("http", PlainConnectionSocketFactory.getSocketFactory())
.register("https", SSLConnectionSocketFactory.getSocketFactory())
.build();
PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager(registry);
// 设置每个路由基础的连接
cm.setDefaultMaxPerRoute(800);
//设置最大连接数
cm.setMaxTotal(1000);
RequestConfig requestConfig = RequestConfig.custom()
//服务器返回数据(response)的时间,超过该时间抛出read timeout
.setSocketTimeout(10000)
//连接上服务器(握手成功)的时间,超出该时间抛出connect timeout
.setConnectTimeout(5000)
//从连接池中获取连接的超时时间,超过该时间未拿到可用连接,会抛出org.apache.http.conn.ConnectionPoolTimeoutException: Timeout waiting for connection from pool
.setConnectionRequestTimeout(1000)
.build();
return HttpClientBuilder.create()
.setDefaultRequestConfig(requestConfig)
.setConnectionManager(cm)
.build();
}
}
package com.yiboshi.science.api;
import com.alibaba.fastjson.JSON;
import com.yiboshi.arch.exception.BusinessException;
import com.yiboshi.science.param.dto.SMSParameterDTO;
import com.yiboshi.science.param.dto.SMSResponseDTO;
import com.yiboshi.science.param.dto.UserMenuDTO;
import com.yiboshi.science.service.LogsExceptionService;
import com.yiboshi.science.service.SystemSetService;
import com.yiboshi.science.utils.SystemSetKey;
import com.yiboshi.yac.model.OrgInfo;
import com.yiboshi.yac.model.dto.RoleDTO;
import com.yiboshi.yac.model.dto.UserDTO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpMethod;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.Objects;
@Component
@Slf4j
public class ApiHttpRequest {
@Autowired
private RestTemplateService restTemplateService;
@Autowired
private SystemSetService systemSetService;
@Autowired
private LogsExceptionService logsExceptionService;
public ApiHttpRequest(RestTemplateService restTemplateService) {
this.restTemplateService = restTemplateService;
}
public UserDTO remoteUserInfo() {
String url = systemSetService.getByKey(SystemSetKey.AuthorityUrl) + "/v1/user/getUser";
UserDTO dto = JSON.parseObject(JSON.toJSONString(restTemplateService.exchange(url, HttpMethod.GET, null, null)), UserDTO.class);
return dto;
}
public List<UserMenuDTO> remoteMenuList() {
String url = systemSetService.getByKey(SystemSetKey.AuthorityUrl) + "/v1/function/queryByCurrentUserId/23";
List<UserMenuDTO> list = JSON.parseArray(JSON.toJSONString(restTemplateService.exchange(url, HttpMethod.GET, null, null)), UserMenuDTO.class);
return list;
}
public OrgInfo remoteUnitInfo() {
String url = systemSetService.getByKey(SystemSetKey.AuthorityUrl) + "/v1/user/queryLoginInfo";
OrgInfo dto = JSON.parseObject(JSON.toJSONString(restTemplateService.exchange(url, HttpMethod.GET, null, null)), OrgInfo.class);
return dto;
}
public OrgInfo remoteParentUnit(String id) {
String url = systemSetService.getByKey(SystemSetKey.AuthorityUrl) + "/v1/orgInfo/queryById?id=" + id;
OrgInfo dto = JSON.parseObject(JSON.toJSONString(restTemplateService.exchange(url, HttpMethod.GET, null, null)), OrgInfo.class);
return dto;
}
public RoleDTO remoteRoleInfo() {
String url = systemSetService.getByKey(SystemSetKey.AuthorityUrl) + "/resource/userRole/queryCurrentUser";
List<RoleDTO> list = JSON.parseArray(JSON.toJSONString(restTemplateService.exchange(url, HttpMethod.GET, null, null)), RoleDTO.class);
return list.stream().findFirst().get();
}
public boolean SMSSending(SMSParameterDTO sms) {
try {
String url = systemSetService.getByKey(SystemSetKey.SMSApiUrl) + "/api-public/v2/sms/send";
String smsSrg = JSON.toJSONString(sms);
// result = "{\"code\":0,\"success\":true,\"mobile\":\"151****5936\",\"key\":\"mobileCode:151****5936_42_4\"}";
SMSResponseDTO obj = JSON.parseObject(restTemplateService.exchange(url, HttpMethod.POST, smsSrg, null), SMSResponseDTO.class);
if (null != obj) {
if (Objects.nonNull(obj.getCode()) && obj.getCode().equals(0))
return true;
else
return false;
}
return false;
} catch (Exception e) {
String smsSrg = JSON.toJSONString(sms);
logsExceptionService.logs(null, new RuntimeException("短信发送接口调用接口失败,参数:" + smsSrg), "短信发送失败!");
return false;
}
}
public boolean SMSCheck(String mobile, String code) {
try {
SMSResponseDTO smsDto;
String para = "key=mobileCode:" + mobile + "_42_4&code=" + code;
String url = systemSetService.getByKey(SystemSetKey.SMSApiUrl) + "/api-public/v2/sms/code/check?" + para;
smsDto = JSON.parseObject(restTemplateService.exchange(url, HttpMethod.GET, null, null), SMSResponseDTO.class);
if (null != smsDto) {
if (Objects.nonNull(smsDto.getSuccess()) && smsDto.getSuccess())
return true;
}
return false;
} catch (Exception e) {
String para = "key=mobileCode:" + mobile + "_42_4&code=" + code;
logsExceptionService.logs(null, new RuntimeException("短信验证码查询接口调用接口失败,参数:" + para), "短信验证码查询失败!");
return false;
}
}
}
package com.yiboshi.science.api;
import com.alibaba.fastjson.JSON;
import com.yiboshi.arch.exception.BusinessException;
import com.yiboshi.science.config.security.SecurityUserHolder;
import com.yiboshi.science.service.LogsExceptionService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.*;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
import java.util.Map;
@Service("RestTemplateService")
@Slf4j
public class RestTemplateService<T> {
@Autowired
private RestTemplate restTemplate;
@Autowired
private LogsExceptionService logsExceptionService;
/**
* get请求
*
* @param url 请求路径
* @return
*/
public String getForObject(String url) {
String message = restTemplate.getForObject(url, String.class);
return message;
}
/**
* get请求(map传参)
*
* @param url 请求路劲
* @return
*/
public String getForObject(String url, Map params) {
String message = restTemplate.getForObject(url, String.class, params);
return message;
}
/**
* post请求
*
* @param url 请求路劲
* @return
*/
public String postForObject(String url) {
HttpHeaders headers = new HttpHeaders();
MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8");
headers.setContentType(type);
headers.add("Authorization", "Bearer " + SecurityUserHolder.getToken());
ResponseEntity<String> message = restTemplate.postForEntity(url, new HttpEntity<String>(null, headers), String.class);
return message.getBody();
}
/**
* post请求(map传参)
*
* @param url 请求路劲
* @return
*/
public String postForObject(String url, Map params) {
HttpHeaders headers = new HttpHeaders();
MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8");
headers.setContentType(type);
headers.add("Authorization", "Bearer " + SecurityUserHolder.getToken());
ResponseEntity<String> message = restTemplate.postForEntity(url, new HttpEntity<String>(null, headers), String.class, params);
return message.getBody();
// headers.add("Accept", MediaType.APPLICATION_JSON.toString());
// headers.add("Authorization", "Bearer " + JwtTokenUtil.getToken());
}
public String exchange(String url, HttpMethod method, String entityJson, Map<String, String> headersMap) {
ResponseEntity<String> result;
HttpHeaders headers = new HttpHeaders();
MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8");
headers.setContentType(type);
if (null != headersMap) {
for (Map.Entry<String, String> entry : headersMap.entrySet()) {
headers.add(entry.getKey(), entry.getValue());
}
}
try {
result = restTemplate.exchange(url, method, new HttpEntity<>(entityJson, headers), String.class);
return result.getBody();
} catch (Exception e) {
logsExceptionService.logs(null, new RuntimeException("调用接口失败,url:" + url + ",参数:" + entityJson), "调用接口失败");
return null;
}
}
}
package com.yiboshi.science.config.annotation;
import java.lang.annotation.*;
/**
* @Auther: kylin
* @Date: 2022/7/12 10:23
* @Description:
*/
@Inherited
@Documented
@Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface Anonymous {
}
package com.yiboshi.science.config.annotation;
/**
* 系统日志
*/
import com.yiboshi.science.enumeration.CommonEnum;
import java.lang.annotation.*;
/**
* 自定义注解类
*/
@Target(ElementType.METHOD) //注解放置的目标位置,METHOD是可注解在方法级别上
@Retention(RetentionPolicy.RUNTIME) //注解在哪个阶段执行
@Documented //生成文档
public @interface Logs {
CommonEnum.logType value() default CommonEnum.logType.nullValue;
}
package com.yiboshi.science.config.aspect;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.yiboshi.science.config.annotation.Logs;
import com.yiboshi.science.config.security.SecurityUserHolder;
import com.yiboshi.science.entity.LogsLogin;
import com.yiboshi.science.entity.LogsOperation;
import com.yiboshi.science.enumeration.CommonEnum;
import com.yiboshi.science.service.LogsExceptionService;
import com.yiboshi.science.service.LogsLoginService;
import com.yiboshi.science.service.LogsOperationService;
import com.yiboshi.science.utils.CustomerIPAddress;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.authentication.AnonymousAuthenticationToken;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder;
import javax.servlet.http.HttpServletRequest;
import java.lang.reflect.Method;
import java.util.Date;
/**
* class: 系统日志切面
* create by: dracula$
* description:
* create time: 2021-09-14$
*
* @param: $
*/
@Aspect
@Component
public class LogAspect {
@Autowired
private LogsLoginService logsLoginService;
@Autowired
private LogsOperationService logsOperationService;
@Autowired
private LogsExceptionService logsExceptionService;
//定义切点 @Pointcut
//在注解的位置切入代码
@Pointcut("@annotation(com.yiboshi.science.config.annotation.Logs)")
public void logPointCut() {
}
//切面 配置通知
@AfterReturning("logPointCut()")
public void saveSysLog(JoinPoint joinPoint) {
//从切面织入点处通过反射机制获取织入点处的方法
MethodSignature signature = (MethodSignature) joinPoint.getSignature();
//获取切入点所在的方法
Method method = signature.getMethod();
RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
//从获取RequestAttributes中获取HttpServletRequest的信息
HttpServletRequest request = (HttpServletRequest) requestAttributes.resolveReference(RequestAttributes.REFERENCE_REQUEST);
// //获取请求的类名
// String className = joinPoint.getTarget().getClass().getName();
// //获取请求的方法名
// String methodName = method.getName();
// //类名方法名
// methodName = className + "." + methodName;
//请求的参数
Object[] args = joinPoint.getArgs();
//将参数所在的数组转换成json
String params = JSON.toJSONString(args[0]);
String logParams = "参数:{" + params + "}";
Logs logs = method.getAnnotation(Logs.class);
if (logs != null) {
CommonEnum.logType logType = logs.value();
String userId = null;
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
if (authentication != null && authentication.isAuthenticated() && !(authentication instanceof AnonymousAuthenticationToken)) {
userId = SecurityUserHolder.getPersonId();
}
createOperationLog(request, userId, logType, logParams);
}
}
/**
* 创建操作日志
*
* @param request
* @return
*/
private void createOperationLog(HttpServletRequest request, String userId, CommonEnum.logType logType, String logParams) {
LogsOperation log = new LogsOperation();
log.setBrowser("");
log.setCustomerId(userId);
log.setIpAddress(CustomerIPAddress.getIPAddress(request));
log.setLogParam(logParams);
log.setLogKey(logType.getKey());
log.setRequestUrl(request.getRequestURI());
logsOperationService.insert(log);
}
}
package com.yiboshi.science.config.bean;
import com.yiboshi.science.config.verification.VerificationCodeProperties;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class ConfigBeanConfiguration {
@Bean
@ConfigurationProperties(prefix = "system", ignoreUnknownFields = true)
public SystemProperties systemProperties() { return new SystemProperties();}
@Bean
@ConfigurationProperties(prefix = "verification", ignoreUnknownFields = true)
public VerificationCodeProperties verificationCodeProperties() { return new VerificationCodeProperties();}
}
package com.yiboshi.science.config.bean;
import lombok.Data;
@Data
public class SystemProperties {
private String topCode;
private int defaultCodeLength;
private int systemId;
private String systemName;
}
\ No newline at end of file
package com.yiboshi.science.config.exception;
public class BadConfigurationException extends RuntimeException {
public BadConfigurationException() {
super();
}
public BadConfigurationException(String message) {
super(message);
}
public BadConfigurationException(String message, Throwable cause) {
super(message, cause);
}
public BadConfigurationException(Throwable cause) {
super(cause);
}
protected BadConfigurationException(String message, Throwable cause, boolean enableSuppression,boolean writableStackTrace) {
super(message, cause, enableSuppression, writableStackTrace);
}
}
package com.yiboshi.science.config.exception;
import com.alibaba.fastjson.JSON;
import com.yiboshi.arch.base.ResponseCode;
import com.yiboshi.arch.base.ResponseDataModel;
import com.yiboshi.arch.exception.BusinessException;
import com.yiboshi.science.config.security.SecurityUserHolder;
import com.yiboshi.science.entity.LogsException;
import com.yiboshi.science.service.LogsExceptionService;
import com.yiboshi.science.utils.CustomerIPAddress;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.AccessDeniedException;
import org.springframework.security.authentication.AnonymousAuthenticationToken;
import org.springframework.security.authentication.BadCredentialsException;
import org.springframework.security.authentication.DisabledException;
import org.springframework.security.authentication.InternalAuthenticationServiceException;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.security.oauth2.common.exceptions.InvalidGrantException;
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 org.springframework.web.method.HandlerMethod;
import javax.servlet.http.HttpServletRequest;
import java.lang.reflect.ParameterizedType;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
/**
* class: GlobalExceptionHandler(全局异常处理)
* create by: dracula$
* description:
* create time: 2021-09-13$
*
* @param: $
*/
@ControllerAdvice
public class GlobalExceptionHandler {
@Autowired
private LogsExceptionService logsExceptionService;
/**
* 全局未知异常处理
*
* @param request
* @param handlerMethod
* @param exception
* @return
*/
@ExceptionHandler(Exception.class)
@ResponseBody
public ResponseDataModel handleException(HttpServletRequest request, HandlerMethod handlerMethod, Exception exception) {//HttpServletResponse response,
return AllExceptionHandler(request, handlerMethod, exception);
}
/**
* BadCredentialsException
*/
@ExceptionHandler(BadCredentialsException.class)
public ResponseDataModel badCredentialsException(HttpServletRequest request, HandlerMethod handlerMethod, Exception e) {
// 打印堆栈信息
String message = "坏的凭证".equals(e.getMessage()) ? "用户名或密码不正确" : e.getMessage();
return AllExceptionHandler(request, handlerMethod, e);
}
/**
* 处理所有业务异常
*
* @param exception
* @return
*/
@ExceptionHandler(BusinessException.class)
@ResponseBody
public ResponseDataModel handleBusinessException(HttpServletRequest request, HandlerMethod handlerMethod, BusinessException exception) {
return AllExceptionHandler(request, handlerMethod, exception);
}
/**
* 处理所有接口数据验证异常
*
* @param exception
* @return
*/
@ExceptionHandler(MethodArgumentNotValidException.class)
@ResponseBody
public ResponseDataModel handleMethodArgumentNotValidException(HttpServletRequest request, HandlerMethod handlerMethod, MethodArgumentNotValidException exception) {
return AllExceptionHandler(request, handlerMethod, exception);
}
/**
* 异常分类处理
*
* @param request
* @param handlerMethod
* @param exception
* @return
*/
private ResponseDataModel AllExceptionHandler(HttpServletRequest request, HandlerMethod handlerMethod, Exception exception) {
String msg;
ResponseCode responseCode=ResponseCode.BUSSINESS_EXCEPTION;
if (exception instanceof BusinessException) {
msg = exception.getMessage();
} else if (exception instanceof BadCredentialsException) {
msg = "用户名或密码不正确";
} else if (exception instanceof InvalidGrantException) {
msg = "用户名或密码不正确";
} else if (exception instanceof UsernameNotFoundException) {
msg = "用户名或密码不正确";
} else if (exception instanceof InternalAuthenticationServiceException) {
msg = "账户不存在或已注销!";
} else if (exception instanceof DisabledException) {
msg = "账户不存在或已注销!";
} else if (exception instanceof AccessDeniedException) {
msg = "无权限访问";
} else if (exception instanceof MethodArgumentNotValidException) {
msg = "接口数据验证异常";
responseCode=ResponseCode.PARAMETER_EXCEPTION;
logsExceptionService.logs(handlerMethod,exception,"接口数据验证异常");
} else{
msg = exception.getMessage();
responseCode=ResponseCode.SERVER_ERROR;
logsExceptionService.logs(handlerMethod,exception,"500 Internal Server Error!");
}
return new ResponseDataModel(responseCode, msg);
}
/**
* 区分业务类和方法
*
* @param request
* @param handlerMethod
* @return
* @throws Exception
*/
private String decisionShortTitle(HttpServletRequest request, HandlerMethod handlerMethod) {
String className = handlerMethod.getMethod().getDeclaringClass().getName();
String MethodType = request.getMethod();
String MethodName = handlerMethod.getMethod().getName();
return className + ":" + MethodName + ":" + MethodType;
}
}
package com.yiboshi.science.config.resttemplate;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.ClientHttpRequestFactory;
import org.springframework.http.client.SimpleClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;
@Configuration
public class RestTemplateConfig {
@Bean
public RestTemplate restTemplate(){
return new RestTemplate(simpleClientHttpRequestFactory());
}
@Bean
public ClientHttpRequestFactory simpleClientHttpRequestFactory(){
SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
factory.setReadTimeout(5000);//单位为ms
factory.setConnectTimeout(5000);//单位为ms
return factory;
}
}
package com.yiboshi.science.config.security;
import com.alibaba.fastjson.JSONObject;
import com.yiboshi.arch.base.ResponseCode;
import com.yiboshi.arch.base.ResponseDataModel;
import org.springframework.http.HttpStatus;
import org.springframework.security.core.AuthenticationException;
import org.springframework.security.oauth2.common.exceptions.InvalidTokenException;
import org.springframework.security.web.AuthenticationEntryPoint;
import org.springframework.stereotype.Component;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@Component
public class AuthExceptionEntryPointHandler implements AuthenticationEntryPoint {
@Override
public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException authException) throws IOException, ServletException {
Throwable cause = authException.getCause();
response.setStatus(HttpStatus.OK.value());
response.setHeader("Content-Type", "application/json;charset=UTF-8");
try {
if(cause instanceof InvalidTokenException) {
response.getWriter().write(JSONObject.toJSONString(new ResponseDataModel(ResponseCode.TOKEN_EXPIRATION.code(), "登录过期,TOKEN已失效","")));
}else{
response.getWriter().write(JSONObject.toJSONString(new ResponseDataModel(ResponseCode.PARAMETER_EXCEPTION.code(), "访问此资源需要完全的身份验证","")));
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
\ No newline at end of file
package com.yiboshi.science.config.security;
import com.yiboshi.science.service.SystemSetService;
import com.yiboshi.science.utils.SystemSetKey;
import org.springframework.security.oauth2.common.util.OAuth2Utils;
import org.springframework.security.oauth2.provider.OAuth2Authentication;
import org.springframework.security.oauth2.provider.OAuth2Request;
import org.springframework.security.oauth2.provider.token.DefaultAuthenticationKeyGenerator;
import java.util.*;
/**
* @Auther: kylin
* @Date: 2022/7/21 14:31
* @Description: 重写token生成规则
*/
public class AuthenticationKeyGenerator extends DefaultAuthenticationKeyGenerator {
private static final String CLIENT_ID = "client_id";
private static final String SCOPE = "scope";
private static final String USERNAME = "username";
private static final String DEVICE_ID = "device_id";
private SystemSetService systemSetService;
public AuthenticationKeyGenerator(SystemSetService systemSetService) {
this.systemSetService = systemSetService;
}
@Override
public String extractKey(OAuth2Authentication authentication) {
Map<String, String> values = new LinkedHashMap<String, String>();
OAuth2Request authorizationRequest = authentication.getOAuth2Request();
if (!authentication.isClientOnly()) {
values.put(USERNAME, authentication.getName());
}
values.put(CLIENT_ID, authorizationRequest.getClientId());
if (authorizationRequest.getScope() != null) {
values.put(SCOPE, OAuth2Utils.formatParameterList(new TreeSet<String>(authorizationRequest.getScope())));
}
// 1允许同时登录一个账户 2 不允许同时登录有个账户
String LoginType = systemSetService.getByKey(SystemSetKey.LoginType);
if (LoginType.equals("1")) {
String deviceId = authorizationRequest.getRequestParameters().get(DEVICE_ID);
values.put("DEVICE_ID", Objects.nonNull(deviceId) ? deviceId : UUID.randomUUID().toString());
}
return generateKey(values);
}
}
\ No newline at end of file
package com.yiboshi.science.config.security;
import com.alibaba.fastjson.JSONObject;
import com.yiboshi.arch.base.ResponseCode;
import com.yiboshi.arch.base.ResponseDataModel;
import org.springframework.http.HttpStatus;
import org.springframework.security.access.AccessDeniedException;
import org.springframework.security.web.access.AccessDeniedHandler;
import org.springframework.stereotype.Component;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@Component
public class AuthorizationAccessDeniedHandler implements AccessDeniedHandler {
@Override
public void handle(HttpServletRequest request, HttpServletResponse response, AccessDeniedException accessDeniedException) throws IOException, ServletException {
response.setStatus(HttpStatus.OK.value());
response.setHeader("Content-Type", "application/json;charset=UTF-8");
try {
response.getWriter().write(JSONObject.toJSONString(new ResponseDataModel(ResponseCode.SERVER_ERROR.code(),"权限认证失败","")));
} catch (IOException e) {
e.printStackTrace();
}
}
}
\ No newline at end of file
package com.yiboshi.science.config.security;
import com.yiboshi.science.service.SystemSetService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.oauth2.config.annotation.configurers.ClientDetailsServiceConfigurer;
import org.springframework.security.oauth2.config.annotation.web.configuration.AuthorizationServerConfigurerAdapter;
import org.springframework.security.oauth2.config.annotation.web.configuration.EnableAuthorizationServer;
import org.springframework.security.oauth2.config.annotation.web.configurers.AuthorizationServerEndpointsConfigurer;
import org.springframework.security.oauth2.config.annotation.web.configurers.AuthorizationServerSecurityConfigurer;
import org.springframework.security.oauth2.provider.ClientDetailsService;
import org.springframework.security.oauth2.provider.client.ClientCredentialsTokenEndpointFilter;
import org.springframework.security.oauth2.provider.token.TokenStore;
import javax.sql.DataSource;
/**
* @author qyh
*/
@Configuration
@EnableAuthorizationServer
public class AuthorizationServerConfig extends AuthorizationServerConfigurerAdapter {
@Autowired
private DataSource dataSource;
@Autowired
private AuthenticationManager authenticationManager;
@Autowired
private TokenStore tokenStore;
@Autowired
private UserDetailsService userDetailsService;
private ClientDetailsService clientDetailsService;
@Autowired
private SystemSetService systemSetService;
public AuthorizationServerConfig(ClientDetailsService clientDetailsService) {
this.clientDetailsService = clientDetailsService;
}
@Override
public void configure(AuthorizationServerSecurityConfigurer security) throws Exception {
security.tokenKeyAccess("permitAll()")
.checkTokenAccess("isAuthenticated()");
}
@Override
public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
// clients.inMemory()
// .withClient("srp")
// .secret(new BCryptPasswordEncoder().encode("user123"))
// .authorizedGrantTypes("password", "refresh_token") //主要是这里,开始了密码模式
// .refreshTokenValiditySeconds(2592000)
// .accessTokenValiditySeconds(86400)
// .scopes("all");
clients.jdbc(dataSource);
}
@Override
public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
endpoints.tokenStore(tokenStore);
// 密码模式必须要配置这个
endpoints.authenticationManager(authenticationManager);
endpoints.userDetailsService(userDetailsService);
endpoints.tokenServices(tokenServices());
}
public AuthorizationTokenService tokenServices() {
//DefaultTokenServices services = new DefaultTokenServices();
//新建一个TokenService继承并重写DefaultTokenServices中的方法,保证每次登录都会删除原来的token,达到一个账户不允许多端登录的效果
AuthorizationTokenService services = new AuthorizationTokenService(systemSetService);
//设置令牌2个小时过期,单位:秒
// services.setAccessTokenValiditySeconds(accessTokenValidity == null ? 60 * 60 * 2 : accessTokenValidity);
//设置刷新token的过期时间,单位:秒
// services.setRefreshTokenValiditySeconds(refreshTokenValidity == null ? 60 * 60 * 24 * 30 : refreshTokenValidity);
services.setSupportRefreshToken(true);
services.setReuseRefreshToken(false);
services.setTokenStore(tokenStore);
services.setClientDetailsService(clientDetailsService);
// services.setTokenEnhancer(accessTokenEnhancer);
return services;
}
}
package com.yiboshi.science.config.security;
import com.yiboshi.science.service.SystemSetService;
import com.yiboshi.science.utils.SystemSetKey;
import lombok.AllArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.AuthenticationException;
import org.springframework.security.oauth2.common.*;
import org.springframework.security.oauth2.provider.OAuth2Authentication;
import org.springframework.security.oauth2.provider.token.DefaultTokenServices;
import org.springframework.security.oauth2.provider.token.TokenEnhancer;
import org.springframework.security.oauth2.provider.token.TokenStore;
import org.springframework.transaction.annotation.Transactional;
import java.util.Date;
import java.util.UUID;
/**
* @Auther: kylin
* @Date: 2022/7/22 09:31
* @Description:
*/
@AllArgsConstructor
public class AuthorizationTokenService extends DefaultTokenServices {
private TokenEnhancer accessTokenEnhancer;
@Autowired
private TokenStore tokenStore;
private SystemSetService systemSetService;
public AuthorizationTokenService(SystemSetService systemSetService) {
this.systemSetService = systemSetService;
}
@Transactional
@Override
public OAuth2AccessToken createAccessToken(OAuth2Authentication authentication) throws AuthenticationException {
// 1允许同时登录一个账户 2 不允许同时登录有个账户
String LoginType = systemSetService.getByKey(SystemSetKey.LoginType);
if (LoginType.equals("1"))
return super.createAccessToken(authentication);
else {
OAuth2AccessToken existingAccessToken = tokenStore.getAccessToken(authentication);
OAuth2RefreshToken refreshToken = null;
if (existingAccessToken != null) {
if (existingAccessToken.getRefreshToken() != null) {
refreshToken = existingAccessToken.getRefreshToken();
tokenStore.removeRefreshToken(refreshToken);
}
tokenStore.removeAccessToken(existingAccessToken);
}
if (refreshToken == null) {
refreshToken = createRefreshToken(authentication);
} else if (refreshToken instanceof ExpiringOAuth2RefreshToken) {
ExpiringOAuth2RefreshToken expiring = (ExpiringOAuth2RefreshToken) refreshToken;
if (System.currentTimeMillis() > expiring.getExpiration().getTime()) {
refreshToken = createRefreshToken(authentication);
}
}
OAuth2AccessToken accessToken = createAccessToken(authentication, refreshToken);
tokenStore.storeAccessToken(accessToken, authentication);
// In case it was modified
refreshToken = accessToken.getRefreshToken();
if (refreshToken != null) {
tokenStore.storeRefreshToken(refreshToken, authentication);
}
return accessToken;
}
}
private OAuth2RefreshToken createRefreshToken(OAuth2Authentication authentication) {
if (!isSupportRefreshToken(authentication.getOAuth2Request())) {
return null;
}
int validitySeconds = getRefreshTokenValiditySeconds(authentication.getOAuth2Request());
String value = UUID.randomUUID().toString();
if (validitySeconds > 0) {
return new DefaultExpiringOAuth2RefreshToken(value, new Date(System.currentTimeMillis()
+ (validitySeconds * 1000L)));
}
return new DefaultOAuth2RefreshToken(value);
}
private OAuth2AccessToken createAccessToken(OAuth2Authentication authentication, OAuth2RefreshToken refreshToken) {
DefaultOAuth2AccessToken token = new DefaultOAuth2AccessToken(UUID.randomUUID().toString());
int validitySeconds = getAccessTokenValiditySeconds(authentication.getOAuth2Request());
if (validitySeconds > 0) {
token.setExpiration(new Date(System.currentTimeMillis() + (validitySeconds * 1000L)));
}
token.setRefreshToken(refreshToken);
token.setScope(authentication.getOAuth2Request().getScope());
return accessTokenEnhancer != null ? accessTokenEnhancer.enhance(token, authentication) : token;
}
@Override
public void setTokenStore(TokenStore tokenStore) {
super.setTokenStore(tokenStore);
this.tokenStore = tokenStore;
}
@Override
public void setTokenEnhancer(TokenEnhancer accessTokenEnhancer) {
super.setTokenEnhancer(accessTokenEnhancer);
this.accessTokenEnhancer = accessTokenEnhancer;
}
}
package com.yiboshi.science.config.security;
import com.yiboshi.science.config.annotation.Anonymous;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.oauth2.config.annotation.web.configuration.EnableResourceServer;
import org.springframework.security.oauth2.config.annotation.web.configuration.ResourceServerConfigurerAdapter;
import org.springframework.security.oauth2.config.annotation.web.configurers.ResourceServerSecurityConfigurer;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.mvc.condition.PatternsRequestCondition;
import org.springframework.web.servlet.mvc.method.RequestMappingInfo;
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
@Configuration
@EnableResourceServer
public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
@Autowired
private AuthorizationAccessDeniedHandler customAccessDeniedHandler;
@Autowired
private AuthExceptionEntryPointHandler authExceptionEntryPoint;
@Autowired
private WebApplicationContext applicationContext;
@Override
public void configure(ResourceServerSecurityConfigurer resources) {
resources.authenticationEntryPoint(authExceptionEntryPoint);
resources.accessDeniedHandler(customAccessDeniedHandler);
}
@Override
public void configure(HttpSecurity http) throws Exception {
Set<String> anonymous = getAnonymousUrl();
http.httpBasic()
.and()
.formLogin()
//.and().rememberMe()
//.authenticationSuccessHandler(new ....)
//密钥
//.key("unique-and-secret")
//cookie名
//.rememberMeCookieName("remember-me-cookie-name")
//生命周期,单位毫秒
//.tokenValiditySeconds(24 * 60 * 60)
/*.and()
.logout()
.logoutSuccessHandler(userLogoutSuccessHandler)*/
.and()
.authorizeRequests()
.antMatchers(anonymous.toArray(new String[0])).permitAll()
.antMatchers("/error").permitAll()
.antMatchers("/upload/files/**").permitAll()
.antMatchers("/docs.html").permitAll()
.antMatchers("/swagger-ui.html").permitAll()
.antMatchers("/swagger-resources/**").permitAll()
.antMatchers("/webjars/**").permitAll()
.antMatchers("/v2/api-docs").permitAll()
.antMatchers("/api-docs").permitAll()
// .antMatchers("/oauth/token").permitAll()
// .antMatchers("/oauth/check_token").permitAll()
.anyRequest()
//.permitAll()
.authenticated()
.and().csrf().disable().cors()
.and().exceptionHandling()
.authenticationEntryPoint(authExceptionEntryPoint)
.accessDeniedHandler(customAccessDeniedHandler);
//.and().sessionManagement().maximumSessions(1);
}
public Set<String> getAnonymousUrl() {
RequestMappingHandlerMapping mapping = applicationContext.getBean(RequestMappingHandlerMapping.class);
// 获取url与类和方法的对应信息
Map<RequestMappingInfo, HandlerMethod> map = mapping.getHandlerMethods();
Set<String> set = new HashSet<>();
for (Map.Entry<RequestMappingInfo, HandlerMethod> m : map.entrySet()) {
Map<String, String> map1 = new HashMap<String, String>();
RequestMappingInfo info = m.getKey();
HandlerMethod method = m.getValue();
Anonymous anonymous = method.getMethodAnnotation(Anonymous.class);
if (null != anonymous) {
PatternsRequestCondition p = info.getPatternsCondition();
for (String url : p.getPatterns()) {
set.add(url);
}
}
}
return set;
}
}
package com.yiboshi.science.config.security;
import com.yiboshi.arch.exception.BusinessException;
import com.yiboshi.science.service.SystemSetService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.config.BeanIds;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.oauth2.config.annotation.web.configuration.EnableAuthorizationServer;
import org.springframework.security.oauth2.provider.token.TokenStore;
import org.springframework.security.oauth2.provider.token.store.redis.RedisTokenStore;
/**
* @author qyh
*/
@Configuration
@EnableWebSecurity
@EnableAuthorizationServer
@EnableGlobalMethodSecurity(prePostEnabled=true)
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private UserDetailsServiceImpl userDetailsService;
@Autowired
public RedisConnectionFactory redisConnectionFactory;
@Autowired
private SystemSetService systemSetService;
@Bean
public TokenStore tokenStore() {
if (null == redisConnectionFactory) {
throw new BusinessException("无法初始化RedisTokenStore,redisConnectionFactory为null");
}
//使用redis存储token
RedisTokenStore redisTokenStore = new RedisTokenStore(redisConnectionFactory);
//设置redis token存储中的前缀
redisTokenStore.setPrefix("auth_token:");
//自定义token生成
redisTokenStore.setAuthenticationKeyGenerator(new AuthenticationKeyGenerator(systemSetService));
return redisTokenStore;
// return new InMemoryTokenStore();
}
@Bean(name = BeanIds.AUTHENTICATION_MANAGER)
@Override
protected AuthenticationManager authenticationManager() throws Exception {
return super.authenticationManager();
}
@Bean
@Override
protected UserDetailsService userDetailsService() {
return userDetailsService;
}
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
@Bean(name = "userLogoutSuccessHandler")
public UserLogoutSuccessHandler userLogoutSuccessHandler() {
return new UserLogoutSuccessHandler("/login", tokenStore());
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder());
}
}
package com.yiboshi.science.config.security;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import org.springframework.security.core.CredentialsContainer;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
import java.util.Collection;
@Setter
@Getter
@AllArgsConstructor
@NoArgsConstructor
public class SecurityUser implements UserDetails, CredentialsContainer {
private static final long serialVersionUID = 500342423423425L;
/** 用户id 人员id */
private String userId;
/** 用户id 人员id */
private String personId;
/** 账号 */
private String username;
/** 密码 */
private String password;
/** 登录名 */
private String loginName;
/** 角色Id */
private String roles;
/** 单位Id */
private String unitId;
/** 单位编码 */
private String unitCode;
/** 单位名称 */
private String unitName;
/** 专家id */
private String expertId;
/** 状态 1->启用 0->停用 */
private Integer state;
private Collection<? extends GrantedAuthority> authorities;
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
return authorities;
}
@Override
public String getPassword() { return password;}
@Override
public String getUsername() {
return username;
}
@Override
public boolean isAccountNonExpired() {
return true;
}
@Override
public boolean isAccountNonLocked() {
return true;
}
@Override
public boolean isCredentialsNonExpired() {
return true;
}
@Override
public boolean isEnabled() {
return true;
}
@Override
public void eraseCredentials() {
}
}
package com.yiboshi.science.config.security;
import com.yiboshi.arch.exception.BusinessException;
import com.yiboshi.science.enumeration.CommonEnum;
import lombok.extern.slf4j.Slf4j;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
;
/**
* 获取当前登录的用户
*
* @author kylin
* @date 2021-11-17
*/
@Slf4j
@Component
public class SecurityUserHolder {
/**
* 获取系统用户名称
*
* @return 系统用户
*/
public static SecurityUser getCurrentUser() {
final Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
if (authentication == null) {
throw new BusinessException("Login expired or not logged in!");
}
if (authentication.getPrincipal() instanceof SecurityUser) {
SecurityUser securityUser = (SecurityUser) authentication.getPrincipal();
return securityUser;
}
throw new BusinessException("Login expired or not logged in!");
}
/**
* 获取系统人员ID
*
* @return
*/
public static String getPersonId() {
return getCurrentUser().getPersonId();
}
/**
* 获取系统用户ID
*
* @return
*/
public static String getUserId() {
return getCurrentUser().getUserId();
}
/**
* 获取专家ID
*
* @return
*/
public static String getExpertId() {
return getCurrentUser().getExpertId();
}
/**
* 获取系统单位ID
*
* @return
*/
public static String getUnitId() {
return getCurrentUser().getUnitId();
}
/**
* 获取系统单位treeCode
*
* @return
*/
public static String getUnitCode() {
return getCurrentUser().getUnitCode();
}
/**
* 获取RoleId
*
* @return
*/
public static String getRoles() {
return getCurrentUser().getRoles();
}
/**
* 获取Token
*
* @return
*/
public static String getToken() {
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
String bearerToken = request.getHeader("Authorization");
String tokenHead = "Bearer ";
if (StringUtils.hasText(bearerToken) && bearerToken.startsWith(tokenHead)) {
// 去掉令牌前缀
return bearerToken.replace(tokenHead, "");
} else {
bearerToken = request.getParameter("access_token");
if (StringUtils.hasText(bearerToken) && bearerToken.startsWith(tokenHead)) {
// 去掉令牌前缀
return bearerToken.replace(tokenHead, "");
}
}
return null;
}
public static String getAuthType() {
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
String authType = request.getHeader("Auth-Type");
if (StringUtils.hasText(authType))
return authType;
else
return null;
}
public static boolean isKeyDiscipline() {
if (null != getAuthType() && getAuthType().equals("2"))
return true;
else
return false;
}
public static int projectType() {
if (null != getAuthType() && getAuthType().equals("2"))
return CommonEnum.projType.key.getCode();
else
return CommonEnum.projType.num.getCode();
}
}
package com.yiboshi.science.config.security;
import com.yiboshi.science.enumeration.CommonEnum;
import com.yiboshi.science.param.dto.SystemUserDTO;
import com.yiboshi.science.service.SystemRoleService;
import com.yiboshi.science.service.SystemUserService;
import lombok.AllArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.authentication.InternalAuthenticationServiceException;
import org.springframework.security.core.authority.AuthorityUtils;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;
import java.util.Objects;
@Service
@AllArgsConstructor
public class UserDetailsServiceImpl implements UserDetailsService {
@Autowired
private SystemUserService systemUserService;
@Autowired
private SystemRoleService systemRoleService;
private PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
public SecurityUser loadUserByUsername(String username) throws UsernameNotFoundException {
SystemUserDTO dto = systemUserService.findByName(username);
if (null == dto)
throw new UsernameNotFoundException(String.format("No user found with username '%s'.", username));
if (!dto.getNoteState().equals(CommonEnum.userState.normal.getCode()))
throw new InternalAuthenticationServiceException("User has been disabled!");
if (Objects.isNull(dto.getRoles()) || dto.getRoles().equals(""))
throw new InternalAuthenticationServiceException("Role does not exist!");
if (!dto.getRoles().contains(CommonEnum.systemRole.sys.getCode().toString())) {
if (!dto.getUnitState().equals(CommonEnum.unitState.normal.getCode()))
throw new InternalAuthenticationServiceException("User has been disabled!");
}
String authority = systemRoleService.getAuthorityByRoleId(dto.getRoles());
return new SecurityUser(dto.getId(), dto.getPersonId(), dto.getUsername(), passwordEncoder().encode(dto.getPassword()),
dto.getPersonName(), dto.getRoles(), dto.getUnitId(), dto.getUnitCode(), dto.getUnitName(), dto.getExpertId(),
dto.getNoteState(), AuthorityUtils.commaSeparatedStringToAuthorityList(authority)
);
}
}
package com.yiboshi.science.config.security;
import cn.hutool.core.util.StrUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.security.core.Authentication;
import org.springframework.security.oauth2.common.OAuth2AccessToken;
import org.springframework.security.oauth2.common.OAuth2RefreshToken;
import org.springframework.security.oauth2.provider.token.TokenStore;
import org.springframework.security.web.authentication.logout.ForwardLogoutSuccessHandler;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* @author qyh
* 退出登录后清除token
*/
public class UserLogoutSuccessHandler extends ForwardLogoutSuccessHandler {
static Logger logger = LoggerFactory.getLogger(UserLogoutSuccessHandler.class);
private TokenStore tokenStore;
/**
* Construct a new {@link ForwardLogoutSuccessHandler} with the given target URL.
*
* @param targetUrl the target URL
*/
public UserLogoutSuccessHandler(String targetUrl,TokenStore tokenStore) {
super(targetUrl);
this.tokenStore=tokenStore;
}
@Override
public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException {
String accessToken = request.getParameter("access_token");
logger.info("清除token:" + accessToken);
if (StrUtil.isNotBlank(accessToken)) {
OAuth2AccessToken oAuth2AccessToken = tokenStore.readAccessToken(accessToken);
if (oAuth2AccessToken != null) {
tokenStore.removeAccessToken(oAuth2AccessToken);
OAuth2RefreshToken oAuth2RefreshToken = oAuth2AccessToken.getRefreshToken();
tokenStore.removeRefreshToken(oAuth2RefreshToken);
tokenStore.removeAccessTokenUsingRefreshToken(oAuth2RefreshToken);
}
}
super.onLogoutSuccess(request, response, authentication);
}
}
package com.yiboshi.science.config.security;
import lombok.Data;
import java.io.Serializable;
@Data
public class loginUser implements Serializable {
/** 登录名 */
private String loginName;
/** 角色Id */
private String roles;
/** 单位Id */
//private String unitId;
/** 单位编码 */
private String unitCode;
/** 单位名称 */
private String unitName;
/** 申报类型 1 申报科研项目 2申报重点学科项目 3 同时申报*/
private String type;
/** 项目类型 1 科研项目 2重点学科项目*/
private String projType;
}
/*
* Copyright 2019-2020 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package com.yiboshi.science.config.verification;
import lombok.Data;
/**
* 登录验证码配置信息
*
* @author Anker
* @date: 2020/6/10 18:53
*/
@Data
public class VerificationCode {
/**
* 验证码配置
*/
private VerificationCodeEnum codeType;
/**
* 验证码有效期 分钟
*/
private Long expiration = 1L;
/**
* 验证码内容长度
*/
private int length = 2;
/**
* 验证码宽度
*/
private int width = 111;
/**
* 验证码高度
*/
private int height = 36;
/**
* 验证码字体
*/
private String fontName;
/**
* 字体大小
*/
private int fontSize = 25;
public VerificationCodeEnum getCodeType() {
return codeType;
}
}
/*
* Copyright 2019-2020 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package com.yiboshi.science.config.verification;
/**
* 验证码配置枚举
*
* @author Anker
* @date: 2020/6/10 17:40
*/
public enum VerificationCodeEnum {
/**
* 算数
*/
arithmetic,
/**
* 中文
*/
chinese,
/**
* 中文闪图
*/
chinese_gif,
/**
* 闪图
*/
gif, spec
}
/*
* Copyright 2019-2020 the original author or authors.
*
* Licensed under the Apache License, Version loginCode.length.0 (the "License"); you may not use this file except in
* compliance with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-loginCode.length.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package com.yiboshi.science.config.verification;
import com.wf.captcha.*;
import com.wf.captcha.base.Captcha;
import com.yiboshi.science.config.exception.BadConfigurationException;
import lombok.Data;
import org.apache.commons.lang.StringUtils;
import java.awt.*;
import java.util.Objects;
/**
* 配置文件读取
*
* @author Anker
* @date loginCode.length0loginCode.length0/6/10 17:loginCode.length6
*/
@Data
public class VerificationCodeProperties {
private VerificationCode verificationCode;
/**
* 获取验证码生产类
*
* @return /
*/
public Captcha getCaptcha() {
if (Objects.isNull(verificationCode)) {
verificationCode = new VerificationCode();
if (Objects.isNull(verificationCode.getCodeType())) {
verificationCode.setCodeType(VerificationCodeEnum.arithmetic);
}
}
return switchCaptcha(verificationCode);
}
/**
* 依据配置信息生产验证码
*
* @param verificationCode
* 验证码配置信息
* @return /
*/
private Captcha switchCaptcha(VerificationCode verificationCode) {
Captcha captcha;
synchronized (this) {
switch (verificationCode.getCodeType()) {
case arithmetic:
// 算术类型 https://gitee.com/whvse/EasyCaptcha
captcha = new ArithmeticCaptcha(verificationCode.getWidth(), verificationCode.getHeight());
// 几位数运算,默认是两位
captcha.setLen(verificationCode.getLength());
break;
case chinese:
captcha = new ChineseCaptcha(verificationCode.getWidth(), verificationCode.getHeight());
captcha.setLen(verificationCode.getLength());
break;
case chinese_gif:
captcha = new ChineseGifCaptcha(verificationCode.getWidth(), verificationCode.getHeight());
captcha.setLen(verificationCode.getLength());
break;
case gif:
captcha = new GifCaptcha(verificationCode.getWidth(), verificationCode.getHeight());
captcha.setLen(verificationCode.getLength());
break;
case spec:
captcha = new SpecCaptcha(verificationCode.getWidth(), verificationCode.getHeight());
captcha.setLen(verificationCode.getLength());
break;
default:
throw new BadConfigurationException("验证码配置信息错误!正确配置查看 LoginCodeEnum ");
}
}
if (StringUtils.isNotBlank(verificationCode.getFontName())) {
captcha.setFont(new Font(verificationCode.getFontName(), Font.PLAIN, verificationCode.getFontSize()));
}
return captcha;
}
}
package com.yiboshi.science.config.web;
import java.io.File;
import org.apache.commons.io.FileUtils;
import cn.hutool.log.Log;
import com.yiboshi.science.service.SystemSetService;
import com.yiboshi.science.utils.SystemSetKey;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
class WebConfigurer implements WebMvcConfigurer {
private static final boolean isWindows = System.getProperty("os.name").toLowerCase().contains("win");
@Autowired
private SystemSetService systemSetService;
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
String property = System.getProperty("user.dir").replace("\\", "/");
String basePath = systemSetService.getByKey(SystemSetKey.SysUploadFilePath);
// if (!isWindows)
// basePath = basePath.substring(0, basePath.length() - 1);
// else
// basePath = basePath;
registry.addResourceHandler(basePath + "**").addResourceLocations("file:///" + property + basePath);
}
}
package com.yiboshi.science.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yiboshi.science.base.BaseDAO;
import com.yiboshi.science.entity.ComBatch;
import com.yiboshi.science.param.dto.ComBatchDTO;
import com.yiboshi.science.param.query.ComBatchQueryVO;
import org.apache.ibatis.annotations.Param;
/**
* 人员表 DAO
*
* @author lkl
* @version 2021-08-26
*/
public interface ComBatchDAO extends BaseMapper<ComBatch>, BaseDAO<ComBatchQueryVO,ComBatchDTO,ComBatch> {
Integer getMaxBatch(@Param(value="year") int year,Integer projType);
ComBatchDTO getCurrentYearBatchByType(Integer projType);
ComBatchDTO getCurrentYearBatch();
}
package com.yiboshi.science.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yiboshi.science.base.BaseDAO;
import com.yiboshi.science.entity.ComConclusionCatalog;
import com.yiboshi.science.param.dto.ComConclusionCatalogDTO;
import com.yiboshi.science.param.query.ComConclusionCatalogQueryVO;
import java.util.List;
/**
* 验收材料目录表 DAO
*
* @author lkl
* @version 2021-08-26
*/
public interface ComConclusionCatalogDAO extends BaseMapper<ComConclusionCatalog>, BaseDAO<ComConclusionCatalogQueryVO, ComConclusionCatalogDTO, ComConclusionCatalog> {
List<ComConclusionCatalogDTO> getListByObjectId(String objectId);
}
\ No newline at end of file
package com.yiboshi.science.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yiboshi.science.base.BaseDAO;
import com.yiboshi.science.entity.ComConclusionFunds;
import com.yiboshi.science.entity.ComProjectConclusion;
import com.yiboshi.science.param.dto.ComConclusionFundsDTO;
import com.yiboshi.science.param.dto.ComProjectConclusionDTO;
import com.yiboshi.science.param.dto.ComProjectMembersDTO;
import com.yiboshi.science.param.query.ComConclusionFundsQueryVO;
import com.yiboshi.science.param.query.ComProjectConclusionQueryVO;
import java.util.List;
/**
* 结题经费记录表 DAO
*
* @author lkl
* @version 2021-08-26
*/
public interface ComConclusionFundsDAO extends BaseMapper<ComConclusionFunds>, BaseDAO<ComConclusionFundsQueryVO, ComConclusionFundsDTO, ComConclusionFunds> {
List<ComConclusionFundsDTO> getListByObjectId(String objectId,Integer type);
}
\ No newline at end of file
package com.yiboshi.science.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yiboshi.science.base.BaseDAO;
import com.yiboshi.science.entity.ComConclusionFunds;
import com.yiboshi.science.entity.ComConclusionResearchers;
import com.yiboshi.science.param.dto.ComConclusionFundsDTO;
import com.yiboshi.science.param.dto.ComConclusionResearchersDTO;
import com.yiboshi.science.param.dto.ComProjectMembersDTO;
import com.yiboshi.science.param.query.ComConclusionFundsQueryVO;
import com.yiboshi.science.param.query.ComConclusionResearchersQueryVO;
import java.util.List;
/**
* 结题主要研究人员表 DAO
*
* @author lkl
* @version 2021-08-26
*/
public interface ComConclusionResearchersDAO extends BaseMapper<ComConclusionResearchers>, BaseDAO<ComConclusionResearchersQueryVO, ComConclusionResearchersDTO, ComConclusionResearchers> {
List<ComConclusionResearchersDTO> getListByObjectId(String objectId);
}
\ No newline at end of file
package com.yiboshi.science.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yiboshi.science.base.BaseDAO;
import com.yiboshi.science.entity.ComConclusionResearchers;
import com.yiboshi.science.entity.ComConclusionThesis;
import com.yiboshi.science.param.dto.ComConclusionResearchersDTO;
import com.yiboshi.science.param.dto.ComConclusionThesisDTO;
import com.yiboshi.science.param.dto.ComProjectMembersDTO;
import com.yiboshi.science.param.query.ComConclusionResearchersQueryVO;
import com.yiboshi.science.param.query.ComConclusionThesisQueryVO;
import java.util.List;
/**
* 结题论文记录表 DAO
*
* @author lkl
* @version 2021-08-26
*/
public interface ComConclusionThesisDAO extends BaseMapper<ComConclusionThesis>, BaseDAO<ComConclusionThesisQueryVO, ComConclusionThesisDTO, ComConclusionThesis> {
List<ComConclusionThesisDTO> getListByObjectId(String objectId);
}
\ No newline at end of file
package com.yiboshi.science.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yiboshi.science.base.BaseDAO;
import com.yiboshi.science.entity.ComDownload;
import com.yiboshi.science.param.dto.ComDownloadDTO;
import com.yiboshi.science.param.query.ComDownloadQueryVO;
/**
* 附件表 DAO
*
* @author lkl
* @version 2021-08-25
*/
public interface ComDownloadDAO extends BaseMapper<ComDownload>, BaseDAO<ComDownloadQueryVO, ComDownloadDTO, ComDownload> {
}
\ No newline at end of file
package com.yiboshi.science.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yiboshi.science.base.BaseDAO;
import com.yiboshi.science.entity.ComEvaluationContent;
import com.yiboshi.science.param.dto.ComEvaluationContentDTO;
import com.yiboshi.science.param.query.ComEvaluationContentQueryVO;
public interface ComEvaluationContentDAO extends BaseMapper<ComEvaluationContent>, BaseDAO<ComEvaluationContentQueryVO, ComEvaluationContentDTO,ComEvaluationContent> {
}
package com.yiboshi.science.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yiboshi.science.base.BaseDAO;
import com.yiboshi.science.entity.ComEvaluation;
import com.yiboshi.science.param.dto.ComEvaluationDTO;
import com.yiboshi.science.param.dto.ComUnitDTO;
import com.yiboshi.science.param.query.ComEvaluationQueryVO;
public interface ComEvaluationDAO extends BaseMapper<ComEvaluation>, BaseDAO<ComEvaluationQueryVO, ComEvaluationDTO,ComEvaluation> {
ComEvaluationDTO getEvaluationById(String id);
}
package com.yiboshi.science.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yiboshi.science.base.BaseDAO;
import com.yiboshi.science.entity.ComEvaluationItem;
import com.yiboshi.science.param.dto.ComEvaluationItemDTO;
import com.yiboshi.science.param.query.ComEvaluationItemQueryVO;
public interface ComEvaluationItemDAO extends BaseMapper<ComEvaluationItem>, BaseDAO<ComEvaluationItemQueryVO, ComEvaluationItemDTO,ComEvaluationItem> {
}
package com.yiboshi.science.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yiboshi.science.base.BaseDAO;
import com.yiboshi.science.entity.ComEvaluationItemNote;
import com.yiboshi.science.param.dto.ComEvaluationItemNoteDTO;
import com.yiboshi.science.param.query.ComEvaluationItemNoteQueryVO;
public interface ComEvaluationItemNoteDAO extends BaseMapper<ComEvaluationItemNote>, BaseDAO<ComEvaluationItemNoteQueryVO, ComEvaluationItemNoteDTO,ComEvaluationItemNote> {
}
package com.yiboshi.science.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yiboshi.science.base.BaseDAO;
import com.yiboshi.science.entity.ComEvaluationNote;
import com.yiboshi.science.param.dto.ComEvaluationNoteDTO;
import com.yiboshi.science.param.query.ComEvaluationNoteQueryVO;
public interface ComEvaluationNoteDAO extends BaseMapper<ComEvaluationNote>, BaseDAO<ComEvaluationNoteQueryVO, ComEvaluationNoteDTO,ComEvaluationNote> {
}
package com.yiboshi.science.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yiboshi.science.base.BaseDAO;
import com.yiboshi.science.entity.ComEvaluationStandard;
import com.yiboshi.science.param.dto.ComEvaluationStandardDTO;
import com.yiboshi.science.param.query.ComEvaluationStandardQueryVO;
public interface ComEvaluationStandardDAO extends BaseMapper<ComEvaluationStandard>, BaseDAO<ComEvaluationStandardQueryVO, ComEvaluationStandardDTO, ComEvaluationStandard> {
}
package com.yiboshi.science.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yiboshi.science.base.BaseDAO;
import com.yiboshi.science.entity.ComEvaluationValue;
import com.yiboshi.science.param.dto.ComEvaluationValueDTO;
import com.yiboshi.science.param.query.ComEvaluationValueQueryVO;
public interface ComEvaluationValueDAO extends BaseMapper<ComEvaluationValue>, BaseDAO<ComEvaluationValueQueryVO, ComEvaluationValueDTO,ComEvaluationValue> {
}
package com.yiboshi.science.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yiboshi.science.base.BaseDAO;
import com.yiboshi.science.entity.ComExpertBatch;
import com.yiboshi.science.param.dto.ComExpertBatchDTO;
import com.yiboshi.science.param.query.ComExpertBatchQueryVO;
public interface ComExpertBatchDAO extends BaseMapper<ComExpertBatch>, BaseDAO<ComExpertBatchQueryVO, ComExpertBatchDTO,ComExpertBatch> {
}
package com.yiboshi.science.dao;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yiboshi.science.base.BaseDAO;
import com.yiboshi.science.entity.ComExpert;
import com.yiboshi.science.entity.SystemMenu;
import com.yiboshi.science.param.dto.ComExpertDTO;
import com.yiboshi.science.param.query.ComExpertQueryVO;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface ComExpertDAO extends BaseMapper<ComExpert>, BaseDAO<ComExpertQueryVO,ComExpertDTO,ComExpert> {
ComExpertDTO getExpertById(String id);
ComExpertDTO getExpertByCertId(String certId);
List<ComExpertDTO> getExpertListByIdList(@Param("ew") Wrapper<SystemMenu> queryWrapper);
}
package com.yiboshi.science.dao;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yiboshi.science.base.BaseDAO;
import com.yiboshi.science.entity.AssignCount;
import com.yiboshi.science.entity.ComExpertGroupAssign;
import com.yiboshi.science.param.dto.ComExpertGroupAssignDTO;
import com.yiboshi.science.param.query.ComExpertGroupAssignQueryVO;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface ComExpertGroupAssignDAO extends BaseMapper<ComExpertGroupAssign>, BaseDAO<ComExpertGroupAssignQueryVO, ComExpertGroupAssignDTO,ComExpertGroupAssign> {
List<AssignCount> getAssignCount(String groupId);
}
package com.yiboshi.science.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yiboshi.science.base.BaseDAO;
import com.yiboshi.science.entity.ComExpertGroup;
import com.yiboshi.science.param.dto.ComExpertGroupDTO;
import com.yiboshi.science.param.query.ComExpertGroupQueryVO;
public interface ComExpertGroupDAO extends BaseMapper<ComExpertGroup>, BaseDAO<ComExpertGroupQueryVO, ComExpertGroupDTO,ComExpertGroup> {
}
package com.yiboshi.science.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yiboshi.science.base.BaseDAO;
import com.yiboshi.science.entity.ComExpertGroupMembers;
import com.yiboshi.science.entity.SelectListItem;
import com.yiboshi.science.param.dto.ComExpertGroupMembersDTO;
import com.yiboshi.science.param.query.ComExpertGroupMembersQueryVO;
import java.util.List;
public interface ComExpertGroupMembersDAO extends BaseMapper<ComExpertGroupMembers>, BaseDAO<ComExpertGroupMembersQueryVO, ComExpertGroupMembersDTO,ComExpertGroupMembers> {
List<SelectListItem> getExpertIdListByGroupId(String groupId);
}
package com.yiboshi.science.dao;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yiboshi.science.base.BaseDAO;
import com.yiboshi.science.entity.ComExpertSpec;
import com.yiboshi.science.entity.SelectListItem;
import com.yiboshi.science.entity.SystemMenu;
import com.yiboshi.science.param.dto.ComExpertDTO;
import com.yiboshi.science.param.dto.ComExpertSpecDTO;
import com.yiboshi.science.param.query.ComExpertSpecQueryVO;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface ComExpertSpecDAO extends BaseMapper<ComExpertSpec>, BaseDAO<ComExpertSpecQueryVO, ComExpertSpecDTO,ComExpertSpec> {
List<String> getIdListByExpertId(String expertId);
List<ComExpertSpecDTO> getListByExpertId(String expertId);
List<ComExpertDTO> getExpertListBySpecId(@Param("ew") Wrapper<SystemMenu> queryWrapper);
List<ComExpertDTO> getExpertListBySpecIdProjId(@Param("specIds") List<String> SpecList, @Param("porjIds") List<String> ProjList);
List<ComExpertDTO> getExpertListByExpertSpecIds(@Param("specIds") List<String> SpecList, @Param("parentIds") List<String> ParentList, @Param("personName") String personName);
}
package com.yiboshi.science.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yiboshi.science.base.BaseDAO;
import com.yiboshi.science.entity.ComFile;
import com.yiboshi.science.param.dto.ComFileDTO;
import com.yiboshi.science.param.query.ComFileQueryVO;
import java.util.List;
/**
* 附件目录表 DAO
*
* @author lkl
* @version 2021-08-26
*/
public interface ComFileDAO extends BaseMapper<ComFile>, BaseDAO<ComFileQueryVO,ComFileDTO, ComFile> {
List<ComFileDTO> getListByObjectId(String objectId, int fileType);
}
\ No newline at end of file
package com.yiboshi.science.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yiboshi.science.base.BaseDAO;
import com.yiboshi.science.entity.ComManager;
import com.yiboshi.science.param.dto.ComManagerDTO;
import com.yiboshi.science.param.dto.ComPersonDTO;
import com.yiboshi.science.param.query.ComManagerQueryVO;
/**
* 单位管理员表 DAO
*
* @author lkl
* @version 2021-08-25
*/
public interface ComManagerDAO extends BaseMapper<ComManager>, BaseDAO<ComManagerQueryVO, ComManagerDTO, ComManager> {
ComManagerDTO getManagerById(String id);
ComManagerDTO getManagerByCertId(String certId);
}
\ No newline at end of file
package com.yiboshi.science.dao;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yiboshi.science.base.BaseDAO;
import com.yiboshi.science.entity.ComNotice;
import com.yiboshi.science.entity.ComProject;
import com.yiboshi.science.param.dto.ComNoticeDTO;
import com.yiboshi.science.param.query.ComNoticeQueryVO;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* 通知公告表 DAO
*
* @author lkl
* @version 2021-08-26
*/
public interface ComNoticeDAO extends BaseMapper<ComNotice>, BaseDAO<ComNoticeQueryVO, ComNoticeDTO, ComNotice> {
ComNoticeDTO getLatestNotice(@Param("ew") Wrapper<ComNotice> queryWrapper);
}
\ No newline at end of file
package com.yiboshi.science.dao;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yiboshi.science.base.BaseDAO;
import com.yiboshi.science.entity.ComPerson;
import com.yiboshi.science.entity.ComProject;
import com.yiboshi.science.param.dto.ComPersonDTO;
import com.yiboshi.science.param.dto.DataStatisticsDTO;
import com.yiboshi.science.param.query.ComPersonQueryVO;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* 人员表 DAO
*
* @author lkl
* @version 2021-08-26
*/
public interface ComPersonDAO extends BaseMapper<ComPerson>, BaseDAO<ComPersonQueryVO,ComPersonDTO,ComPerson> {
ComPersonDTO getPersonById(String id);
List<ComPersonDTO> getList();
List<ComPersonDTO> getManagerListByUnitId(String unitId);
Page<ComPersonDTO> getAllListByPage(Page<ComPersonQueryVO> page, @Param("ew") Wrapper<ComPersonQueryVO> queryWrapper);
DataStatisticsDTO getRegisterPersonCount(@Param("ew") Wrapper<ComPersonQueryVO> queryWrapper);
DataStatisticsDTO getRegisterPersonCountByDay(@Param("ew") Wrapper<ComPersonQueryVO> queryWrapper);
}
package com.yiboshi.science.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yiboshi.science.base.BaseDAO;
import com.yiboshi.science.entity.ComProjcetResearch;
import com.yiboshi.science.param.dto.ComProjcetResearchDTO;
import com.yiboshi.science.param.query.ComProjcetResearchQueryVO;
/**
* 项目申请书在研项目情况表 DAO
*
* @author lkl
* @version 2021-08-26
*/
public interface ComProjcetResearchDAO extends BaseMapper<ComProjcetResearch>, BaseDAO<ComProjcetResearchQueryVO, ComProjcetResearchDTO, ComProjcetResearch> {
}
\ No newline at end of file
package com.yiboshi.science.dao;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yiboshi.science.base.BaseDAO;
import com.yiboshi.science.entity.AssignCount;
import com.yiboshi.science.entity.ComProject;
import com.yiboshi.science.entity.ComProjectAssign;
import com.yiboshi.science.param.dto.ComProjectAssignDTO;
import com.yiboshi.science.param.dto.ComProjectGroupDTO;
import com.yiboshi.science.param.query.ComProjectAssignQueryVO;
import org.apache.ibatis.annotations.Param;
import java.math.BigDecimal;
import java.util.List;
public interface ComProjectAssignDAO extends BaseMapper<ComProjectAssign>, BaseDAO<ComProjectAssignQueryVO, ComProjectAssignDTO,ComProjectAssign> {
List<ComProjectAssignDTO> getAssignExpertList(String projectId);
ComProjectAssignDTO getAssignExpertById(String id);
List<AssignCount> getAssignCount(String expertId);
List<ComProjectGroupDTO> getProjectGroupAssignById(String id, String expertId);
void updateAssignState(ComProject comProject);
}
package com.yiboshi.science.dao;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yiboshi.science.base.BaseDAO;
import com.yiboshi.science.entity.ComProject;
import com.yiboshi.science.entity.ComProjectAudit;
import com.yiboshi.science.param.dto.*;
import com.yiboshi.science.param.query.ComProjectAuditQueryVO;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* 审核表 DAO
*
* @author lkl
* @version 2021-08-26
*/
public interface ComProjectAuditDAO extends BaseMapper<ComProjectAudit>, BaseDAO<ComProjectAuditQueryVO, ComProjectAuditDTO, ComProjectAudit> {
Page<ComProjectAuditDTO> getProjectAuditListByPage(Page<ComProjectAuditQueryVO> page, @Param("ew") Wrapper<ComProjectAuditQueryVO> queryWrapper);
Page<ComProjectAuditDTO> getTaskAuditListByPage(Page<ComProjectAuditQueryVO> page, @Param("ew") Wrapper<ComProjectAuditQueryVO> queryWrapper);
Page<ComProjectAuditDTO> getCheckAuditListByPage(Page<ComProjectAuditQueryVO> page, @Param("ew") Wrapper<ComProjectAuditQueryVO> queryWrapper);
Page<ComProjectAuditDTO> getConclusionAuditListByPage(Page<ComProjectAuditQueryVO> page, @Param("ew") Wrapper<ComProjectAuditQueryVO> queryWrapper);
Page<ComProjectAuditDTO> getListByPage(Page<ComProjectAuditQueryVO> page, @Param("ew") Wrapper<ComProjectAuditQueryVO> queryWrapper);
Page<ComProjectAuditDTO> getProjectStatisticListByPage(Page<ComProjectAuditQueryVO> page, @Param("ew") Wrapper<ComProjectAuditQueryVO> queryWrapper);
Page<ComProjectAuditDTO> getTaskStatisticListByPage(Page<ComProjectAuditQueryVO> page, @Param("ew") Wrapper<ComProjectAuditQueryVO> queryWrapper);
Page<ComProjectAuditDTO> getCheckStatisticListByPage(Page<ComProjectAuditQueryVO> page, @Param("ew") Wrapper<ComProjectAuditQueryVO> queryWrapper);
Integer getMaxUnitLevelByObjectId(String objectId);
int getMaxAuditIndex (String auditObjectId);
DataStatisticsDTO getCount(@Param("ew") Wrapper<ComProject> queryWrapper);
DataStatisticsDTO getConclusionAuditCount(@Param("ew") Wrapper<ComProject> queryWrapper);
DataStatisticsDTO getFirstAuditPassCount(@Param("ew") Wrapper<ComProject> queryWrapper);
DataStatisticsDTO getCountByDay(@Param("ew") Wrapper<ComProject> queryWrapper);
DataStatisticsDTO getAssignPersonCount(Integer assignYear, Integer projType);
List<DataStatisticsDTO> getTreeCodeProjectCount(@Param("ew") Wrapper<ComProject> queryWrapper,String treeCode);
List<DataStatisticsDTO> getKnowledgeCount(@Param("ew") Wrapper<ComProject> queryWrapper);
List<KnowledgeStatisticsDTO> getKnowledgeStatistic(@Param("ew") Wrapper<ComProjectAuditQueryVO> queryWrapper);
Page<ComProjectAuditDTO> getUnAssignProjectListByPage(Page<ComProjectAuditQueryVO> page, @Param("ew") Wrapper<ComProjectAuditQueryVO> queryWrapper, Integer reportYear);
List<ComProjectGroupDetailDTO> getProjectGroupKnowledgeId(Integer groupYear);
List<ComProjectAuditDTO> getAuditProjectList(@Param("ew") Wrapper<ComProject> queryWrapper);
List<projectExpertGroupStatisticDTO> getProjectExpertGroupStatistic(@Param("ew") Wrapper<ComProjectAuditQueryVO> queryWrapper, Integer groupYear);
List<ComPersonDTO> getExpertInfoByGroupId(String groupId);
List<EvaluationStatisticDTO> getEvaluationStatistic(Integer reportYear);
List<ProjectGroupScoreOrderDTO> getProjectGroupScoreOrder(Integer reportYear);
}
\ No newline at end of file
package com.yiboshi.science.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yiboshi.science.base.BaseDAO;
import com.yiboshi.science.entity.ComProjectAuditNote;
import com.yiboshi.science.param.dto.ComProjectAuditNoteDTO;
import com.yiboshi.science.param.query.ComProjectAuditNoteQueryVO;
import java.util.List;
/**
* 审核表 DAO
*
* @author lkl
* @version 2021-08-26
*/
public interface ComProjectAuditNoteDAO extends BaseMapper<ComProjectAuditNote>, BaseDAO<ComProjectAuditNoteQueryVO,ComProjectAuditNoteDTO, ComProjectAuditNote> {
List<ComProjectAuditNoteDTO> getListByObjectId(String objectId);
}
\ No newline at end of file
package com.yiboshi.science.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yiboshi.science.base.BaseDAO;
import com.yiboshi.science.entity.ComEvaluationNote;
import com.yiboshi.science.entity.ComProjectBasic;
import com.yiboshi.science.param.dto.ComEvaluationNoteDTO;
import com.yiboshi.science.param.dto.ComProjectBasicDTO;
import com.yiboshi.science.param.query.ComEvaluationNoteQueryVO;
import com.yiboshi.science.param.query.ComProjectBasicQueryVO;
public interface ComProjectBasicDAO extends BaseMapper<ComProjectBasic>, BaseDAO<ComProjectBasicQueryVO, ComProjectBasicDTO,ComProjectBasic> {
}
package com.yiboshi.science.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yiboshi.science.base.BaseDAO;
import com.yiboshi.science.entity.ComProjectBudget;
import com.yiboshi.science.param.dto.ComProjectBudgetDTO;
import com.yiboshi.science.param.query.ComProjectBudgetQueryVO;
import java.util.List;
/**
* 经费申请表(任务书/项目申请书) DAO
*
* @author lkl
* @version 2021-08-26
*/
public interface ComProjectBudgetDAO extends BaseMapper<ComProjectBudget>, BaseDAO<ComProjectBudgetQueryVO,ComProjectBudgetDTO, ComProjectBudget> {
List<ComProjectBudgetDTO> getListByObjectId(String objectId);
}
\ No newline at end of file
package com.yiboshi.science.dao;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yiboshi.science.base.BaseDAO;
import com.yiboshi.science.entity.ComProjectCheck;
import com.yiboshi.science.param.dto.ComProjectCheckDTO;
import com.yiboshi.science.param.dto.DataStatisticsDTO;
import com.yiboshi.science.param.query.ComProjectCheckQueryVO;
import org.apache.ibatis.annotations.Param;
/**
* 中期考核表 DAO
*
* @author lkl
* @version 2021-08-26
*/
public interface ComProjectCheckDAO extends BaseMapper<ComProjectCheck>, BaseDAO<ComProjectCheckQueryVO, ComProjectCheckDTO,ComProjectCheck> {
DataStatisticsDTO getCount(@Param("ew") Wrapper<ComProjectCheck> queryWrapper);
}
\ No newline at end of file
package com.yiboshi.science.dao;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yiboshi.science.base.BaseDAO;
import com.yiboshi.science.entity.ComProject;
import com.yiboshi.science.entity.ComProjectConclusion;
import com.yiboshi.science.param.dto.ComProjectConclusionDTO;
import com.yiboshi.science.param.dto.DataStatisticsDTO;
import com.yiboshi.science.param.query.ComProjectConclusionQueryVO;
import org.apache.ibatis.annotations.Param;
/**
* 结题信息表 DAO
*
* @author lkl
* @version 2021-08-26
*/
public interface ComProjectConclusionDAO extends BaseMapper<ComProjectConclusion>, BaseDAO<ComProjectConclusionQueryVO, ComProjectConclusionDTO, ComProjectConclusion> {
ComProjectConclusionDTO getConclusionByProjId(String projId);
DataStatisticsDTO getCount(@Param("ew") Wrapper<ComProjectConclusion> queryWrapper);
}
\ No newline at end of file
package com.yiboshi.science.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yiboshi.science.base.BaseDAO;
import com.yiboshi.science.entity.ComProjectConclusionMaterial;
import com.yiboshi.science.param.dto.ComProjectConclusionMaterialDTO;
import com.yiboshi.science.param.query.ComProjectConclusionMaterialQueryVO;
import java.util.List;
public interface ComProjectConclusionMaterialDAO extends BaseMapper<ComProjectConclusionMaterial>, BaseDAO<ComProjectConclusionMaterialQueryVO, ComProjectConclusionMaterialDTO, ComProjectConclusionMaterial> {
List<ComProjectConclusionMaterialDTO> getConclusionMaterialList(String projId);
}
package com.yiboshi.science.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yiboshi.science.base.BaseDAO;
import com.yiboshi.science.entity.ComProjectCooperativeUnits;
import com.yiboshi.science.param.dto.ComProjectCooperativeUnitsDTO;
import com.yiboshi.science.param.query.ComProjectCooperativeUnitsQueryVO;
import java.util.List;
/**
* 合作单位表 DAO
*
* @author lkl
* @version 2021-08-26
*/
public interface ComProjectCooperativeUnitsDAO extends BaseMapper<ComProjectCooperativeUnits>, BaseDAO<ComProjectCooperativeUnitsQueryVO,ComProjectCooperativeUnitsDTO, ComProjectCooperativeUnits> {
List<ComProjectCooperativeUnitsDTO> getListByObjectId(String objectId);
}
\ No newline at end of file
package com.yiboshi.science.dao;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yiboshi.science.base.BaseDAO;
import com.yiboshi.science.entity.ComProject;
import com.yiboshi.science.param.dto.ComProjectDTO;
import com.yiboshi.science.param.dto.DataStatisticsDTO;
import com.yiboshi.science.param.query.ComProjectQueryVO;
import org.apache.ibatis.annotations.Param;
/**
* 项目表 DAO
*
* @author lkl
* @version 2021-08-26
*/
public interface ComProjectDAO extends BaseMapper<ComProject>, BaseDAO<ComProjectQueryVO,ComProjectDTO,ComProject> {
String getProjectNo (String Code);
DataStatisticsDTO getCount(@Param("ew") Wrapper<ComProject> queryWrapper);
ComProjectDTO getById(String id);
DataStatisticsDTO getProjectReportCountByGov(String treeCode);
DataStatisticsDTO getProjectReportCountByUnitId(String appUnitId);
}
\ No newline at end of file
package com.yiboshi.science.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yiboshi.science.base.BaseDAO;
import com.yiboshi.science.entity.ComProjectEquipment;
import com.yiboshi.science.param.dto.ComProjectEquipmentDTO;
import com.yiboshi.science.param.query.ComProjectEquipmentQueryVO;
import java.util.List;
/**
* 经费申请表(任务书/项目申请书) DAO
*
* @author lkl
* @version 2021-08-26
*/
public interface ComProjectEquipmentDAO extends BaseMapper<ComProjectEquipment>, BaseDAO<ComProjectEquipmentQueryVO,ComProjectEquipmentDTO, ComProjectEquipment> {
List<ComProjectEquipmentDTO> getListByObjectId(String objectId);
}
\ No newline at end of file
package com.yiboshi.science.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yiboshi.science.base.BaseDAO;
import com.yiboshi.science.entity.ComProjectBudget;
import com.yiboshi.science.entity.ComProjectFundComposition;
import com.yiboshi.science.param.dto.ComProjectBudgetDTO;
import com.yiboshi.science.param.dto.ComProjectCooperativeUnitsDTO;
import com.yiboshi.science.param.dto.ComProjectFundCompositionDTO;
import com.yiboshi.science.param.query.ComProjectBudgetQueryVO;
import com.yiboshi.science.param.query.ComProjectFundCompositionQueryVO;
import java.util.List;
/**
* 经费申请表(任务书/项目申请书) DAO
*
* @author lkl
* @version 2021-08-26
*/
public interface ComProjectFundCompositionDAO extends BaseMapper<ComProjectFundComposition>, BaseDAO<ComProjectFundCompositionQueryVO, ComProjectFundCompositionDTO, ComProjectFundComposition> {
List<ComProjectFundCompositionDTO> getListByObjectId(String objectId);
}
\ No newline at end of file
package com.yiboshi.science.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yiboshi.science.base.BaseDAO;
import com.yiboshi.science.entity.ComProjectGroupAssign;
import com.yiboshi.science.param.dto.ComProjectAssignDTO;
import com.yiboshi.science.param.dto.ComProjectGroupAssignDTO;
import com.yiboshi.science.param.query.ComProjectGroupAssignQueryVO;
import java.util.List;
public interface ComProjectGroupAssignDAO extends BaseMapper<ComProjectGroupAssign>, BaseDAO<ComProjectGroupAssignQueryVO, ComProjectGroupAssignDTO, ComProjectGroupAssign>{
List<ComProjectGroupAssignDTO> getAssignExpertList(String groupId);
ComProjectGroupAssignDTO getAssignGroupExpertById(String Id);
List<ComProjectAssignDTO> getProjectAssignByGroupIdExpertId(String groupId, String expertId);
}
package com.yiboshi.science.dao;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yiboshi.science.base.BaseDAO;
import com.yiboshi.science.base.Pagination;
import com.yiboshi.science.entity.ComProjectGroup;
import com.yiboshi.science.param.dto.ComProjectAssignDTO;
import com.yiboshi.science.param.dto.ComProjectGroupDTO;
import com.yiboshi.science.param.dto.ComProjectKnowledgeStatisticDTO;
import com.yiboshi.science.param.query.ComProjectGroupQueryVO;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface ComProjectGroupDAO extends BaseMapper<ComProjectGroup>, BaseDAO<ComProjectGroupQueryVO, ComProjectGroupDTO, ComProjectGroup> {
ComProjectGroupDTO getProjectGroupByKnowLedgeIDYear(@Param("groupYear") Integer name, @Param("knowledgeId") String knowledgeId);
List<ComProjectAssignDTO> getAssignExpertList(String projectId);
List<ComProjectKnowledgeStatisticDTO> getProjectKnowledgeStatisticByGroupId(String groupId);
}
package com.yiboshi.science.dao;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yiboshi.science.base.BaseDAO;
import com.yiboshi.science.entity.ComProjectGroupDetail;
import com.yiboshi.science.param.dto.ComProjectGroupDetailDTO;
import com.yiboshi.science.param.query.ComProjectGroupDetailQueryVO;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface ComProjectGroupDetailDAO extends BaseMapper<ComProjectGroupDetail>, BaseDAO<ComProjectGroupDetailQueryVO, ComProjectGroupDetailDTO, ComProjectGroupDetail> {
ComProjectGroupDetailDTO getProjectGroupDetailByGP(@Param("groupId") String groupId, @Param("projId") String projId);
List<ComProjectGroupDetailDTO> getProjectDetailList(String groupId);
List<ComProjectGroupDetailDTO> getProjectDetailList2(String groupId);
Page<ComProjectGroupDetailDTO> getProjectDetailListbyPage(Page<ComProjectGroupDetailQueryVO> page, @Param("ew") Wrapper<ComProjectGroupDetailQueryVO> queryWrapper);
List<ComProjectGroupDetailDTO> getProjectListByGroupIds(@Param("groupIds") List<String> groupList);
}
package com.yiboshi.science.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yiboshi.science.base.BaseDAO;
import com.yiboshi.science.entity.ComProjectMembers;
import com.yiboshi.science.param.dto.ComProjectMembersDTO;
import com.yiboshi.science.param.query.ComProjectMembersQueryVO;
import java.util.List;
/**
* 项目组成员表 DAO
*
* @author lkl
* @version 2021-08-26
*/
public interface ComProjectMembersDAO extends BaseMapper<ComProjectMembers>, BaseDAO<ComProjectMembersQueryVO,ComProjectMembersDTO, ComProjectMembers> {
List<ComProjectMembersDTO> getListByObjectId(String objectId);
ComProjectMembersDTO getMemCountById(String objectId);
Integer getMemWorkCountByObjectId(String objectId);
}
\ No newline at end of file
package com.yiboshi.science.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yiboshi.science.base.BaseDAO;
import com.yiboshi.science.entity.ComProjectResults;
import com.yiboshi.science.param.dto.ComProjectResultsDTO;
import com.yiboshi.science.param.query.ComProjectResultsQueryVO;
import java.util.List;
/**
* 预期成果 DAO
*
* @author lkl
* @version 2021-08-26
*/
public interface ComProjectResultsDAO extends BaseMapper<ComProjectResults> , BaseDAO<ComProjectResultsQueryVO,ComProjectResultsDTO, ComProjectResults> {
List<ComProjectResultsDTO> getListByObjectId(String objectId);
List<String> getArrayByObjectId(String objectId);
List<String> getNameByObjectId(String objectId);
}
\ No newline at end of file
package com.yiboshi.science.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yiboshi.science.base.BaseDAO;
import com.yiboshi.science.entity.ComProjectStageGoal;
import com.yiboshi.science.param.dto.ComProjectStageGoalDTO;
import com.yiboshi.science.param.query.ComProjectStageGoalQueryVO;
import java.util.List;
/**
* 任务书主要研发内容 DAO
*
* @author lkl
* @version 2021-08-26
*/
public interface ComProjectStageGoalDAO extends BaseMapper<ComProjectStageGoal>, BaseDAO<ComProjectStageGoalQueryVO, ComProjectStageGoalDTO, ComProjectStageGoal> {
List<ComProjectStageGoalDTO> getListByObjectId(String objectId);
}
\ No newline at end of file
package com.yiboshi.science.dao;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yiboshi.science.base.BaseDAO;
import com.yiboshi.science.entity.ComProjectTask;
import com.yiboshi.science.param.dto.ComProjectTaskDTO;
import com.yiboshi.science.param.dto.DataStatisticsDTO;
import com.yiboshi.science.param.query.ComProjectTaskQueryVO;
import org.apache.ibatis.annotations.Param;
/**
* 任务书表 DAO
*
* @author lkl
* @version 2021-08-26
*/
public interface ComProjectTaskDAO extends BaseMapper<ComProjectTask>, BaseDAO<ComProjectTaskQueryVO, ComProjectTaskDTO, ComProjectTask> {
DataStatisticsDTO getCount(@Param("ew") Wrapper<ComProjectTask> queryWrapper);
}
\ No newline at end of file
package com.yiboshi.science.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yiboshi.science.base.BaseDAO;
import com.yiboshi.science.entity.ComConclusionThesis;
import com.yiboshi.science.entity.ComSendingRecord;
import com.yiboshi.science.param.dto.ComConclusionThesisDTO;
import com.yiboshi.science.param.dto.ComSendingRecordDTO;
import com.yiboshi.science.param.query.ComConclusionThesisQueryVO;
import com.yiboshi.science.param.query.ComSendingRecordQueryVO;
/**
* 信息发送记录表 DAO
*
* @author lkl
* @version 2021-08-26
*/
public interface ComSendingRecordDAO extends BaseMapper<ComSendingRecord>, BaseDAO<ComSendingRecordQueryVO, ComSendingRecordDTO, ComSendingRecord> {
}
\ No newline at end of file
package com.yiboshi.science.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yiboshi.science.base.BaseDAO;
import com.yiboshi.science.entity.ComTaskTarget;
import com.yiboshi.science.param.dto.ComTaskTargetDTO;
import com.yiboshi.science.param.query.ComTaskTargetQueryVO;
import java.util.List;
/**
* 任务书预期成果表 DAO
*
* @author lkl
* @version 2021-08-26
*/
public interface ComTaskTargetDAO extends BaseMapper<ComTaskTarget>, BaseDAO<ComTaskTargetQueryVO, ComTaskTargetDTO, ComTaskTarget> {
List<ComTaskTargetDTO> getListByObjectId(String objectId);
}
\ No newline at end of file
package com.yiboshi.science.dao;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yiboshi.science.base.BaseDAO;
import com.yiboshi.science.entity.ComProject;
import com.yiboshi.science.entity.ComUnit;
import com.yiboshi.science.param.dto.ComExpertDTO;
import com.yiboshi.science.param.dto.ComUnitDTO;
import com.yiboshi.science.param.dto.DataStatisticsDTO;
import com.yiboshi.science.param.query.ComUnitQueryVO;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* 单位表 DAO
*
* @author lkl
* @version 2021-08-26
*/
public interface ComUnitDAO extends BaseMapper<ComUnit>, BaseDAO<ComUnitQueryVO, ComUnitDTO,ComUnit> {
String getMaxTreeCode (String Code);
ComUnitDTO getUnitById(String id);
ComUnitDTO getUnitByTreeCode(String treeCode);
List<ComUnitDTO> getList();
DataStatisticsDTO getRegisterUnitCount(@Param("ew") Wrapper<ComProject> queryWrapper);
DataStatisticsDTO getRegisterUnitCountByDay(@Param("ew") Wrapper<ComProject> queryWrapper);
}
package com.yiboshi.science.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yiboshi.science.base.BaseDAO;
import com.yiboshi.science.entity.ComYear;
import com.yiboshi.science.param.dto.ComYearDTO;
import com.yiboshi.science.param.query.ComYearQueryVO;
import org.apache.ibatis.annotations.Param;
/**
* 年度设置表 DAO
*
* @author lkl
* @version 2021-08-26
*/
public interface ComYearDAO extends BaseMapper<ComYear>, BaseDAO<ComYearQueryVO, ComYearDTO,ComYear> {
Integer getMaxYearByType(@Param(value="yearType") int yearType);
}
\ No newline at end of file
package com.yiboshi.science.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yiboshi.science.base.BaseDAO;
import com.yiboshi.science.entity.LogsException;
import com.yiboshi.science.param.dto.LogsExceptionDTO;
import com.yiboshi.science.param.query.LogsExceptionQueryVO;
/**
* 异常日志 DAO
*
* @author lkl
* @version 2021-08-26
*/
public interface LogsExceptionDAO extends BaseMapper<LogsException>, BaseDAO<LogsExceptionQueryVO, LogsExceptionDTO,LogsException> {
}
\ No newline at end of file
package com.yiboshi.science.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yiboshi.science.base.BaseDAO;
import com.yiboshi.science.entity.LogsLogin;
import com.yiboshi.science.param.dto.DataStatisticsDTO;
import com.yiboshi.science.param.dto.LogsLoginDTO;
import com.yiboshi.science.param.query.LogsLoginQueryVO;
/**
* 登录日志表 DAO
*
* @author lkl
* @version 2021-08-26
*/
public interface LogsLoginDAO extends BaseMapper<LogsLogin>, BaseDAO<LogsLoginQueryVO, LogsLoginDTO,LogsLogin> {
DataStatisticsDTO getCount();
DataStatisticsDTO getCountByDay();
}
\ No newline at end of file
package com.yiboshi.science.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yiboshi.science.base.BaseDAO;
import com.yiboshi.science.entity.LogsOperation;
import com.yiboshi.science.param.dto.LogsOperationDTO;
import com.yiboshi.science.param.query.LogsOperationQueryVO;
/**
* 操作日志表 DAO
*
* @author lkl
* @version 2021-08-26
*/
public interface LogsOperationDAO extends BaseMapper<LogsOperation>, BaseDAO<LogsOperationQueryVO, LogsOperationDTO,LogsOperation> {
}
\ No newline at end of file
package com.yiboshi.science.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yiboshi.science.base.BaseDAO;
import com.yiboshi.science.entity.LogsRequestException;
import com.yiboshi.science.param.dto.LogsRequestExceptionDTO;
import com.yiboshi.science.param.query.LogsRequestExceptionQueryVO;
/**
* 请求异常日志表 DAO
*
* @author lkl
* @version 2021-08-26
*/
public interface LogsRequestExceptionDAO extends BaseMapper<LogsRequestException>, BaseDAO<LogsRequestExceptionQueryVO, LogsRequestExceptionDTO,LogsRequestException> {
}
\ No newline at end of file
package com.yiboshi.science.dao;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yiboshi.science.base.BaseDAO;
import com.yiboshi.science.entity.SystemMenu;
import com.yiboshi.science.param.dto.SystemMenuDTO;
import com.yiboshi.science.param.query.SystemMenuQueryVO;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* 菜单表 DAO
*
* @author lkl
* @version 2021-08-26
*/
public interface SystemMenuDAO extends BaseMapper<SystemMenu>, BaseDAO<SystemMenuQueryVO,SystemMenuDTO,SystemMenu> {
List<SystemMenuDTO> findByRoleId( @Param("ew") Wrapper<SystemMenu> queryWrapper);
}
\ No newline at end of file
package com.yiboshi.science.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yiboshi.science.base.BaseDAO;
import com.yiboshi.science.entity.SystemMenuRole;
import com.yiboshi.science.param.dto.SystemMenuRoleDTO;
import com.yiboshi.science.param.query.SystemMenuRoleQueryVO;
import java.util.List;
/**
* 菜单权限表 DAO
*
* @author lkl
* @version 2021-08-26
*/
public interface SystemMenuRoleDAO extends BaseMapper<SystemMenuRole>, BaseDAO<SystemMenuRoleQueryVO, SystemMenuRoleDTO, SystemMenuRole> {
void deleteMenuRoleBatch(int roleId, String parentId);
void deleteMenuRole(int roleId, String menuId);
List<SystemMenuRole> getMenuListById(int roleId, String parentId, String menuId);
}
\ No newline at end of file
package com.yiboshi.science.dao;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yiboshi.science.base.BaseDAO;
import com.yiboshi.science.entity.SystemParameter;
import com.yiboshi.science.param.dto.SystemParameterDTO;
import com.yiboshi.science.param.query.SystemParameterQueryVO;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* 参数表 DAO
*
* @author lkl
* @version 2021-08-26
*/
public interface SystemParameterDAO extends BaseMapper<SystemParameter>, BaseDAO<SystemParameterQueryVO, SystemParameterDTO,SystemParameter> {
List<SystemParameter> getList(@Param("ew") Wrapper<SystemParameter> queryWrapper);
List<SystemParameter> getParentParameterList();
}
\ No newline at end of file
package com.yiboshi.science.dao;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yiboshi.science.base.BaseDAO;
import com.yiboshi.science.entity.SystemParameterType;
import com.yiboshi.science.param.dto.SystemParameterTypeDTO;
import com.yiboshi.science.param.query.SystemParameterTypeQueryVO;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* 参数类型表 DAO
*
* @author lkl
* @version 2021-08-26
*/
public interface SystemParameterTypeDAO extends BaseMapper<SystemParameterType>, BaseDAO<SystemParameterTypeQueryVO, SystemParameterTypeDTO,SystemParameterType> {
List<SystemParameterType> getList(@Param("ew") QueryWrapper queryWrapper);
Integer getMaxTypeId();
}
\ No newline at end of file
package com.yiboshi.science.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yiboshi.science.base.BaseDAO;
import com.yiboshi.science.entity.SystemRole;
import com.yiboshi.science.param.dto.SystemRoleDTO;
import com.yiboshi.science.param.query.SystemRoleQueryVO;
/**
* 系统角色表 DAO
*
* @author lkl
* @version 2021-08-26
*/
public interface SystemRoleDAO extends BaseMapper<SystemRole>, BaseDAO<SystemRoleQueryVO, SystemRoleDTO,SystemRole> {
Integer getMaxRoleId();
}
\ No newline at end of file
package com.yiboshi.science.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yiboshi.science.base.BaseDAO;
import com.yiboshi.science.entity.SystemSet;
import com.yiboshi.science.param.dto.SystemSetDTO;
import com.yiboshi.science.param.query.SystemSetQueryVO;
/**
* 配置表 DAO
*
* @author lkl
* @version 2021-08-26
*/
public interface SystemSetDAO extends BaseMapper<SystemSet>, BaseDAO<SystemSetQueryVO, SystemSetDTO,SystemSet> {
}
\ No newline at end of file
package com.yiboshi.science.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yiboshi.science.base.BaseDAO;
import com.yiboshi.science.entity.SystemUser;
import com.yiboshi.science.param.dto.SystemUserDTO;
import com.yiboshi.science.param.query.SystemUserQueryVO;
/**
* 用户信息表 DAO
*
* @author lkl
* @version 2021-08-26
*/
public interface SystemUserDAO extends BaseMapper<SystemUser>, BaseDAO<SystemUserQueryVO,SystemUserDTO, SystemUser> {
SystemUserDTO findByName(String userName);
String getMaxUsername(String Code);
SystemUser getByUserName(String userName);
SystemUserDTO getSystemUserById(String id);
}
package com.yiboshi.science.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yiboshi.science.base.BaseDAO;
import com.yiboshi.science.entity.SystemUserRole;
import com.yiboshi.science.param.dto.SystemUserDTO;
import com.yiboshi.science.param.dto.SystemUserRoleDTO;
import com.yiboshi.science.param.query.SystemUserRoleQueryVO;
import java.util.List;
/**
* 用户角色表 DAO
*
* @author lkl
* @version 2021-08-26
*/
public interface SystemUserRoleDAO extends BaseMapper<SystemUserRole>, BaseDAO<SystemUserRoleQueryVO,SystemUserRoleDTO, SystemUserRole> {
SystemUserDTO getUserRoleByCertId(String certId, String roleId);
List<SystemUserRoleDTO> getRoleListByPersonId(String personId, String roleId);
}
package com.yiboshi.science.entity;
import lombok.Getter;
import lombok.Setter;
/**
* @author Anker
* @date 2020-11-30
*/
@Getter
@Setter
public class AuthUser {
private String username;
private String password;
private String code;
private String uuid;
}
package com.yiboshi.science.entity;
import com.yiboshi.science.base.BaseEntity;
import lombok.Getter;
import lombok.Setter;
import java.util.Date;
/**
* 年度设置表
*
* @author lkl
* @version 2021-08-26
*/
@Getter
@Setter
public class ComBatch extends BaseEntity {
/** 年度 */
private Integer year;
/** 批次 */
private Integer batch;
/** 批次类型 1科研项目申报 2重点学科申报 */
private Integer projType;
/** 申报开始时间 */
private Date reportStart;
/** 申报结束时间 */
private Date reportEnd;
/** 单位上报到州市级行政单位开始时间 */
private Date unitStart;
/** 单位上报到州市级行政单位结束时间 */
private Date unitEnd;
/** 州市级行政单位报到省卫健委开始时间 */
private Date prefectureStart;
/** 州市级行政单位报到省卫健委结束时间 */
private Date prefectureEnd;
/** 省直单位报到省卫健委开始时间 */
private Date provinceStart;
/** 省直单位报到省卫健委结束时间 */
private Date provinceEnd;
/** 专家审核开始时间 */
private Date expertStart;
/** 专家审核结束时间 */
private Date expertEnd;
/** 备注 */
private String remark;
}
\ No newline at end of file
package com.yiboshi.science.entity;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.yiboshi.science.base.BaseEntity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import org.hibernate.validator.constraints.Length;
import java.util.Date;
/**
* 验收材料目录表
*
* @author lkl
* @version 2021-08-26
*/
@Getter
@Setter
public class ComConclusionCatalog extends BaseEntity {
/** 结题信息表id */
@ApiModelProperty(value = "结题信息表id", position = 1)
@Length(max=36, message = "结题信息表id不能大于36")
private String conclusionId;
/** 材料名称 */
@ApiModelProperty(value = "材料名称", position = 2)
@Length(max=36, message = "材料名称大于100")
private String name;
/** 备注 */
@ApiModelProperty(value = "备注", position = 19 )
@Length(max=200, message = "备注不能大于200")
private String remark;
/** 排序 */
@ApiModelProperty(value = "排序", position = 10 )
private Integer showIndex;
}
\ No newline at end of file
package com.yiboshi.science.entity;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.yiboshi.science.base.BaseEntity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import org.hibernate.validator.constraints.Length;
import java.math.BigDecimal;
import java.util.Date;
/**
* 结题经费记录表
*
* @author lkl
* @version 2021-08-26
*/
@Getter
@Setter
public class ComConclusionFunds extends BaseEntity {
/** 结题信息表id */
@ApiModelProperty(value = "结题信息表id", position = 1)
@Length(max=36, message = "结题信息表id不能大于36")
private String conclusionId;
/** 年度 */
@ApiModelProperty(value = "年度", position = 2)
private Integer year;
/** 项目 */
@ApiModelProperty(value = "项目", position = 3)
@Length(max=36, message = "项目不能大于200")
private String name;
/** 金额 */
@ApiModelProperty(value = "金额", position = 4)
private BigDecimal amount;
/** 用途 */
@ApiModelProperty(value = "用途", position = 8)
@Length(max=36, message = "用途不能大于200")
private String used;
/** 类型 1拔款 2其它途径筹资 3支出项目 */
@ApiModelProperty(value = "类型 1拔款 2其它途径筹资 3支出项目", position = 2)
private Integer type;
/** 排序 */
@ApiModelProperty(value = "排序", position = 10 )
private Integer showIndex;
}
\ No newline at end of file
package com.yiboshi.science.entity;
import com.yiboshi.science.base.BaseEntity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import org.hibernate.validator.constraints.Length;
import java.math.BigDecimal;
/**
* 结题主要研究人员表
*
* @author lkl
* @version 2021-08-26
*/
@Getter
@Setter
public class ComConclusionResearchers extends BaseEntity {
/** 结题信息表id */
@ApiModelProperty(value = "结题信息表id", position = 1)
@Length(max=36, message = "结题信息表id不能大于36")
private String conclusionId;
/** 姓名 */
@ApiModelProperty(value = "姓名", position = 3)
@Length(max=36, message = "姓名不能大于50")
private String name;
/** 性别 */
@ApiModelProperty(value = "性别", position = 3)
@Length(max=36, message = "性别不能大于2")
private String sex;
/** 年龄 */
@ApiModelProperty(value = "金额", position = 4)
private Integer age;
/** 技术职称 */
@ApiModelProperty(value = "技术职称", position = 5)
@Length(max=36, message = "技术职称不能大于36")
private String technicalTitle;
/** 主要贡献 */
@ApiModelProperty(value = "主要贡献", position = 6)
@Length(max=36, message = "主要贡献不能大于1000")
private String contributions;
/** 排序 */
@ApiModelProperty(value = "排序", position = 10 )
private Integer showIndex;
}
\ No newline at end of file
package com.yiboshi.science.entity;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.yiboshi.science.base.BaseEntity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import org.hibernate.validator.constraints.Length;
import java.math.BigDecimal;
import java.util.Date;
/**
* 结题论文记录表
*
* @author lkl
* @version 2021-08-26
*/
@Getter
@Setter
public class ComConclusionThesis extends BaseEntity {
/** 结题信息表id */
@ApiModelProperty(value = "结题信息表id", position = 1)
@Length(max=36, message = "结题信息表id不能大于36")
private String conclusionId;
/** 论文名称 */
@ApiModelProperty(value = "论文名称", position = 2)
@Length(max=36, message = "论文名称不能大于100")
private String name;
/** 作者姓名 */
@ApiModelProperty(value = "作者姓名", position = 3)
@Length(max=36, message = "作者姓名不能大于50")
private String author;
/** 发表年月 */
@ApiModelProperty(value = "发表年月", position = 4 )
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
private Date publishDate;
/** 发表在何种刊物 */
@ApiModelProperty(value = "发表在何种刊物", position = 5)
@Length(max=36, message = "发表在何种刊物不能大于200")
private String publication;
/** 国内外反映应用情况 */
@ApiModelProperty(value = "国内外反映应用情况", position = 6)
@Length(max=36, message = "国内外反映应用情况不能大于200")
private String application;
/** 排序 */
@ApiModelProperty(value = "排序", position = 10 )
private Integer showIndex;
/** 附件Id */
@ApiModelProperty(value = "附件Id", position = 1 )
@Length(max=36, message = "附件Id不能大于36")
private String downloadId;
}
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment