├── .gitignore ├── .settings ├── .jsdtscope ├── org.eclipse.core.resources.prefs ├── org.eclipse.jdt.core.prefs ├── org.eclipse.m2e.core.prefs ├── org.eclipse.wst.common.component ├── org.eclipse.wst.common.project.facet.core.xml ├── org.eclipse.wst.jsdt.ui.superType.container ├── org.eclipse.wst.jsdt.ui.superType.name └── org.eclipse.wst.validation.prefs ├── pom.xml └── src └── main ├── java └── com │ └── wymessi │ ├── Application.java │ ├── DBConfig.java │ ├── MyBatisConfig.java │ ├── MyBatisMapperScannerConfig.java │ ├── WebStartApplication.java │ ├── controller │ ├── EntityFieldMappingController.java │ ├── FieldController.java │ ├── GroupController.java │ ├── IndexController.java │ ├── ProjectController.java │ ├── ReviewController.java │ └── UserController.java │ ├── dao │ ├── AllocateDao.java │ ├── EntityFieldMappingDao.java │ ├── FieldDao.java │ ├── GroupDao.java │ ├── ProjectDao.java │ ├── ReviewDao.java │ └── UserDao.java │ ├── exception │ ├── CustomException.java │ └── GlobalExceptionHandler.java │ ├── filter │ ├── CharacterEncodingFilter.java │ ├── DruidStatFilter.java │ ├── DruidStatViewServlet.java │ ├── HtmlFilter.java │ └── UserFilter.java │ ├── param │ ├── CustomParam.java │ ├── FieldsListParam.java │ ├── GenerateApplyParam.java │ ├── GroupAllocateParam.java │ ├── GroupListParam.java │ ├── ProjectListParam.java │ └── UserListParam.java │ ├── po │ ├── Allocate.java │ ├── EntityField.java │ ├── Field.java │ ├── Group.java │ ├── Project.java │ ├── Result.java │ ├── Review.java │ ├── SysRole.java │ └── SysUser.java │ ├── service │ ├── AllocateService.java │ ├── EntityFieldMappingService.java │ ├── FieldService.java │ ├── GroupService.java │ ├── ProjectService.java │ ├── ReviewService.java │ ├── RoleService.java │ ├── UserService.java │ └── impl │ │ ├── AllocateServiceImpl.java │ │ ├── EntityFieldMappingServiceImpl.java │ │ ├── FieldServiceImpl.java │ │ ├── GroupServiceImpl.java │ │ ├── ProjectServiceImpl.java │ │ ├── ReviewServiceImpl.java │ │ ├── RoleServiceImpl.java │ │ └── UserServiceImpl.java │ └── utils │ ├── CustomDateUtils.java │ ├── FileUtils.java │ ├── ListUtils.java │ ├── Md5Utils.java │ ├── RedisScriptEngine.java │ ├── RedisUtils.java │ ├── RequestUtils.java │ ├── Result.java │ └── UUIDUtils.java └── resources ├── SQLMapConfig.xml ├── application.yml ├── mapper ├── allocate.xml ├── entityField.xml ├── field.xml ├── group.xml ├── project.xml ├── review.xml └── user.xml ├── static ├── css │ ├── allocate.css │ ├── applyinfo.css │ ├── baseinfo.css │ ├── login.css │ ├── register.css │ └── upload.css ├── flatui │ ├── css │ │ ├── flat-ui.css │ │ ├── flat-ui.css.map │ │ ├── flat-ui.min.css │ │ └── vendor │ │ │ └── bootstrap │ │ │ ├── css │ │ │ └── bootstrap.min.css │ │ │ └── fonts │ │ │ ├── glyphicons-halflings-regular.eot │ │ │ ├── glyphicons-halflings-regular.svg │ │ │ ├── glyphicons-halflings-regular.ttf │ │ │ ├── glyphicons-halflings-regular.woff │ │ │ └── glyphicons-halflings-regular.woff2 │ ├── fonts │ │ ├── glyphicons │ │ │ ├── flat-ui-icons-regular.eot │ │ │ ├── flat-ui-icons-regular.svg │ │ │ ├── flat-ui-icons-regular.ttf │ │ │ ├── flat-ui-icons-regular.woff │ │ │ └── selection.json │ │ └── lato │ │ │ ├── lato-black.eot │ │ │ ├── lato-black.svg │ │ │ ├── lato-black.ttf │ │ │ ├── lato-black.woff │ │ │ ├── lato-bold.eot │ │ │ ├── lato-bold.svg │ │ │ ├── lato-bold.ttf │ │ │ ├── lato-bold.woff │ │ │ ├── lato-bolditalic.eot │ │ │ ├── lato-bolditalic.svg │ │ │ ├── lato-bolditalic.ttf │ │ │ ├── lato-bolditalic.woff │ │ │ ├── lato-italic.eot │ │ │ ├── lato-italic.svg │ │ │ ├── lato-italic.ttf │ │ │ ├── lato-italic.woff │ │ │ ├── lato-light.eot │ │ │ ├── lato-light.svg │ │ │ ├── lato-light.ttf │ │ │ ├── lato-light.woff │ │ │ ├── lato-regular.eot │ │ │ ├── lato-regular.svg │ │ │ ├── lato-regular.ttf │ │ │ └── lato-regular.woff │ ├── img │ │ ├── favicon.ico │ │ ├── icons │ │ │ ├── png │ │ │ │ ├── Book.png │ │ │ │ ├── Calendar.png │ │ │ │ ├── Chat.png │ │ │ │ ├── Clipboard.png │ │ │ │ ├── Compas.png │ │ │ │ ├── Gift-Box.png │ │ │ │ ├── Infinity-Loop.png │ │ │ │ ├── Mail.png │ │ │ │ ├── Map.png │ │ │ │ ├── Pensils.png │ │ │ │ ├── Pocket.png │ │ │ │ ├── Retina-Ready.png │ │ │ │ ├── Toilet-Paper.png │ │ │ │ └── Watches.png │ │ │ └── svg │ │ │ │ ├── book.svg │ │ │ │ ├── calendar.svg │ │ │ │ ├── chat.svg │ │ │ │ ├── clipboard.svg │ │ │ │ ├── clocks.svg │ │ │ │ ├── compas.svg │ │ │ │ ├── gift-box.svg │ │ │ │ ├── loop.svg │ │ │ │ ├── mail.svg │ │ │ │ ├── map.svg │ │ │ │ ├── paper-bag.svg │ │ │ │ ├── pencils.svg │ │ │ │ ├── retina.svg │ │ │ │ ├── ribbon.svg │ │ │ │ └── toilet-paper.svg │ │ ├── login │ │ │ ├── icon.png │ │ │ ├── imac-2x.png │ │ │ └── imac.png │ │ └── tile │ │ │ ├── ribbon-2x.png │ │ │ └── ribbon.png │ └── js │ │ ├── flat-ui.js │ │ ├── flat-ui.min.js │ │ └── vendor │ │ ├── html5shiv.js │ │ ├── jquery.min.js │ │ ├── jquery.min.map │ │ ├── respond.min.js │ │ ├── video-js.swf │ │ └── video.js └── layui │ ├── css │ ├── layui.css │ ├── layui.mobile.css │ └── modules │ │ ├── code.css │ │ ├── laydate │ │ └── default │ │ │ └── laydate.css │ │ └── layer │ │ └── default │ │ ├── icon-ext.png │ │ ├── icon.png │ │ ├── layer.css │ │ ├── loading-0.gif │ │ ├── loading-1.gif │ │ └── loading-2.gif │ ├── font │ ├── iconfont.eot │ ├── iconfont.svg │ ├── iconfont.ttf │ └── iconfont.woff │ ├── images │ └── face │ │ ├── 0.gif │ │ ├── 1.gif │ │ ├── 10.gif │ │ ├── 11.gif │ │ ├── 12.gif │ │ ├── 13.gif │ │ ├── 14.gif │ │ ├── 15.gif │ │ ├── 16.gif │ │ ├── 17.gif │ │ ├── 18.gif │ │ ├── 19.gif │ │ ├── 2.gif │ │ ├── 20.gif │ │ ├── 21.gif │ │ ├── 22.gif │ │ ├── 23.gif │ │ ├── 24.gif │ │ ├── 25.gif │ │ ├── 26.gif │ │ ├── 27.gif │ │ ├── 28.gif │ │ ├── 29.gif │ │ ├── 3.gif │ │ ├── 30.gif │ │ ├── 31.gif │ │ ├── 32.gif │ │ ├── 33.gif │ │ ├── 34.gif │ │ ├── 35.gif │ │ ├── 36.gif │ │ ├── 37.gif │ │ ├── 38.gif │ │ ├── 39.gif │ │ ├── 4.gif │ │ ├── 40.gif │ │ ├── 41.gif │ │ ├── 42.gif │ │ ├── 43.gif │ │ ├── 44.gif │ │ ├── 45.gif │ │ ├── 46.gif │ │ ├── 47.gif │ │ ├── 48.gif │ │ ├── 49.gif │ │ ├── 5.gif │ │ ├── 50.gif │ │ ├── 51.gif │ │ ├── 52.gif │ │ ├── 53.gif │ │ ├── 54.gif │ │ ├── 55.gif │ │ ├── 56.gif │ │ ├── 57.gif │ │ ├── 58.gif │ │ ├── 59.gif │ │ ├── 6.gif │ │ ├── 60.gif │ │ ├── 61.gif │ │ ├── 62.gif │ │ ├── 63.gif │ │ ├── 64.gif │ │ ├── 65.gif │ │ ├── 66.gif │ │ ├── 67.gif │ │ ├── 68.gif │ │ ├── 69.gif │ │ ├── 7.gif │ │ ├── 70.gif │ │ ├── 71.gif │ │ ├── 8.gif │ │ └── 9.gif │ ├── lay │ └── modules │ │ ├── carousel.js │ │ ├── code.js │ │ ├── element.js │ │ ├── flow.js │ │ ├── form.js │ │ ├── jquery.js │ │ ├── laydate.js │ │ ├── layedit.js │ │ ├── layer.js │ │ ├── laypage.js │ │ ├── laytpl.js │ │ ├── mobile.js │ │ ├── table.js │ │ ├── tree.js │ │ ├── upload.js │ │ └── util.js │ ├── layui.all.js │ └── layui.js └── templates ├── applicant ├── applyinfo.html ├── baseinfo.html ├── register.html └── upload.html ├── expert ├── baseinfo.html ├── grade.html ├── result.html ├── review.html └── reviewinfo.html ├── login.html ├── message.html └── system ├── allocateManage ├── allocate.html └── allocateManage.html ├── fieldManage ├── addField.html └── fieldManage.html ├── groupManage ├── addGroup.html ├── addProject.html ├── groupManage.html └── groupProject.html ├── projectManage └── manage.html └── userManage ├── addUser.html ├── allocateField.html ├── applicant.html ├── expert.html └── system.html /.gitignore: -------------------------------------------------------------------------------- 1 | /.settings/ 2 | /target/ 3 | 4 | # built application files 5 | *.apk 6 | *.ap_ 7 | 8 | # files for the dex VM 9 | *.dex 10 | 11 | # Java class files 12 | *.class 13 | *.jar 14 | 15 | # generated files 16 | bin/ 17 | gen/ 18 | 19 | # Eclipse project files 20 | .classpath 21 | .project 22 | 23 | 24 | /target/ 25 | -------------------------------------------------------------------------------- /.settings/.jsdtscope: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /.settings/org.eclipse.core.resources.prefs: -------------------------------------------------------------------------------- 1 | eclipse.preferences.version=1 2 | encoding//src/main/java=UTF-8 3 | encoding//src/main/resources=UTF-8 4 | encoding//src/test/java=UTF-8 5 | encoding//src/test/resources=UTF-8 6 | encoding/=UTF-8 7 | -------------------------------------------------------------------------------- /.settings/org.eclipse.jdt.core.prefs: -------------------------------------------------------------------------------- 1 | eclipse.preferences.version=1 2 | org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled 3 | org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate 4 | org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 5 | org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve 6 | org.eclipse.jdt.core.compiler.compliance=1.7 7 | org.eclipse.jdt.core.compiler.debug.lineNumber=generate 8 | org.eclipse.jdt.core.compiler.debug.localVariable=generate 9 | org.eclipse.jdt.core.compiler.debug.sourceFile=generate 10 | org.eclipse.jdt.core.compiler.problem.assertIdentifier=error 11 | org.eclipse.jdt.core.compiler.problem.enumIdentifier=error 12 | org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning 13 | org.eclipse.jdt.core.compiler.source=1.7 14 | -------------------------------------------------------------------------------- /.settings/org.eclipse.m2e.core.prefs: -------------------------------------------------------------------------------- 1 | activeProfiles= 2 | eclipse.preferences.version=1 3 | resolveWorkspaceProjects=true 4 | version=1 5 | -------------------------------------------------------------------------------- /.settings/org.eclipse.wst.common.component: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.settings/org.eclipse.wst.common.project.facet.core.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /.settings/org.eclipse.wst.jsdt.ui.superType.container: -------------------------------------------------------------------------------- 1 | org.eclipse.wst.jsdt.launching.baseBrowserLibrary -------------------------------------------------------------------------------- /.settings/org.eclipse.wst.jsdt.ui.superType.name: -------------------------------------------------------------------------------- 1 | Window -------------------------------------------------------------------------------- /.settings/org.eclipse.wst.validation.prefs: -------------------------------------------------------------------------------- 1 | disabled=06target 2 | eclipse.preferences.version=1 3 | -------------------------------------------------------------------------------- /pom.xml: -------------------------------------------------------------------------------- 1 | 3 | 4.0.0 4 | com.wymessi 5 | prs 6 | war 7 | 0.0.1-SNAPSHOT 8 | prs Maven Webapp 9 | http://maven.apache.org 10 | 11 | 12 | false 13 | 14 | 15 | org.springframework.boot 16 | spring-boot-starter-parent 17 | 1.4.2.RELEASE 18 | 19 | 20 | 21 | org.springframework.boot 22 | spring-boot-starter-web 23 | 24 | 25 | 26 | org.springframework 27 | spring-tx 28 | 29 | 30 | 31 | org.springframework.boot 32 | spring-boot-starter-jdbc 33 | 34 | 35 | 36 | org.springframework.boot 37 | spring-boot-starter-aop 38 | 39 | 40 | 41 | org.springframework.boot 42 | spring-boot-starter-thymeleaf 43 | 44 | 45 | 46 | 47 | org.springframework.boot 48 | spring-boot-devtools 49 | true 50 | 51 | 52 | 53 | 54 | javax.servlet 55 | javax.servlet-api 56 | provided 57 | 58 | 59 | 60 | com.alibaba 61 | druid 62 | 1.0.27 63 | 64 | 65 | org.mybatis 66 | mybatis-spring 67 | 1.3.0 68 | 69 | 70 | org.mybatis 71 | mybatis 72 | 3.4.1 73 | 74 | 75 | mysql 76 | mysql-connector-java 77 | 78 | 79 | com.alibaba 80 | fastjson 81 | 1.2.21 82 | 83 | 84 | 85 | commons-io 86 | commons-io 87 | 2.5 88 | 89 | 90 | 91 | org.apache.commons 92 | commons-lang3 93 | 3.5 94 | 95 | 96 | 97 | redis.clients 98 | jedis 99 | 2.9.0 100 | 101 | 102 | commons-pool 103 | commons-pool 104 | 105 | 106 | 107 | 108 | prs 109 | 110 | 111 | org.apache.maven.plugins 112 | maven-compiler-plugin 113 | 3.2 114 | 115 | 1.7 116 | 1.7 117 | 118 | 119 | 120 | 121 | 122 | -------------------------------------------------------------------------------- /src/main/java/com/wymessi/Application.java: -------------------------------------------------------------------------------- 1 | package com.wymessi; 2 | 3 | import java.util.Date; 4 | 5 | import org.springframework.boot.SpringApplication; 6 | import org.springframework.boot.autoconfigure.EnableAutoConfiguration; 7 | import org.springframework.boot.autoconfigure.SpringBootApplication; 8 | import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; 9 | import org.springframework.boot.autoconfigure.web.HttpMessageConverters; 10 | import org.springframework.boot.web.servlet.ServletComponentScan; 11 | import org.springframework.context.annotation.Bean; 12 | import org.springframework.context.annotation.EnableAspectJAutoProxy; 13 | import org.springframework.http.converter.HttpMessageConverter; 14 | import org.springframework.transaction.annotation.EnableTransactionManagement; 15 | 16 | import com.alibaba.fastjson.serializer.SerializeConfig; 17 | import com.alibaba.fastjson.serializer.SerializerFeature; 18 | import com.alibaba.fastjson.serializer.SimpleDateFormatSerializer; 19 | import com.alibaba.fastjson.support.config.FastJsonConfig; 20 | import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter; 21 | 22 | @ServletComponentScan // 本项目中,确保druid监控servlet能被扫到 23 | @SpringBootApplication(scanBasePackages = { "com.wymessi" }) 24 | @EnableAspectJAutoProxy 25 | @EnableTransactionManagement(proxyTargetClass = true) 26 | @EnableAutoConfiguration(exclude = { DataSourceAutoConfiguration.class}) 27 | public class Application { 28 | 29 | public static void main(String[] args) { 30 | SpringApplication.run(Application.class, args); 31 | } 32 | 33 | @Bean 34 | public HttpMessageConverters fastJsonHttpMessageConverters() { 35 | FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter(); 36 | FastJsonConfig fastJsonConfig = new FastJsonConfig(); 37 | // fastJsonConfig.setSerializerFeatures(SerializerFeature.BrowserCompatible); 38 | // fastJsonConfig.setSerializerFeatures(SerializerFeature.BrowserSecure); 39 | fastJsonConfig.setSerializerFeatures(SerializerFeature.DisableCircularReferenceDetect); 40 | // fastJsonConfig.setSerializerFeatures(SerializerFeature.WriteMapNullValue); 41 | SerializeConfig config = new SerializeConfig(); 42 | config.put(Date.class, new SimpleDateFormatSerializer("yyyy-MM-dd HH:mm:ss")); 43 | fastJsonConfig.setSerializeConfig(config); 44 | fastConverter.setFastJsonConfig(fastJsonConfig); 45 | HttpMessageConverter converter = fastConverter; 46 | return new HttpMessageConverters(converter); 47 | } 48 | 49 | } 50 | -------------------------------------------------------------------------------- /src/main/java/com/wymessi/DBConfig.java: -------------------------------------------------------------------------------- 1 | package com.wymessi; 2 | 3 | import java.sql.SQLException; 4 | 5 | import javax.sql.DataSource; 6 | import org.slf4j.Logger; 7 | import org.slf4j.LoggerFactory; 8 | import org.springframework.beans.factory.annotation.Value; 9 | import org.springframework.context.annotation.Bean; 10 | import org.springframework.context.annotation.Configuration; 11 | import org.springframework.context.annotation.Primary; 12 | 13 | import com.alibaba.druid.pool.DruidDataSource; 14 | 15 | @Configuration 16 | public class DBConfig { 17 | private Logger logger = LoggerFactory.getLogger(DBConfig.class); 18 | 19 | @Value("${spring.datasource.url}") 20 | private String dbUrl; 21 | 22 | @Value("${spring.datasource.username}") 23 | private String username; 24 | 25 | @Value("${spring.datasource.password}") 26 | private String password; 27 | 28 | @Value("${spring.datasource.driver-class-name}") 29 | private String driverClassName; 30 | 31 | @Value("${spring.datasource.initialSize}") 32 | private int initialSize; 33 | 34 | @Value("${spring.datasource.minIdle}") 35 | private int minIdle; 36 | 37 | @Value("${spring.datasource.maxActive}") 38 | private int maxActive; 39 | 40 | @Value("${spring.datasource.maxWait}") 41 | private int maxWait; 42 | 43 | @Value("${spring.datasource.timeBetweenEvictionRunsMillis}") 44 | private int timeBetweenEvictionRunsMillis; 45 | 46 | @Value("${spring.datasource.minEvictableIdleTimeMillis}") 47 | private int minEvictableIdleTimeMillis; 48 | 49 | @Value("${spring.datasource.validationQuery}") 50 | private String validationQuery; 51 | 52 | @Value("${spring.datasource.testWhileIdle}") 53 | private boolean testWhileIdle; 54 | 55 | @Value("${spring.datasource.testOnBorrow}") 56 | private boolean testOnBorrow; 57 | 58 | @Value("${spring.datasource.testOnReturn}") 59 | private boolean testOnReturn; 60 | 61 | @Value("${spring.datasource.poolPreparedStatements}") 62 | private boolean poolPreparedStatements; 63 | 64 | @Value("${spring.datasource.filters}") 65 | private String filters; 66 | 67 | @Bean(name = "dataSource") //声明其为Bean实例 68 | @Primary //在同样的DataSource中,首先使用被标注的DataSource 69 | public DataSource dataSource(){ 70 | DruidDataSource datasource = new DruidDataSource(); 71 | 72 | datasource.setUrl(dbUrl); 73 | datasource.setUsername(username); 74 | datasource.setPassword(password); 75 | datasource.setDriverClassName(driverClassName); 76 | 77 | //configuration 78 | datasource.setInitialSize(initialSize); 79 | datasource.setMinIdle(minIdle); 80 | datasource.setMaxActive(maxActive); 81 | datasource.setMaxWait(maxWait); 82 | datasource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis); 83 | datasource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis); 84 | datasource.setValidationQuery(validationQuery); 85 | datasource.setTestWhileIdle(testWhileIdle); 86 | datasource.setTestOnBorrow(testOnBorrow); 87 | datasource.setTestOnReturn(testOnReturn); 88 | datasource.setPoolPreparedStatements(poolPreparedStatements); 89 | try { 90 | datasource.setFilters(filters); 91 | } catch (SQLException e) { 92 | logger.error("druid configuration initialization filter", e); 93 | } 94 | logger.info("数据库连接池初始化完成。。。"); 95 | return datasource; 96 | } 97 | 98 | 99 | } 100 | -------------------------------------------------------------------------------- /src/main/java/com/wymessi/MyBatisConfig.java: -------------------------------------------------------------------------------- 1 | package com.wymessi; 2 | 3 | import javax.sql.DataSource; 4 | 5 | import org.apache.ibatis.session.SqlSessionFactory; 6 | import org.mybatis.spring.SqlSessionFactoryBean; 7 | import org.springframework.beans.factory.annotation.Autowired; 8 | import org.springframework.beans.factory.annotation.Qualifier; 9 | import org.springframework.context.annotation.Bean; 10 | import org.springframework.context.annotation.Configuration; 11 | import org.springframework.core.io.support.PathMatchingResourcePatternResolver; 12 | import org.springframework.core.io.support.ResourcePatternResolver; 13 | 14 | 15 | /** 16 | * MyBatis基础配置 17 | * 18 | */ 19 | @Configuration 20 | public class MyBatisConfig { 21 | 22 | @Autowired 23 | @Qualifier("dataSource") 24 | private DataSource dataSource; 25 | 26 | @Bean(name = "sqlSessionFactory") 27 | public SqlSessionFactory sqlSessionFactoryBean(@Qualifier("dataSource") DataSource dataSource) { 28 | SqlSessionFactoryBean bean = new SqlSessionFactoryBean(); 29 | bean.setDataSource(dataSource); 30 | //添加XML目录 31 | ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); 32 | try { 33 | bean.setMapperLocations(resolver.getResources("classpath:mapper/**/*.xml")); 34 | bean.setConfigLocation(resolver.getResource("classpath:SQLMapConfig.xml")); 35 | return bean.getObject(); 36 | } catch (Exception e) { 37 | e.printStackTrace(); 38 | throw new RuntimeException(e); 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /src/main/java/com/wymessi/MyBatisMapperScannerConfig.java: -------------------------------------------------------------------------------- 1 | package com.wymessi; 2 | 3 | import org.mybatis.spring.mapper.MapperScannerConfigurer; 4 | import org.springframework.boot.autoconfigure.AutoConfigureAfter; 5 | import org.springframework.context.annotation.Bean; 6 | import org.springframework.context.annotation.Configuration; 7 | 8 | /** 9 | * MyBatis扫描接口 10 | * 11 | */ 12 | @Configuration 13 | // 注意,由于MapperScannerConfigurer执行的比较早,所以必须有下面的注解 14 | @AutoConfigureAfter(MyBatisConfig.class) 15 | public class MyBatisMapperScannerConfig { 16 | 17 | @Bean 18 | public MapperScannerConfigurer mapperScannerConfigurer() { 19 | MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer(); 20 | mapperScannerConfigurer.setSqlSessionFactoryBeanName("sqlSessionFactory"); 21 | mapperScannerConfigurer.setBasePackage("com.wymessi.dao"); 22 | return mapperScannerConfigurer; 23 | } 24 | 25 | } -------------------------------------------------------------------------------- /src/main/java/com/wymessi/WebStartApplication.java: -------------------------------------------------------------------------------- 1 | package com.wymessi; 2 | 3 | import org.springframework.boot.builder.SpringApplicationBuilder; 4 | import org.springframework.boot.web.support.SpringBootServletInitializer; 5 | 6 | public class WebStartApplication extends SpringBootServletInitializer { 7 | 8 | @Override 9 | protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { 10 | // 注意这里要指向原先用main方法执行的Application启动类 11 | return builder.sources(Application.class); 12 | } 13 | } -------------------------------------------------------------------------------- /src/main/java/com/wymessi/controller/EntityFieldMappingController.java: -------------------------------------------------------------------------------- 1 | package com.wymessi.controller; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | import javax.servlet.http.HttpSession; 7 | 8 | import org.springframework.beans.factory.annotation.Autowired; 9 | import org.springframework.stereotype.Controller; 10 | import org.springframework.util.CollectionUtils; 11 | import org.springframework.web.bind.annotation.RequestMapping; 12 | import org.springframework.web.bind.annotation.ResponseBody; 13 | 14 | import com.wymessi.exception.CustomException; 15 | import com.wymessi.po.EntityField; 16 | import com.wymessi.po.Field; 17 | import com.wymessi.po.SysUser; 18 | import com.wymessi.service.EntityFieldMappingService; 19 | import com.wymessi.service.FieldService; 20 | import com.wymessi.utils.Result; 21 | 22 | @Controller 23 | @RequestMapping("/entityField") 24 | public class EntityFieldMappingController { 25 | 26 | @Autowired 27 | private FieldService fieldService; 28 | 29 | /* @Autowired 30 | private ProjectService projectService;*/ 31 | 32 | @Autowired 33 | private EntityFieldMappingService entityFieldMappingService; 34 | 35 | /** 36 | * 查找相关领域 37 | * @param session 38 | * @param id 39 | * @return 40 | */ 41 | @ResponseBody 42 | @RequestMapping("/relateField") 43 | public Result getRelateFields(HttpSession session,Long id,String entityType){ 44 | SysUser user = (SysUser) session.getAttribute("user"); 45 | if (user == null) { 46 | throw new CustomException("未登录,请先登录", "/prs/"); 47 | } 48 | Result result = new Result(); 49 | List entityFields = entityFieldMappingService.listByEntityId(id,entityType); 50 | List fieldIds = new ArrayList(); 51 | if(CollectionUtils.isEmpty(entityFields)){ 52 | result.setData("查询不到相关领域"); 53 | return result; 54 | } 55 | for (EntityField entityField : entityFields) { 56 | fieldIds.add(entityField.getFieldId()); 57 | } 58 | List fields = null; 59 | if(!CollectionUtils.isEmpty(fieldIds)){ 60 | fields = fieldService.listByIds(fieldIds); 61 | } 62 | StringBuffer buffer = new StringBuffer(); 63 | for (Field field : fields) { 64 | buffer.append(field.getFieldName()).append(","); 65 | } 66 | String data = buffer.toString().substring(0,buffer.length()-1); 67 | result.setData(data); 68 | return result; 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /src/main/java/com/wymessi/controller/IndexController.java: -------------------------------------------------------------------------------- 1 | package com.wymessi.controller; 2 | 3 | import org.springframework.stereotype.Controller; 4 | import org.springframework.web.bind.annotation.RequestMapping; 5 | 6 | /** 7 | * 首页访问 控制器 8 | * 9 | * @author 王冶 10 | * 11 | */ 12 | @Controller 13 | public class IndexController { 14 | 15 | /** 16 | * 跳转首页 17 | * 18 | * @return 19 | */ 20 | @RequestMapping({ "/", "/index" }) 21 | public String index() { 22 | return "login"; 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/com/wymessi/dao/AllocateDao.java: -------------------------------------------------------------------------------- 1 | package com.wymessi.dao; 2 | 3 | import java.util.List; 4 | 5 | import com.wymessi.po.Allocate; 6 | 7 | public interface AllocateDao { 8 | 9 | int insert(Allocate allocate); 10 | 11 | List listByExpertId(Long id); 12 | 13 | List listByGroupId(Long groupId); 14 | } 15 | -------------------------------------------------------------------------------- /src/main/java/com/wymessi/dao/EntityFieldMappingDao.java: -------------------------------------------------------------------------------- 1 | package com.wymessi.dao; 2 | 3 | import java.util.List; 4 | 5 | import org.apache.ibatis.annotations.Param; 6 | 7 | import com.wymessi.po.EntityField; 8 | 9 | public interface EntityFieldMappingDao { 10 | /** 11 | * 插入关联记录 12 | * @param entityField 13 | */ 14 | public int insert(EntityField entityField); 15 | 16 | /** 17 | * 根据projectId查询 18 | * @param id 19 | * @return 20 | */ 21 | public List listByEntityId(@Param("id")Long id, @Param("entityType")String entityType); 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/com/wymessi/dao/FieldDao.java: -------------------------------------------------------------------------------- 1 | package com.wymessi.dao; 2 | 3 | import java.util.List; 4 | 5 | import org.apache.ibatis.annotations.Param; 6 | 7 | import com.wymessi.param.FieldsListParam; 8 | import com.wymessi.po.Field; 9 | 10 | public interface FieldDao { 11 | 12 | /** 13 | * 插入领域标签 14 | * @param field 15 | */ 16 | void insert(Field field); 17 | 18 | /** 19 | * 批量插入领域标签 20 | * @param field 21 | */ 22 | void insertBatch(@Param("fields")List fields); 23 | 24 | /** 25 | * 根据领域名查出 26 | * @param inputFields 27 | */ 28 | List listFieldsByNames(@Param("list")List inputFields); 29 | 30 | /** 31 | * 得到总记录数 32 | * @param param 33 | * @return 34 | */ 35 | int getTotalCount(FieldsListParam param); 36 | 37 | /** 38 | * 查询标签 39 | * @param param 40 | * @return 41 | */ 42 | List listField(FieldsListParam param); 43 | 44 | /** 45 | * 修改领域标签信息 46 | * 47 | */ 48 | int update(Field field); 49 | 50 | /** 51 | * 根据ID查询 52 | * @param id 53 | * @return 54 | */ 55 | Field getById(Long id); 56 | 57 | /** 58 | * 根据id删除领域 59 | * @param id 60 | */ 61 | public void deleteById(Long id); 62 | 63 | /** 64 | * 根据ID列表查询 65 | * @param fieldIds 66 | * @return 67 | */ 68 | List listByIds(@Param("list")List fieldIds); 69 | } 70 | -------------------------------------------------------------------------------- /src/main/java/com/wymessi/dao/GroupDao.java: -------------------------------------------------------------------------------- 1 | package com.wymessi.dao; 2 | 3 | import java.util.List; 4 | 5 | import com.wymessi.param.GroupListParam; 6 | import com.wymessi.po.Group; 7 | 8 | public interface GroupDao { 9 | 10 | /** 11 | * 添加项目分组 12 | * @param group 13 | */ 14 | void insert(Group group); 15 | 16 | /** 17 | * 得到总记录数 18 | * @param param 19 | * @return 20 | */ 21 | int getTotalCount(GroupListParam param); 22 | 23 | /** 24 | * 查询分组 25 | * @param param 26 | * @return 27 | */ 28 | List listGroup(GroupListParam param); 29 | 30 | /** 31 | * 修改领域标签信息 32 | * 33 | */ 34 | int update(Group group); 35 | 36 | /** 37 | * 根据ID查询 38 | * @param id 39 | * @return 40 | */ 41 | Group getById(Long id); 42 | 43 | } 44 | -------------------------------------------------------------------------------- /src/main/java/com/wymessi/dao/ProjectDao.java: -------------------------------------------------------------------------------- 1 | package com.wymessi.dao; 2 | 3 | import java.util.List; 4 | 5 | import org.apache.ibatis.annotations.Param; 6 | 7 | import com.wymessi.param.ProjectListParam; 8 | import com.wymessi.po.Project; 9 | 10 | public interface ProjectDao { 11 | 12 | /** 13 | * 插入项目申请记录 14 | * @param project 15 | */ 16 | void insert(Project project); 17 | 18 | /** 19 | * 查询projects 20 | * @param param 21 | * @return 22 | */ 23 | List listProject(ProjectListParam param); 24 | 25 | /** 26 | * 查询总记录数 27 | * @param param 28 | * @return 29 | */ 30 | int getTotalCount(ProjectListParam param); 31 | 32 | /** 33 | * 更新申请记录 34 | * @param project 35 | * @return 36 | */ 37 | int update(Project project); 38 | 39 | /** 40 | * 通过id查询项目申请记录 41 | * @param id 42 | * @return 43 | */ 44 | Project getProjectById(Long id); 45 | 46 | /** 47 | * 通过id删除项目申请记录 48 | * @param id 49 | */ 50 | void deleteById(Long id); 51 | 52 | /** 53 | * 查找分组下的所有项目 54 | * @param groupId 55 | * @return 56 | */ 57 | List listByGroupId(Long groupId); 58 | 59 | /** 60 | * 根据列表id更新状态,避免循环单次更新以提高效率 61 | * @param projectIds 62 | */ 63 | void updateStatusByIds(@Param("list")List projectIds, @Param("status")String status); 64 | 65 | /** 66 | * 某专家已评审项目总记录数 67 | * @param param 68 | * @return 69 | */ 70 | int getReivewdTotalCount(ProjectListParam param); 71 | 72 | /** 73 | * 某专家已评审项目 74 | * @param param 75 | * @return 76 | */ 77 | List listReivewdtProject(ProjectListParam param); 78 | 79 | void updateReviewCountById(Long id); 80 | } 81 | -------------------------------------------------------------------------------- /src/main/java/com/wymessi/dao/ReviewDao.java: -------------------------------------------------------------------------------- 1 | package com.wymessi.dao; 2 | 3 | import java.util.List; 4 | 5 | import org.apache.ibatis.annotations.Param; 6 | 7 | import com.wymessi.po.Review; 8 | 9 | public interface ReviewDao { 10 | 11 | void insert(Review review); 12 | 13 | List listByProjectId(Long id); 14 | 15 | Review getByExpertIdAndProjectId(@Param("expertId")Long expertId, @Param("projectId")Long projectId); 16 | 17 | } 18 | -------------------------------------------------------------------------------- /src/main/java/com/wymessi/dao/UserDao.java: -------------------------------------------------------------------------------- 1 | package com.wymessi.dao; 2 | 3 | import java.util.List; 4 | 5 | import org.apache.ibatis.annotations.Param; 6 | 7 | import com.wymessi.param.UserListParam; 8 | import com.wymessi.po.SysUser; 9 | 10 | public interface UserDao { 11 | 12 | /** 13 | * 注册 14 | * 15 | * @param applicant 16 | */ 17 | void register(SysUser sysUser); 18 | 19 | /** 20 | * 用户登陆 21 | * 22 | * @param param 23 | */ 24 | SysUser login(SysUser sysUser); 25 | 26 | /** 27 | * 修改个人信息 28 | * @param user 29 | */ 30 | int update(SysUser user); 31 | 32 | /** 33 | * 根据id查找用户 34 | * @param user 35 | * @return 36 | */ 37 | SysUser getUserById(Long id); 38 | 39 | /** 40 | * 通过name模糊搜索用户 41 | * @param createUserName 42 | * @return 43 | */ 44 | List getUserByUserName(String username); 45 | 46 | /** 47 | * 通过name和角色搜索用户 48 | * @param username 49 | * @param roleId 50 | * @return 51 | */ 52 | List listUsersByNameAndRole(UserListParam param); 53 | 54 | /** 55 | * 得到总记录数 56 | * @param username 57 | * @param roleId 58 | */ 59 | int getTotalCount(UserListParam param); 60 | 61 | /** 62 | * 根据id查询专家 63 | * @return 64 | */ 65 | List listExpertByIds(@Param("list")List idList); 66 | 67 | /** 68 | * 根据id删除用户 69 | * @param id 70 | */ 71 | void deleteById(Long id); 72 | } 73 | -------------------------------------------------------------------------------- /src/main/java/com/wymessi/exception/CustomException.java: -------------------------------------------------------------------------------- 1 | package com.wymessi.exception; 2 | 3 | /** 4 | * 自定义异常 5 | * 6 | * @author 王冶 7 | * 8 | */ 9 | public class CustomException extends RuntimeException { 10 | 11 | private static final long serialVersionUID = 1L; 12 | private String message; 13 | private String href; 14 | 15 | public CustomException(String message, String href) { 16 | super(); 17 | this.message = message; 18 | this.href = href; 19 | } 20 | 21 | public String getMessage() { 22 | return message; 23 | } 24 | 25 | public void setMessage(String message) { 26 | this.message = message; 27 | } 28 | 29 | public String getHref() { 30 | return href; 31 | } 32 | public void setHref(String href) { 33 | this.href = href; 34 | } 35 | 36 | } 37 | -------------------------------------------------------------------------------- /src/main/java/com/wymessi/exception/GlobalExceptionHandler.java: -------------------------------------------------------------------------------- 1 | package com.wymessi.exception; 2 | 3 | import java.io.IOException; 4 | 5 | import org.springframework.web.bind.annotation.ControllerAdvice; 6 | import org.springframework.web.bind.annotation.ExceptionHandler; 7 | import org.springframework.web.bind.annotation.ResponseBody; 8 | import org.springframework.web.servlet.ModelAndView; 9 | 10 | /** 11 | * 全局异常处理器 12 | * 13 | * @author wangye 14 | * 15 | */ 16 | @ControllerAdvice 17 | public class GlobalExceptionHandler { 18 | 19 | @ResponseBody 20 | @ExceptionHandler(CustomException.class) 21 | public ModelAndView exceptionHandleCustomException(CustomException exception) { 22 | ModelAndView mv = new ModelAndView(); 23 | mv.setViewName("message"); 24 | mv.addObject("message", exception.getMessage()); 25 | mv.addObject("href", exception.getHref()); 26 | return mv; 27 | } 28 | 29 | /*@ResponseBody 30 | @ExceptionHandler(IOException.class) 31 | public ModelAndView exceptionHandleIOException(IOException exception) { 32 | ModelAndView mv = new ModelAndView(); 33 | mv.setViewName("applicant/upload"); 34 | mv.addObject("message", exception.getMessage()); 35 | return mv; 36 | }*/ 37 | } 38 | -------------------------------------------------------------------------------- /src/main/java/com/wymessi/filter/CharacterEncodingFilter.java: -------------------------------------------------------------------------------- 1 | package com.wymessi.filter; 2 | 3 | import java.io.IOException; 4 | import java.io.UnsupportedEncodingException; 5 | 6 | import javax.servlet.Filter; 7 | import javax.servlet.FilterChain; 8 | import javax.servlet.FilterConfig; 9 | import javax.servlet.ServletException; 10 | import javax.servlet.ServletRequest; 11 | import javax.servlet.ServletResponse; 12 | import javax.servlet.annotation.WebFilter; 13 | import javax.servlet.http.HttpServletRequest; 14 | import javax.servlet.http.HttpServletRequestWrapper; 15 | import javax.servlet.http.HttpServletResponse; 16 | 17 | //@WebFilter(filterName="characterEncodingFilter", value={"/*"}) 18 | public class CharacterEncodingFilter implements Filter { 19 | 20 | @Override 21 | public void destroy() { 22 | // TODO Auto-generated method stub 23 | 24 | } 25 | 26 | @Override 27 | public void doFilter(ServletRequest req, ServletResponse resp, 28 | FilterChain chain) throws IOException, ServletException { 29 | 30 | HttpServletRequest request=(HttpServletRequest) req; 31 | HttpServletResponse response=(HttpServletResponse) resp; 32 | 33 | request.setCharacterEncoding("UTF-8"); 34 | response.setCharacterEncoding("UTF-8"); 35 | response.setContentType("text/html;charset=UTF-8"); 36 | 37 | chain.doFilter(new MyRequest(request), response); 38 | 39 | 40 | } 41 | 42 | @Override 43 | public void init(FilterConfig arg0) throws ServletException { 44 | // TODO Auto-generated method stub 45 | 46 | } 47 | 48 | } 49 | 50 | class MyRequest extends HttpServletRequestWrapper{ 51 | 52 | public MyRequest(HttpServletRequest request) { 53 | super(request); 54 | } 55 | 56 | @Override 57 | public String getParameter(String name) { 58 | String value=super.getParameter(name); 59 | if(value==null){ 60 | return null; 61 | } 62 | if("get".equalsIgnoreCase(super.getMethod())){ 63 | try { 64 | value=new String(value.getBytes("ISO8859-1"),"UTF-8"); 65 | } catch (UnsupportedEncodingException e) { 66 | throw new RuntimeException(e); 67 | } 68 | } 69 | return value; 70 | } 71 | 72 | 73 | 74 | } 75 | -------------------------------------------------------------------------------- /src/main/java/com/wymessi/filter/DruidStatFilter.java: -------------------------------------------------------------------------------- 1 | package com.wymessi.filter; 2 | 3 | import javax.servlet.annotation.WebFilter; 4 | import javax.servlet.annotation.WebInitParam; 5 | 6 | import com.alibaba.druid.support.http.WebStatFilter; 7 | 8 | 9 | @WebFilter(filterName="druidWebStatFilter",urlPatterns="/*", 10 | initParams={ 11 | @WebInitParam(name="exclusions",value="*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*")// ������Դ 12 | }) 13 | public class DruidStatFilter extends WebStatFilter { 14 | 15 | } 16 | -------------------------------------------------------------------------------- /src/main/java/com/wymessi/filter/DruidStatViewServlet.java: -------------------------------------------------------------------------------- 1 | package com.wymessi.filter; 2 | 3 | import javax.servlet.annotation.WebInitParam; 4 | import javax.servlet.annotation.WebServlet; 5 | 6 | import com.alibaba.druid.support.http.StatViewServlet; 7 | 8 | 9 | @WebServlet(urlPatterns = "/druid/*", 10 | initParams={ 11 | @WebInitParam(name="allow",value="127.0.0.1"),// IP白名单 12 | @WebInitParam(name="deny",value="192.168.16.111"),// IP黑名单 13 | @WebInitParam(name="resetEnable",value="false")// 禁止HTML页面Reset All按钮 14 | }) 15 | public class DruidStatViewServlet extends StatViewServlet { 16 | 17 | /** 18 | * 19 | */ 20 | private static final long serialVersionUID = 1L; 21 | 22 | } -------------------------------------------------------------------------------- /src/main/java/com/wymessi/filter/HtmlFilter.java: -------------------------------------------------------------------------------- 1 | package com.wymessi.filter; 2 | 3 | 4 | import java.io.IOException; 5 | 6 | import javax.servlet.Filter; 7 | import javax.servlet.FilterChain; 8 | import javax.servlet.FilterConfig; 9 | import javax.servlet.ServletException; 10 | import javax.servlet.ServletRequest; 11 | import javax.servlet.ServletResponse; 12 | import javax.servlet.annotation.WebFilter; 13 | import javax.servlet.http.HttpServletRequest; 14 | import javax.servlet.http.HttpServletRequestWrapper; 15 | import javax.servlet.http.HttpServletResponse; 16 | /** 17 | * html转义过滤器 18 | * @author 王冶 19 | * 20 | */ 21 | @WebFilter(filterName="htmlFilter", urlPatterns={"/*"}) 22 | public class HtmlFilter implements Filter { 23 | 24 | @Override 25 | public void destroy() { 26 | // TODO Auto-generated method stub 27 | 28 | } 29 | 30 | @Override 31 | public void doFilter(ServletRequest req, ServletResponse resp, 32 | FilterChain chain) throws IOException, ServletException { 33 | 34 | HttpServletRequest request=(HttpServletRequest) req; 35 | HttpServletResponse response=(HttpServletResponse) resp; 36 | 37 | chain.doFilter(new MyRequest2(request), response); 38 | 39 | } 40 | 41 | @Override 42 | public void init(FilterConfig filterConfig) throws ServletException { 43 | // TODO Auto-generated method stub 44 | 45 | } 46 | 47 | } 48 | 49 | class MyRequest2 extends HttpServletRequestWrapper{ 50 | 51 | public MyRequest2(HttpServletRequest request) { 52 | super(request); 53 | // TODO Auto-generated constructor stub 54 | } 55 | 56 | @Override 57 | public String getParameter(String name) { 58 | String value = super.getParameter(name); 59 | value=this.filter(value); 60 | return value; 61 | } 62 | 63 | public String filter(String message) { 64 | 65 | if (message == null){ 66 | return null; 67 | } 68 | char content[] = new char[message.length()]; 69 | message.getChars(0, message.length(), content, 0); 70 | StringBuffer result = new StringBuffer(content.length + 50); 71 | for (int i = 0; i < content.length; i++) { 72 | switch (content[i]) { 73 | case '<': 74 | result.append("<"); 75 | break; 76 | case '>': 77 | result.append(">"); 78 | break; 79 | case '&': 80 | result.append("&"); 81 | break; 82 | case '"': 83 | result.append("""); 84 | break; 85 | default: 86 | result.append(content[i]); 87 | } 88 | } 89 | return (result.toString()); 90 | 91 | } 92 | 93 | } -------------------------------------------------------------------------------- /src/main/java/com/wymessi/filter/UserFilter.java: -------------------------------------------------------------------------------- 1 | package com.wymessi.filter; 2 | 3 | import java.io.IOException; 4 | 5 | import javax.servlet.Filter; 6 | import javax.servlet.FilterChain; 7 | import javax.servlet.FilterConfig; 8 | import javax.servlet.ServletException; 9 | import javax.servlet.ServletRequest; 10 | import javax.servlet.ServletResponse; 11 | import javax.servlet.http.HttpServletRequest; 12 | import javax.servlet.http.HttpServletResponse; 13 | 14 | //@WebFilter(filterName="userFilter", urlPatterns={"/*"}) 15 | public class UserFilter implements Filter { 16 | 17 | @Override 18 | public void destroy() { 19 | // TODO Auto-generated method stub 20 | 21 | } 22 | 23 | @Override 24 | public void doFilter(ServletRequest req, ServletResponse resp, 25 | FilterChain chain) throws IOException, ServletException { 26 | 27 | HttpServletRequest request=(HttpServletRequest) req; 28 | HttpServletResponse response=(HttpServletResponse) resp; 29 | /*HttpSession session = request.getSession(); 30 | if (session.getAttribute("user") == null){ 31 | throw new UnloginException("未登录,请先登录", "/prs/"); 32 | }*/ 33 | 34 | chain.doFilter(request, response); 35 | 36 | 37 | } 38 | 39 | @Override 40 | public void init(FilterConfig arg0) throws ServletException { 41 | // TODO Auto-generated method stub 42 | 43 | } 44 | 45 | } 46 | -------------------------------------------------------------------------------- /src/main/java/com/wymessi/param/CustomParam.java: -------------------------------------------------------------------------------- 1 | package com.wymessi.param; 2 | 3 | import java.util.Date; 4 | 5 | public class CustomParam { 6 | 7 | private Date startTime; 8 | private Date endTime; 9 | 10 | //分页 11 | private int offset; 12 | private int limit; 13 | public Date getStartTime() { 14 | return startTime; 15 | } 16 | public Date getEndTime() { 17 | return endTime; 18 | } 19 | public int getOffset() { 20 | return offset; 21 | } 22 | public int getLimit() { 23 | return limit; 24 | } 25 | public void setStartTime(Date startTime) { 26 | this.startTime = startTime; 27 | } 28 | public void setEndTime(Date endTime) { 29 | this.endTime = endTime; 30 | } 31 | public void setOffset(int offset) { 32 | this.offset = offset; 33 | } 34 | public void setLimit(int limit) { 35 | this.limit = limit; 36 | } 37 | 38 | 39 | } 40 | -------------------------------------------------------------------------------- /src/main/java/com/wymessi/param/FieldsListParam.java: -------------------------------------------------------------------------------- 1 | package com.wymessi.param; 2 | 3 | public class FieldsListParam extends CustomParam{ 4 | 5 | private String fieldName; 6 | 7 | public String getFieldName() { 8 | return fieldName; 9 | } 10 | 11 | public void setFieldName(String fieldName) { 12 | this.fieldName = fieldName; 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /src/main/java/com/wymessi/param/GenerateApplyParam.java: -------------------------------------------------------------------------------- 1 | package com.wymessi.param; 2 | 3 | import org.springframework.ui.Model; 4 | import org.springframework.web.multipart.MultipartFile; 5 | 6 | import com.wymessi.po.Project; 7 | import com.wymessi.po.SysUser; 8 | /** 9 | * 项目申请人创建申请时所需参数,为了能够实现事务,即文件的上传、记录的生成、领域的标签保持在同一个事务里 10 | * @author 王冶 11 | * 12 | */ 13 | public class GenerateApplyParam { 14 | 15 | private Model model; 16 | private MultipartFile file; 17 | private Project project; 18 | private String tagsinput; 19 | private SysUser sysUser; 20 | 21 | public Model getModel() { 22 | return model; 23 | } 24 | 25 | public void setModel(Model model) { 26 | this.model = model; 27 | } 28 | 29 | public MultipartFile getFile() { 30 | return file; 31 | } 32 | 33 | public void setFile(MultipartFile file) { 34 | this.file = file; 35 | } 36 | 37 | public Project getProject() { 38 | return project; 39 | } 40 | 41 | public void setProject(Project project) { 42 | this.project = project; 43 | } 44 | 45 | public String getTagsinput() { 46 | return tagsinput; 47 | } 48 | 49 | public void setTagsinput(String tagsinput) { 50 | this.tagsinput = tagsinput; 51 | } 52 | 53 | public SysUser getSysUser() { 54 | return sysUser; 55 | } 56 | 57 | public void setSysUser(SysUser sysUser) { 58 | this.sysUser = sysUser; 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /src/main/java/com/wymessi/param/GroupAllocateParam.java: -------------------------------------------------------------------------------- 1 | package com.wymessi.param; 2 | 3 | import com.wymessi.po.SysUser; 4 | 5 | public class GroupAllocateParam { 6 | 7 | private long groupId; 8 | private SysUser user; 9 | private long expertId; 10 | public long getGroupId() { 11 | return groupId; 12 | } 13 | public SysUser getUser() { 14 | return user; 15 | } 16 | public long getExpertId() { 17 | return expertId; 18 | } 19 | public void setGroupId(long groupId) { 20 | this.groupId = groupId; 21 | } 22 | public void setUser(SysUser user) { 23 | this.user = user; 24 | } 25 | public void setExpertId(long expertId) { 26 | this.expertId = expertId; 27 | } 28 | 29 | 30 | } 31 | -------------------------------------------------------------------------------- /src/main/java/com/wymessi/param/GroupListParam.java: -------------------------------------------------------------------------------- 1 | package com.wymessi.param; 2 | 3 | public class GroupListParam extends CustomParam{ 4 | 5 | 6 | private String GroupName; 7 | private String status; 8 | 9 | 10 | public void setGroupName(String groupName) { 11 | GroupName = groupName; 12 | } 13 | public String getGroupName() { 14 | return GroupName; 15 | } 16 | 17 | public String getStatus() { 18 | return status; 19 | } 20 | public void setStatus(String status) { 21 | this.status = status; 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/com/wymessi/param/ProjectListParam.java: -------------------------------------------------------------------------------- 1 | package com.wymessi.param; 2 | 3 | import java.util.List; 4 | /** 5 | * 查询申请项目时参数封装类 6 | * @author 王冶 7 | * 8 | */ 9 | public class ProjectListParam extends CustomParam{ 10 | 11 | private String projectName; 12 | private String status; 13 | private List createUserIds; 14 | private List groupIds; 15 | private long expertId; 16 | private Long groupId; 17 | 18 | public String getProjectName() { 19 | return projectName; 20 | } 21 | 22 | public void setProjectName(String projectName) { 23 | this.projectName = projectName; 24 | } 25 | 26 | public String getStatus() { 27 | return status; 28 | } 29 | 30 | public void setStatus(String status) { 31 | this.status = status; 32 | } 33 | 34 | public List getCreateUserIds() { 35 | return createUserIds; 36 | } 37 | 38 | public void setCreateUserIds(List createUserIds) { 39 | this.createUserIds = createUserIds; 40 | } 41 | 42 | public List getGroupIds() { 43 | return groupIds; 44 | } 45 | 46 | public void setGroupIds(List groupIds) { 47 | this.groupIds = groupIds; 48 | } 49 | 50 | public long getExpertId() { 51 | return expertId; 52 | } 53 | 54 | public void setExpertId(long expertId) { 55 | this.expertId = expertId; 56 | } 57 | 58 | public Long getGroupId() { 59 | return groupId; 60 | } 61 | 62 | public void setGroupId(Long groupId) { 63 | this.groupId = groupId; 64 | } 65 | 66 | 67 | } -------------------------------------------------------------------------------- /src/main/java/com/wymessi/param/UserListParam.java: -------------------------------------------------------------------------------- 1 | package com.wymessi.param; 2 | 3 | /** 4 | * 查询申请项目时参数封装类 5 | * @author 王冶 6 | * 7 | */ 8 | public class UserListParam { 9 | 10 | private String username; 11 | private Long roleId; 12 | 13 | //分页 14 | private int offset; 15 | private int limit; 16 | 17 | 18 | public String getUsername() { 19 | return username; 20 | } 21 | 22 | public Long getRoleId() { 23 | return roleId; 24 | } 25 | 26 | public void setUsername(String username) { 27 | this.username = username; 28 | } 29 | 30 | public void setRoleId(Long roleId) { 31 | this.roleId = roleId; 32 | } 33 | 34 | public int getOffset() { 35 | return offset; 36 | } 37 | 38 | public void setOffset(int offset) { 39 | this.offset = offset; 40 | } 41 | 42 | public int getLimit() { 43 | return limit; 44 | } 45 | 46 | public void setLimit(int limit) { 47 | this.limit = limit; 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /src/main/java/com/wymessi/po/Allocate.java: -------------------------------------------------------------------------------- 1 | package com.wymessi.po; 2 | 3 | import java.util.Date; 4 | 5 | public class Allocate { 6 | 7 | private long id; 8 | private long groupId; 9 | private long expertId; 10 | private long allocateUserId; 11 | private Date allocateTime; 12 | public long getId() { 13 | return id; 14 | } 15 | public long getGroupId() { 16 | return groupId; 17 | } 18 | public long getExpertId() { 19 | return expertId; 20 | } 21 | public long getAllocateUserId() { 22 | return allocateUserId; 23 | } 24 | public Date getAllocateTime() { 25 | return allocateTime; 26 | } 27 | public void setId(long id) { 28 | this.id = id; 29 | } 30 | public void setGroupId(long groupId) { 31 | this.groupId = groupId; 32 | } 33 | public void setExpertId(long expertId) { 34 | this.expertId = expertId; 35 | } 36 | public void setAllocateUserId(long allocateUserId) { 37 | this.allocateUserId = allocateUserId; 38 | } 39 | public void setAllocateTime(Date allocateTime) { 40 | this.allocateTime = allocateTime; 41 | } 42 | 43 | 44 | } 45 | -------------------------------------------------------------------------------- /src/main/java/com/wymessi/po/EntityField.java: -------------------------------------------------------------------------------- 1 | package com.wymessi.po; 2 | 3 | /** 4 | * 项目申请、专家与领域相关联持久类 5 | * 6 | * @author 王冶 7 | * 8 | */ 9 | public class EntityField { 10 | 11 | // 关联实体的类型 12 | public static final String ENTITY_TYPE_PROJECT = "PROJECT"; 13 | public static final String ENTITY_TYPE_EXPERT = "EXPERT"; 14 | 15 | private long id; 16 | private long fieldId; // 领域id 17 | private long entityId; // 关联的实体id 18 | private String entityType; // 关联实体的类型 19 | 20 | public long getId() { 21 | return id; 22 | } 23 | 24 | public void setId(long id) { 25 | this.id = id; 26 | } 27 | 28 | public long getFieldId() { 29 | return fieldId; 30 | } 31 | 32 | public void setFieldId(long fieldId) { 33 | this.fieldId = fieldId; 34 | } 35 | 36 | public long getEntityId() { 37 | return entityId; 38 | } 39 | 40 | public void setEntityId(long entityId) { 41 | this.entityId = entityId; 42 | } 43 | 44 | public String getEntityType() { 45 | return entityType; 46 | } 47 | 48 | public void setEntityType(String entityType) { 49 | this.entityType = entityType; 50 | } 51 | 52 | } 53 | -------------------------------------------------------------------------------- /src/main/java/com/wymessi/po/Field.java: -------------------------------------------------------------------------------- 1 | package com.wymessi.po; 2 | 3 | import java.util.Date; 4 | 5 | /** 6 | * 领域标签持久类 7 | * 8 | * @author 王冶 9 | * 10 | */ 11 | public class Field { 12 | 13 | private long id; 14 | private String fieldName; // 领域名 15 | private long createUserId; // 创建人id 16 | private String createUserName; //因layui的限制所创建,用于显示layui表格的限制 17 | private Date createTime; // 创建时间 18 | private Date lastUpdateTime; // 创建时间 19 | 20 | private SysUser user; // 项目申请者持久类 21 | 22 | public SysUser getUser() { 23 | return user; 24 | } 25 | 26 | public void setUser(SysUser user) { 27 | this.user = user; 28 | } 29 | 30 | public long getId() { 31 | return id; 32 | } 33 | 34 | public void setId(long id) { 35 | this.id = id; 36 | } 37 | 38 | public String getFieldName() { 39 | return fieldName; 40 | } 41 | 42 | public void setFieldName(String fieldName) { 43 | this.fieldName = fieldName; 44 | } 45 | 46 | public long getCreateUserId() { 47 | return createUserId; 48 | } 49 | 50 | public void setCreateUserId(long createUserId) { 51 | this.createUserId = createUserId; 52 | } 53 | 54 | public Date getCreateTime() { 55 | return createTime; 56 | } 57 | 58 | public void setCreateTime(Date createTime) { 59 | this.createTime = createTime; 60 | } 61 | 62 | public Date getLastUpdateTime() { 63 | return lastUpdateTime; 64 | } 65 | 66 | public void setLastUpdateTime(Date lastUpdateTime) { 67 | this.lastUpdateTime = lastUpdateTime; 68 | } 69 | 70 | public String getCreateUserName() { 71 | return createUserName; 72 | } 73 | 74 | public void setCreateUserName(String createUserName) { 75 | this.createUserName = createUserName; 76 | } 77 | 78 | @Override 79 | public int hashCode() { 80 | return this.fieldName.hashCode()*18; 81 | } 82 | 83 | @Override 84 | public boolean equals(Object obj) { 85 | if (obj == null) { 86 | return false; 87 | } 88 | if (obj == this) { 89 | return true; 90 | } 91 | if (!(obj instanceof Field)) { 92 | return false; 93 | } 94 | Field f = (Field) obj; 95 | if (this.fieldName.equals(f.getFieldName())) { 96 | return true; 97 | } 98 | return false; 99 | } 100 | 101 | 102 | } 103 | -------------------------------------------------------------------------------- /src/main/java/com/wymessi/po/Group.java: -------------------------------------------------------------------------------- 1 | package com.wymessi.po; 2 | 3 | import java.util.Date; 4 | /*** 5 | * 项目分组持久类 6 | * @author 王冶 7 | * 8 | */ 9 | public class Group { 10 | 11 | public static final String PROJECT_GROUP_STATUS_WAIT_ALLOCATE = "WAIT_ALLOCATE"; 12 | public static final String PROJECT_GROUP_STATUS_WAIT_ADD_PROJECT = "WAIT_ADD_PROJECT"; 13 | public static final String PROJECT_GROUP_STATUS_ALLOCATE_DONE = "ALLOCATE_DONE"; 14 | 15 | private long id; 16 | private String groupName; // 分组名 17 | private String status; // 分组名 18 | private long createUserId; // 创建人id 19 | private String createUserName; //因layui的限制所创建,用于显示layui表格的限制 20 | private Date createTime; // 创建时间 21 | private Date lastUpdateTime; // 创建时间 22 | private SysUser user; // 项目申请者持久类 23 | 24 | public SysUser getUser() { 25 | return user; 26 | } 27 | public void setUser(SysUser user) { 28 | this.user = user; 29 | } 30 | public long getId() { 31 | return id; 32 | } 33 | public String getGroupName() { 34 | return groupName; 35 | } 36 | public long getCreateUserId() { 37 | return createUserId; 38 | } 39 | public String getCreateUserName() { 40 | return createUserName; 41 | } 42 | public Date getCreateTime() { 43 | return createTime; 44 | } 45 | public Date getLastUpdateTime() { 46 | return lastUpdateTime; 47 | } 48 | public void setId(long id) { 49 | this.id = id; 50 | } 51 | public void setGroupName(String groupName) { 52 | this.groupName = groupName; 53 | } 54 | public void setCreateUserId(long createUserId) { 55 | this.createUserId = createUserId; 56 | } 57 | public void setCreateUserName(String createUserName) { 58 | this.createUserName = createUserName; 59 | } 60 | public void setCreateTime(Date createTime) { 61 | this.createTime = createTime; 62 | } 63 | public void setLastUpdateTime(Date lastUpdateTime) { 64 | this.lastUpdateTime = lastUpdateTime; 65 | } 66 | public String getStatus() { 67 | return status; 68 | } 69 | public void setStatus(String status) { 70 | this.status = status; 71 | } 72 | 73 | 74 | } 75 | -------------------------------------------------------------------------------- /src/main/java/com/wymessi/po/Project.java: -------------------------------------------------------------------------------- 1 | package com.wymessi.po; 2 | 3 | import java.util.Date; 4 | 5 | /** 6 | * 申请项目持久类 7 | * 8 | * @author 王冶 9 | * 10 | */ 11 | public class Project { 12 | 13 | //项目评审状态 :(待分组,待分配,待评审,评审中,评审完成) 14 | public static final String PROJECT_REVIEW_STATUS_WAIT_GROUP = "WAIT_GROUP"; 15 | public static final String PROJECT_REVIEW_STATUS_WAIT_ALLOCATE = "WAIT_ALLOCATE"; 16 | public static final String PROJECT_REVIEW_STATUS_WAIT_REVIEW = "WAIT_REVIEW"; 17 | public static final String PROJECT_REVIEW_STATUS_IN_REVIEW = "IN_REVIEW"; 18 | public static final String PROJECT_REVIEW_STATUS_REVIEW_DONE = "REVIEW_DONE" ; 19 | 20 | private long id; 21 | private String projectName; // 项目名 22 | private String description; // 项目简介 23 | private String status; // 项目评审状态 24 | private String fileSavePath; // 项目文件保存路径 25 | private long createUserId; // 申请者id 26 | private String createUserName; //因layui的限制所创建,用于显示layui表格的限制 27 | private Date createTime; // 申请创建时间 28 | private Date lastUpdateTime; // 最后更改时间 29 | private SysUser user; // 项目申请者持久类 30 | private long groupId; 31 | private int reviewCount; 32 | 33 | public long getId() { 34 | return id; 35 | } 36 | 37 | public void setId(long id) { 38 | this.id = id; 39 | } 40 | 41 | public String getProjectName() { 42 | return projectName; 43 | } 44 | 45 | public void setProjectName(String projectName) { 46 | this.projectName = projectName; 47 | } 48 | 49 | public String getDescription() { 50 | return description; 51 | } 52 | 53 | public void setDescription(String description) { 54 | this.description = description; 55 | } 56 | 57 | public String getStatus() { 58 | return status; 59 | } 60 | 61 | public void setStatus(String status) { 62 | this.status = status; 63 | } 64 | 65 | public String getFileSavePath() { 66 | return fileSavePath; 67 | } 68 | 69 | public void setFileSavePath(String fileSavePath) { 70 | this.fileSavePath = fileSavePath; 71 | } 72 | 73 | public long getCreateUserId() { 74 | return createUserId; 75 | } 76 | 77 | public String getCreateUserName() { 78 | return createUserName; 79 | } 80 | 81 | public void setCreateUserName(String createUserName) { 82 | this.createUserName = createUserName; 83 | } 84 | 85 | public void setCreateUserId(long createUserId) { 86 | this.createUserId = createUserId; 87 | } 88 | 89 | public Date getCreateTime() { 90 | return createTime; 91 | } 92 | 93 | public void setCreateTime(Date createTime) { 94 | this.createTime = createTime; 95 | } 96 | 97 | public Date getLastUpdateTime() { 98 | return lastUpdateTime; 99 | } 100 | 101 | public void setLastUpdateTime(Date lastUpdateTime) { 102 | this.lastUpdateTime = lastUpdateTime; 103 | } 104 | 105 | public SysUser getUser() { 106 | return user; 107 | } 108 | 109 | public void setUser(SysUser user) { 110 | this.user = user; 111 | } 112 | 113 | public long getGroupId() { 114 | return groupId; 115 | } 116 | 117 | public void setGroupId(long groupId) { 118 | this.groupId = groupId; 119 | } 120 | 121 | public int getReviewCount() { 122 | return reviewCount; 123 | } 124 | 125 | public void setReviewCount(int reviewCount) { 126 | this.reviewCount = reviewCount; 127 | } 128 | 129 | } 130 | -------------------------------------------------------------------------------- /src/main/java/com/wymessi/po/Result.java: -------------------------------------------------------------------------------- 1 | package com.wymessi.po; 2 | 3 | public class Result { 4 | 5 | private Double averageGrade; 6 | private String result; 7 | public Double getAverageGrade() { 8 | return averageGrade; 9 | } 10 | public String getResult() { 11 | return result; 12 | } 13 | public void setAverageGrade(Double averageGrade) { 14 | this.averageGrade = averageGrade; 15 | } 16 | public void setResult(String result) { 17 | this.result = result; 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/com/wymessi/po/Review.java: -------------------------------------------------------------------------------- 1 | package com.wymessi.po; 2 | 3 | import java.util.Date; 4 | 5 | /** 6 | * 项目评审持久类 7 | * 8 | * @author 王冶 9 | * 10 | */ 11 | public class Review { 12 | 13 | public static final String REVIEW_RESULT_PASS = "PASS"; 14 | public static final String REVIEW_RESULT_REJECT = "REJECT"; 15 | 16 | private long id; 17 | private long applicantId; //项目申请人 18 | private long projectId; // 19 | private long expertId; 20 | private String expertName; 21 | private String opinion; // 专家意见 22 | private String grade; // 评审成绩 23 | private Date reviewTime; 24 | 25 | public long getId() { 26 | return id; 27 | } 28 | 29 | public void setId(long id) { 30 | this.id = id; 31 | } 32 | 33 | public String getExpertName() { 34 | return expertName; 35 | } 36 | 37 | public void setExpertName(String expertName) { 38 | this.expertName = expertName; 39 | } 40 | 41 | public long getApplicantId() { 42 | return applicantId; 43 | } 44 | 45 | public long getProjectId() { 46 | return projectId; 47 | } 48 | 49 | public long getExpertId() { 50 | return expertId; 51 | } 52 | 53 | public String getOpinion() { 54 | return opinion; 55 | } 56 | 57 | public String getGrade() { 58 | return grade; 59 | } 60 | 61 | public void setApplicantId(long applicantId) { 62 | this.applicantId = applicantId; 63 | } 64 | 65 | public void setProjectId(long projectId) { 66 | this.projectId = projectId; 67 | } 68 | 69 | public void setExpertId(long expertId) { 70 | this.expertId = expertId; 71 | } 72 | 73 | public void setOpinion(String opinion) { 74 | this.opinion = opinion; 75 | } 76 | 77 | public void setGrade(String grade) { 78 | this.grade = grade; 79 | } 80 | 81 | public Date getReviewTime() { 82 | return reviewTime; 83 | } 84 | 85 | public void setReviewTime(Date reviewTime) { 86 | this.reviewTime = reviewTime; 87 | } 88 | 89 | 90 | } 91 | -------------------------------------------------------------------------------- /src/main/java/com/wymessi/po/SysRole.java: -------------------------------------------------------------------------------- 1 | package com.wymessi.po; 2 | 3 | import java.util.Date; 4 | /** 5 | * 系统角色表 6 | * @author 王冶 7 | * 8 | */ 9 | public class SysRole { 10 | 11 | private long id; 12 | private String roleName; //角色名 13 | private String roleNote; //角色说明 14 | private long createUserId; //创建人id 15 | private Date createTime; //创建时间 16 | private Date lastUpdateTime; //最后更新时间 17 | 18 | public long getId() { 19 | return id; 20 | } 21 | 22 | public void setId(long id) { 23 | this.id = id; 24 | } 25 | 26 | public String getRoleName() { 27 | return roleName; 28 | } 29 | 30 | public void setRoleName(String roleName) { 31 | this.roleName = roleName; 32 | } 33 | 34 | public String getRoleNote() { 35 | return roleNote; 36 | } 37 | 38 | public void setRoleNote(String roleNote) { 39 | this.roleNote = roleNote; 40 | } 41 | 42 | public long getCreateUserId() { 43 | return createUserId; 44 | } 45 | 46 | public void setCreateUserId(long createUserId) { 47 | this.createUserId = createUserId; 48 | } 49 | 50 | public Date getCreateTime() { 51 | return createTime; 52 | } 53 | 54 | public void setCreateTime(Date createTime) { 55 | this.createTime = createTime; 56 | } 57 | 58 | public Date getLastUpdateTime() { 59 | return lastUpdateTime; 60 | } 61 | 62 | public void setLastUpdateTime(Date lastUpdateTime) { 63 | this.lastUpdateTime = lastUpdateTime; 64 | } 65 | 66 | } 67 | -------------------------------------------------------------------------------- /src/main/java/com/wymessi/po/SysUser.java: -------------------------------------------------------------------------------- 1 | package com.wymessi.po; 2 | 3 | /** 4 | * 系统用户 5 | * 6 | * @author 王冶 7 | * 8 | */ 9 | public class SysUser { 10 | 11 | private long id; 12 | private String username; // 姓名 13 | private String password; // 密码 14 | private String sex; // 男,女 15 | private String mail; // 邮箱 16 | private String phone; // 手机号 17 | private String title; // 若用户为专家,则表示职称,默认为空 18 | private long roleId; //用户角色id 19 | 20 | public long getId() { 21 | return id; 22 | } 23 | 24 | public void setId(long id) { 25 | this.id = id; 26 | } 27 | 28 | public String getUsername() { 29 | return username; 30 | } 31 | 32 | public void setUsername(String username) { 33 | this.username = username; 34 | } 35 | 36 | public String getPassword() { 37 | return password; 38 | } 39 | 40 | public void setPassword(String password) { 41 | this.password = password; 42 | } 43 | 44 | public String getSex() { 45 | return sex; 46 | } 47 | 48 | public void setSex(String sex) { 49 | this.sex = sex; 50 | } 51 | 52 | public String getMail() { 53 | return mail; 54 | } 55 | 56 | public void setMail(String mail) { 57 | this.mail = mail; 58 | } 59 | 60 | public String getPhone() { 61 | return phone; 62 | } 63 | 64 | public void setPhone(String phone) { 65 | this.phone = phone; 66 | } 67 | 68 | public String getTitle() { 69 | return title; 70 | } 71 | 72 | public void setTitle(String title) { 73 | this.title = title; 74 | } 75 | 76 | public long getRoleId() { 77 | return roleId; 78 | } 79 | 80 | public void setRoleId(long roleId) { 81 | this.roleId = roleId; 82 | } 83 | 84 | /*@Override 85 | public int hashCode() { 86 | return (int) (this.username.hashCode()*18 + this.password.hashCode()*18 + this.roleId * 18); 87 | } 88 | 89 | @Override 90 | public boolean equals(Object obj) { 91 | if (obj == null) { 92 | return false; 93 | } 94 | if (obj == this) { 95 | return true; 96 | } 97 | if (!(obj instanceof Field)) { 98 | return false; 99 | } 100 | SysUser user = (SysUser) obj; 101 | if (this.username.equals(user.getUsername()) && this.password.equals(user.getPassword()) && this.roleId == user.getRoleId()) { 102 | return true; 103 | } 104 | return false; 105 | }*/ 106 | 107 | } 108 | -------------------------------------------------------------------------------- /src/main/java/com/wymessi/service/AllocateService.java: -------------------------------------------------------------------------------- 1 | package com.wymessi.service; 2 | 3 | import java.util.List; 4 | 5 | import com.wymessi.po.Allocate; 6 | 7 | /** 8 | * 分配处理接口 9 | * @author wangye 10 | * 11 | */ 12 | public interface AllocateService { 13 | 14 | int insert(Allocate allocate); 15 | 16 | List listByExpertId(Long id); 17 | 18 | List listByGroupId(Long groupId); 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/com/wymessi/service/EntityFieldMappingService.java: -------------------------------------------------------------------------------- 1 | package com.wymessi.service; 2 | 3 | import java.util.List; 4 | 5 | import com.wymessi.po.EntityField; 6 | 7 | /** 8 | * 用于项目申请、专家与领域相关联的业务层接口 9 | * @author 王冶 10 | * 11 | */ 12 | public interface EntityFieldMappingService { 13 | 14 | /** 15 | * 添加关联 16 | * @param entityField 17 | */ 18 | int insert(EntityField entityField); 19 | 20 | /** 21 | * 根据projectId查询 22 | * @param id 23 | * @return 24 | */ 25 | List listByEntityId(Long id,String entityType); 26 | 27 | 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/com/wymessi/service/FieldService.java: -------------------------------------------------------------------------------- 1 | package com.wymessi.service; 2 | 3 | import java.util.List; 4 | 5 | import com.wymessi.param.FieldsListParam; 6 | import com.wymessi.po.Field; 7 | import com.wymessi.po.SysUser; 8 | /** 9 | * 领域标签业务层接口 10 | * @author 王冶 11 | * 12 | */ 13 | public interface FieldService { 14 | 15 | /** 16 | * 添加领域 17 | * @param field 18 | */ 19 | void insert(Field field, SysUser user); 20 | 21 | /** 22 | * 批量添加领域 23 | * @param field 24 | */ 25 | void insertBatch(List fields); 26 | 27 | /** 28 | * 生成有效领域标签、插入记录同时关联申请记录 29 | * 30 | */ 31 | void getValidFieldAndInsertBatch(List inputFields, long createUserId); 32 | 33 | /** 34 | * 得到总记录数 35 | * @param param 36 | * @return 37 | */ 38 | int getTotalCount(FieldsListParam param); 39 | 40 | /** 41 | * 查询标签 42 | * @param param 43 | * @return 44 | */ 45 | List listField(FieldsListParam param); 46 | 47 | /** 48 | * 修改领域标签信息 49 | * 50 | */ 51 | int update(Field field); 52 | 53 | /** 54 | * 根据ID查询 55 | * @param id 56 | * @return 57 | */ 58 | Field getById(Long id); 59 | 60 | /** 61 | * 根据id删除领域 62 | * @param id 63 | */ 64 | public void deleteById(Long id); 65 | 66 | /** 67 | * 根据ID列表查询 68 | * @param fieldIds 69 | * @return 70 | */ 71 | List listByIds(List fieldIds); 72 | 73 | } 74 | -------------------------------------------------------------------------------- /src/main/java/com/wymessi/service/GroupService.java: -------------------------------------------------------------------------------- 1 | package com.wymessi.service; 2 | 3 | import java.util.List; 4 | 5 | import com.wymessi.param.GroupAllocateParam; 6 | import com.wymessi.param.GroupListParam; 7 | import com.wymessi.po.Group; 8 | import com.wymessi.po.SysUser; 9 | /** 10 | * 项目分组业务层接口 11 | * @author 王冶 12 | * 13 | */ 14 | public interface GroupService { 15 | 16 | /** 17 | * 添加分组 18 | * @param group 19 | */ 20 | void insert(Group group, SysUser user); 21 | 22 | 23 | /** 24 | * 得到总记录数 25 | * @param param 26 | * @return 27 | */ 28 | int getTotalCount(GroupListParam param); 29 | 30 | /** 31 | * 查询分组 32 | * @param param 33 | * @return 34 | */ 35 | List listGroup(GroupListParam param); 36 | 37 | /** 38 | * 修改项目分组信息 39 | * 40 | */ 41 | int update(Group group); 42 | 43 | /** 44 | * 根据ID查询 45 | * @param id 46 | * @return 47 | */ 48 | Group getById(Long id); 49 | 50 | 51 | /** 52 | * 分配专家 53 | * @param param 54 | */ 55 | int allocate(GroupAllocateParam param); 56 | 57 | /** 58 | * 根据id删除 59 | * @param id 60 | */ 61 | // public void deleteById(Long id); 62 | 63 | } 64 | -------------------------------------------------------------------------------- /src/main/java/com/wymessi/service/ProjectService.java: -------------------------------------------------------------------------------- 1 | package com.wymessi.service; 2 | 3 | import java.util.List; 4 | 5 | import com.wymessi.param.GenerateApplyParam; 6 | import com.wymessi.param.ProjectListParam; 7 | import com.wymessi.po.Project; 8 | 9 | /** 10 | * 项目相关业务层接口 11 | * @author 王冶 12 | * 13 | */ 14 | public interface ProjectService { 15 | 16 | /** 17 | * 检查文件是否为系统支持的类型 18 | * @param fileName 上传文件名 19 | * @return 20 | */ 21 | // boolean checkFileSuffix(String fileName); 22 | 23 | /** 24 | * 插入项目申请记录 25 | * @param project 26 | */ 27 | void insert(Project project); 28 | 29 | /** 30 | * 生成申请记录 31 | * @param GenerateApplyParam param 记录生成参数 32 | */ 33 | void generateApply(GenerateApplyParam param); 34 | 35 | /** 36 | * 查询projects 37 | * @param param 38 | * @return 39 | */ 40 | List listProject(ProjectListParam param); 41 | 42 | /** 43 | * 查询总记录数 44 | * @param param 45 | * @return 46 | */ 47 | int getTotalCount(ProjectListParam param); 48 | 49 | /** 50 | * 更新申请记录 51 | * @param project 52 | * @return 53 | */ 54 | int update(Project project); 55 | 56 | /** 57 | * 通过id查询项目申请记录 58 | * @param id 59 | * @return 60 | */ 61 | Project getProjectById(Long id); 62 | 63 | /** 64 | * 通过id删除项目申请记录 65 | * @param id 66 | */ 67 | void deleteById(Long id); 68 | 69 | /** 70 | * 查找分组下的所有项目 71 | * @param groupId 72 | * @return 73 | */ 74 | List listByGroupId(Long groupId); 75 | 76 | /** 77 | * 根据列表id更新状态,避免循环单次更新以提高效率 78 | * @param projectIds 79 | */ 80 | void updateStatusByIds(List projectIds, String status); 81 | 82 | /** 83 | * 某专家已评审项目总记录数 84 | * @param param 85 | * @return 86 | */ 87 | int getReivewdTotalCount(ProjectListParam param); 88 | 89 | /** 90 | * 某专家已评审项目 91 | * @param param 92 | * @return 93 | */ 94 | List listReivewdtProject(ProjectListParam param); 95 | 96 | void updateReviewCountById(Long id); 97 | 98 | } 99 | -------------------------------------------------------------------------------- /src/main/java/com/wymessi/service/ReviewService.java: -------------------------------------------------------------------------------- 1 | package com.wymessi.service; 2 | 3 | import java.util.List; 4 | 5 | import org.springframework.stereotype.Service; 6 | 7 | import com.wymessi.po.Review; 8 | import com.wymessi.po.SysUser; 9 | 10 | @Service 11 | public interface ReviewService { 12 | 13 | /** 14 | * 插入 15 | * @param group 16 | */ 17 | void insert(Review review); 18 | 19 | /** 20 | * 打分 21 | * @param review 22 | * @param attribute 23 | */ 24 | void review(Review review, SysUser user,Long groupId); 25 | 26 | List listByProjectId(Long id); 27 | 28 | Review getByExpertIdAndProjectId(Long expertId, Long projectId); 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/com/wymessi/service/RoleService.java: -------------------------------------------------------------------------------- 1 | package com.wymessi.service; 2 | 3 | import com.wymessi.po.SysRole; 4 | /** 5 | * 系统角色业务层接口 6 | * @author 王冶 7 | * 8 | */ 9 | public interface RoleService { 10 | 11 | /** 12 | * 添加角色 13 | * @param sysRole 14 | */ 15 | void insert(SysRole sysRole); 16 | 17 | 18 | } 19 | -------------------------------------------------------------------------------- /src/main/java/com/wymessi/service/UserService.java: -------------------------------------------------------------------------------- 1 | package com.wymessi.service; 2 | 3 | import java.util.List; 4 | 5 | import com.wymessi.param.UserListParam; 6 | import com.wymessi.po.SysUser; 7 | /** 8 | * 系统用户业务层接口 9 | * @author 王冶 10 | * 11 | */ 12 | public interface UserService { 13 | 14 | /** 15 | * 注册 16 | * @param applicant 17 | */ 18 | void register(SysUser sysUser); 19 | 20 | /** 21 | * 用户登陆 22 | * @param vo 23 | * @return 24 | */ 25 | SysUser login(SysUser sysUser); 26 | 27 | /** 28 | * 修改个人信息 29 | * @param user 30 | */ 31 | int update(SysUser user); 32 | 33 | /** 34 | * 根据id查找用户 35 | * @param user 36 | * @return 37 | */ 38 | SysUser getUserById(Long id); 39 | 40 | /** 41 | * 通过name模糊搜索用户 42 | * @param createUserName 43 | * @return 44 | */ 45 | List getUserByUserName(String createUserName); 46 | 47 | /** 48 | * 通过name和角色搜索用户 49 | * @param username 50 | * @param roleId 51 | * @return 52 | */ 53 | List listUsersByNameAndRole(UserListParam param); 54 | 55 | /** 56 | * 得到总记录数 57 | * @param username 58 | * @param roleId 59 | */ 60 | int getTotalCount(UserListParam param); 61 | 62 | /** 63 | * 根据id查询专家 64 | * @return 65 | */ 66 | List listExpertByIds(List idList); 67 | 68 | /** 69 | * 根据id删除用户 70 | * @param id 71 | */ 72 | void deleteById(Long id); 73 | } 74 | -------------------------------------------------------------------------------- /src/main/java/com/wymessi/service/impl/AllocateServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.wymessi.service.impl; 2 | 3 | import java.util.List; 4 | 5 | import org.springframework.beans.factory.annotation.Autowired; 6 | import org.springframework.stereotype.Service; 7 | 8 | import com.wymessi.dao.AllocateDao; 9 | import com.wymessi.po.Allocate; 10 | import com.wymessi.service.AllocateService; 11 | 12 | @Service 13 | public class AllocateServiceImpl implements AllocateService { 14 | 15 | @Autowired 16 | private AllocateDao allocateDao; 17 | 18 | @Override 19 | public int insert(Allocate allocate) { 20 | if(allocate == null){ 21 | return 0; 22 | } 23 | return allocateDao.insert(allocate); 24 | } 25 | 26 | @Override 27 | public List listByExpertId(Long id) { 28 | if (id != null) { 29 | List allocates = allocateDao.listByExpertId(id); 30 | return allocates; 31 | } 32 | return null; 33 | } 34 | 35 | @Override 36 | public List listByGroupId(Long groupId) { 37 | if (groupId != null) { 38 | List allocates = allocateDao.listByGroupId(groupId); 39 | return allocates; 40 | } 41 | return null; 42 | } 43 | 44 | } 45 | -------------------------------------------------------------------------------- /src/main/java/com/wymessi/service/impl/EntityFieldMappingServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.wymessi.service.impl; 2 | 3 | import java.util.List; 4 | 5 | import org.springframework.beans.factory.annotation.Autowired; 6 | import org.springframework.stereotype.Service; 7 | 8 | import com.wymessi.dao.EntityFieldMappingDao; 9 | import com.wymessi.po.EntityField; 10 | import com.wymessi.service.EntityFieldMappingService; 11 | /** 12 | * 用于项目申请、专家与领域相关联的业务层接口 13 | * @author 王冶 14 | * 15 | */ 16 | 17 | @Service 18 | public class EntityFieldMappingServiceImpl implements EntityFieldMappingService { 19 | 20 | @Autowired 21 | private EntityFieldMappingDao entityFieldMappingDao; 22 | 23 | /** 24 | * 添加关联 25 | * @param entityField 26 | */ 27 | @Override 28 | public int insert(EntityField entityField) { 29 | if (entityField != null) { 30 | return entityFieldMappingDao.insert(entityField); 31 | } 32 | return 0; 33 | } 34 | 35 | /** 36 | * 根据projectId查询 37 | * @param id 38 | * @return 39 | */ 40 | @Override 41 | public List listByEntityId(Long id, String entityType) { 42 | if (id != null) { 43 | List entityFields = entityFieldMappingDao.listByEntityId(id,entityType); 44 | return entityFields; 45 | } 46 | return null; 47 | } 48 | 49 | } 50 | -------------------------------------------------------------------------------- /src/main/java/com/wymessi/service/impl/FieldServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.wymessi.service.impl; 2 | 3 | import java.util.ArrayList; 4 | import java.util.Date; 5 | import java.util.List; 6 | 7 | import org.springframework.beans.factory.annotation.Autowired; 8 | import org.springframework.stereotype.Service; 9 | import org.springframework.util.CollectionUtils; 10 | 11 | import com.wymessi.dao.FieldDao; 12 | import com.wymessi.exception.CustomException; 13 | import com.wymessi.param.FieldsListParam; 14 | import com.wymessi.po.Field; 15 | import com.wymessi.po.SysUser; 16 | import com.wymessi.service.FieldService; 17 | import com.wymessi.utils.ListUtils; 18 | 19 | /** 20 | * 领域标签业务层接口实现 21 | * 22 | * @author 王冶 23 | * 24 | */ 25 | @Service 26 | public class FieldServiceImpl implements FieldService { 27 | 28 | @Autowired 29 | private FieldDao fieldDao; 30 | 31 | /** 32 | * 添加领域 33 | * 34 | * @param field 35 | */ 36 | @Override 37 | public void insert(Field field,SysUser user) { 38 | if (field != null) { 39 | field.setCreateTime(new Date()); 40 | field.setLastUpdateTime(new Date()); 41 | field.setCreateUserId(user.getId()); 42 | fieldDao.insert(field); 43 | } 44 | } 45 | 46 | /** 47 | * 批量添加领域 48 | * 49 | * @param fields 50 | */ 51 | @Override 52 | public void insertBatch(List fields) { 53 | if (!CollectionUtils.isEmpty(fields)) { 54 | fieldDao.insertBatch(fields); 55 | } 56 | } 57 | 58 | /** 59 | * 生成有效领域标签、插入记录同时关联申请记录 60 | * @param tagsinput 61 | * @param createUserId 62 | */ 63 | @Override 64 | public void getValidFieldAndInsertBatch(List inputFields, long createUserId) { 65 | if (CollectionUtils.isEmpty(inputFields)) { 66 | throw new CustomException("领域标签不能为空", "/prs/project/uploadPage"); 67 | } 68 | List validFields = new ArrayList(); // 最后真正进行插入的有效领域 69 | for (String string : inputFields) { 70 | Field field = new Field(); 71 | field.setFieldName(string); 72 | field.setCreateTime(new Date()); 73 | field.setCreateUserId(createUserId); 74 | validFields.add(field); 75 | } 76 | List existFields = fieldDao.listFieldsByNames(inputFields); 77 | // 如果数据库中已存在相同标签 78 | if (!CollectionUtils.isEmpty(existFields)) 79 | validFields = ListUtils.removeAll(validFields, existFields); 80 | if (!CollectionUtils.isEmpty(validFields)) 81 | insertBatch(validFields); 82 | } 83 | 84 | /** 85 | * 得到总记录数 86 | * @param param 87 | * @return 88 | */ 89 | @Override 90 | public int getTotalCount(FieldsListParam param) { 91 | if (param != null){ 92 | return fieldDao.getTotalCount(param); 93 | } 94 | return 0; 95 | } 96 | 97 | /** 98 | * 查询标签 99 | * @param param 100 | * @return 101 | */ 102 | @Override 103 | public List listField(FieldsListParam param) { 104 | if (param != null){ 105 | return fieldDao.listField(param); 106 | } 107 | return null; 108 | } 109 | 110 | /** 111 | * 修改领域标签信息 112 | * 113 | */ 114 | @Override 115 | public int update(Field field) { 116 | if (field != null) { 117 | return fieldDao.update(field); 118 | } 119 | return 0; 120 | } 121 | 122 | /** 123 | * 根据ID查询 124 | * @param id 125 | * @return 126 | */ 127 | @Override 128 | public Field getById(Long id) { 129 | if (id == null) { 130 | return null; 131 | } 132 | Field field = fieldDao.getById(id); 133 | return field; 134 | } 135 | 136 | /** 137 | * 根据id删除领域 138 | * @param id 139 | */ 140 | @Override 141 | public void deleteById(Long id) { 142 | if (id != null ){ 143 | fieldDao.deleteById(id); 144 | } 145 | } 146 | 147 | /** 148 | * 根据ID列表查询 149 | * @param fieldIds 150 | * @return 151 | */ 152 | @Override 153 | public List listByIds(List fieldIds) { 154 | if (!CollectionUtils.isEmpty(fieldIds)){ 155 | List fields = fieldDao.listByIds(fieldIds); 156 | return fields; 157 | } 158 | return null; 159 | } 160 | } 161 | -------------------------------------------------------------------------------- /src/main/java/com/wymessi/service/impl/GroupServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.wymessi.service.impl; 2 | 3 | import java.util.ArrayList; 4 | import java.util.Date; 5 | import java.util.List; 6 | 7 | import org.springframework.beans.factory.annotation.Autowired; 8 | import org.springframework.stereotype.Service; 9 | import org.springframework.transaction.annotation.Transactional; 10 | import org.springframework.util.CollectionUtils; 11 | 12 | import com.wymessi.dao.GroupDao; 13 | import com.wymessi.param.GroupAllocateParam; 14 | import com.wymessi.param.GroupListParam; 15 | import com.wymessi.po.Allocate; 16 | import com.wymessi.po.Group; 17 | import com.wymessi.po.Project; 18 | import com.wymessi.po.SysUser; 19 | import com.wymessi.service.AllocateService; 20 | import com.wymessi.service.GroupService; 21 | import com.wymessi.service.ProjectService; 22 | 23 | /** 24 | * 项目分组业务层接口实现 25 | * 26 | * @author 王冶 27 | * 28 | */ 29 | @Service 30 | public class GroupServiceImpl implements GroupService { 31 | 32 | @Autowired 33 | private GroupDao groupDao; 34 | 35 | @Autowired 36 | private AllocateService allocateService; 37 | 38 | @Autowired 39 | private ProjectService projectService; 40 | 41 | /** 42 | * 添加项目分组 43 | * 44 | * @param field 45 | */ 46 | @Override 47 | public void insert(Group group,SysUser user) { 48 | if (group != null) { 49 | group.setCreateTime(new Date()); 50 | group.setLastUpdateTime(new Date()); 51 | group.setCreateUserId(user.getId()); 52 | group.setStatus(Group.PROJECT_GROUP_STATUS_WAIT_ADD_PROJECT); 53 | groupDao.insert(group); 54 | } 55 | } 56 | 57 | /** 58 | * 得到总记录数 59 | * @param param 60 | * @return 61 | */ 62 | @Override 63 | public int getTotalCount(GroupListParam param) { 64 | if (param != null){ 65 | return groupDao.getTotalCount(param); 66 | } 67 | return 0; 68 | } 69 | 70 | /** 71 | * 查询分组 72 | * @param param 73 | * @return 74 | */ 75 | @Override 76 | public List listGroup(GroupListParam param) { 77 | if (param != null){ 78 | return groupDao.listGroup(param); 79 | } 80 | return null; 81 | } 82 | 83 | /** 84 | * 修改分组信息 85 | * 86 | */ 87 | @Override 88 | public int update(Group group) { 89 | if (group != null) { 90 | return groupDao.update(group); 91 | } 92 | return 0; 93 | } 94 | 95 | /** 96 | * 根据ID查询 97 | * @param id 98 | * @return 99 | */ 100 | @Override 101 | public Group getById(Long id) { 102 | if (id == null) { 103 | return null; 104 | } 105 | Group group = groupDao.getById(id); 106 | return group; 107 | } 108 | 109 | @Transactional 110 | @Override 111 | public int allocate(GroupAllocateParam param) { 112 | Allocate allocate = new Allocate(); 113 | allocate.setAllocateUserId(param.getUser().getId()); 114 | allocate.setExpertId(param.getExpertId()); 115 | allocate.setGroupId(param.getGroupId()); 116 | allocate.setAllocateTime(new Date()); 117 | int num = allocateService.insert(allocate); 118 | 119 | Group group = getById(param.getGroupId()); 120 | group.setStatus(Group.PROJECT_GROUP_STATUS_ALLOCATE_DONE); 121 | group.setLastUpdateTime(new Date()); 122 | update(group); 123 | 124 | List projects = projectService.listByGroupId(param.getGroupId()); 125 | List projectIds = new ArrayList(); 126 | 127 | if (!CollectionUtils.isEmpty(projects)) { 128 | for (Project project : projects) { 129 | projectIds.add(project.getId()); 130 | } 131 | projectService.updateStatusByIds(projectIds, Project.PROJECT_REVIEW_STATUS_WAIT_REVIEW); 132 | } 133 | return num; 134 | } 135 | 136 | 137 | } 138 | -------------------------------------------------------------------------------- /src/main/java/com/wymessi/service/impl/ReviewServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.wymessi.service.impl; 2 | 3 | import java.util.Date; 4 | import java.util.List; 5 | 6 | import org.springframework.beans.factory.annotation.Autowired; 7 | import org.springframework.stereotype.Service; 8 | import org.springframework.transaction.annotation.Transactional; 9 | 10 | import com.wymessi.dao.ReviewDao; 11 | import com.wymessi.exception.CustomException; 12 | import com.wymessi.po.Allocate; 13 | import com.wymessi.po.Project; 14 | import com.wymessi.po.Review; 15 | import com.wymessi.po.SysUser; 16 | import com.wymessi.service.AllocateService; 17 | import com.wymessi.service.ProjectService; 18 | import com.wymessi.service.ReviewService; 19 | 20 | @Service 21 | public class ReviewServiceImpl implements ReviewService { 22 | 23 | @Autowired 24 | private ReviewDao reviewDao; 25 | 26 | @Autowired 27 | private ProjectService projectService; 28 | 29 | @Autowired 30 | private AllocateService allocateService; 31 | 32 | @Override 33 | public void insert(Review review) { 34 | if (review == null) 35 | return; 36 | reviewDao.insert(review); 37 | } 38 | 39 | @Transactional 40 | @Override 41 | public void review(Review review, SysUser user, Long groupId) { 42 | if (review == null){ 43 | throw new CustomException("参数错误,刷新后重试", "/prs/review/reviewInfoPage"); 44 | } 45 | review.setExpertId(user.getId()); 46 | review.setReviewTime(new Date()); 47 | insert(review); 48 | Project p = projectService.getProjectById(review.getProjectId()); 49 | if (p == null) { 50 | throw new CustomException("该申请记录不存在", "/prs/review/reviewInfoPage"); 51 | } 52 | projectService.updateReviewCountById(p.getId()); 53 | p.setStatus(Project.PROJECT_REVIEW_STATUS_IN_REVIEW); 54 | p.setLastUpdateTime(new Date()); 55 | projectService.update(p); 56 | 57 | 58 | //查出分组被分配给了哪些专家 59 | List allocates = allocateService.listByGroupId(groupId); 60 | Project project = projectService.getProjectById(review.getProjectId()); 61 | 62 | //如果所有专家都评审完成,则项目才算评审完成 63 | if (project.getReviewCount() == allocates.size()) { 64 | project.setStatus(Project.PROJECT_REVIEW_STATUS_REVIEW_DONE); 65 | project.setLastUpdateTime(new Date()); 66 | projectService.update(project); 67 | } 68 | } 69 | 70 | @Override 71 | public List listByProjectId(Long id) { 72 | if (id == null) 73 | return null; 74 | return reviewDao.listByProjectId(id); 75 | } 76 | 77 | @Override 78 | public Review getByExpertIdAndProjectId(Long expertId, Long projectId) { 79 | if (projectId == null) 80 | return null; 81 | return reviewDao.getByExpertIdAndProjectId(expertId,projectId); 82 | } 83 | 84 | } 85 | -------------------------------------------------------------------------------- /src/main/java/com/wymessi/service/impl/RoleServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.wymessi.service.impl; 2 | 3 | import org.springframework.stereotype.Service; 4 | 5 | import com.wymessi.po.SysRole; 6 | import com.wymessi.service.RoleService; 7 | /** 8 | * 系统角色业务层接口实现 9 | * @author 王冶 10 | * 11 | */ 12 | @Service 13 | public class RoleServiceImpl implements RoleService { 14 | 15 | /** 16 | * sysRole 17 | */ 18 | @Override 19 | public void insert(SysRole sysRole) { 20 | // TODO Auto-generated method stub 21 | 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/com/wymessi/service/impl/UserServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.wymessi.service.impl; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | import org.apache.commons.lang3.StringUtils; 7 | import org.springframework.beans.factory.annotation.Autowired; 8 | import org.springframework.stereotype.Service; 9 | import org.springframework.util.CollectionUtils; 10 | 11 | import com.wymessi.dao.UserDao; 12 | import com.wymessi.param.UserListParam; 13 | import com.wymessi.po.SysUser; 14 | import com.wymessi.service.UserService; 15 | 16 | /** 17 | * 系统用户业务层接口实现 18 | * 19 | * @author 王冶 20 | * 21 | */ 22 | @Service 23 | public class UserServiceImpl implements UserService { 24 | 25 | @Autowired 26 | private UserDao userDao; 27 | 28 | /** 29 | * 注册 30 | * 31 | * @param applicant 32 | */ 33 | @Override 34 | public void register(SysUser sysUser) { 35 | if (sysUser != null) 36 | userDao.register(sysUser); 37 | } 38 | 39 | /** 40 | * 项目申请者登陆 41 | * 42 | * @param param 43 | * @return 44 | */ 45 | @Override 46 | public SysUser login(SysUser sysUser) { 47 | if (sysUser != null) { 48 | SysUser user = userDao.login(sysUser); 49 | return user; 50 | } 51 | return null; 52 | } 53 | 54 | /** 55 | * 修改个人信息 56 | * 57 | * @param user 58 | */ 59 | @Override 60 | public int update(SysUser user) { 61 | if (user != null) { 62 | return userDao.update(user); 63 | } 64 | return 0; 65 | } 66 | 67 | /** 68 | * 根据id查找用户 69 | * @param user 70 | * @return 71 | */ 72 | @Override 73 | public SysUser getUserById(Long id) { 74 | if (id != null) { 75 | SysUser user = userDao.getUserById(id); 76 | if (user != null) 77 | return user; 78 | } 79 | return null; 80 | } 81 | 82 | /** 83 | * 通过name模糊搜索用户 84 | * @param createUserName 85 | * @return 86 | */ 87 | @Override 88 | public List getUserByUserName(String createUserName) { 89 | if (createUserName == null){ 90 | return null; 91 | } 92 | List users = userDao.getUserByUserName(createUserName); 93 | List userIds = new ArrayList(); 94 | for (SysUser user : users) { 95 | userIds.add(user.getId()); 96 | } 97 | return userIds; 98 | } 99 | 100 | /** 101 | * 通过name和角色搜索用户 102 | * @param username 103 | * @param roleId 104 | * @return 105 | */ 106 | @Override 107 | public List listUsersByNameAndRole(UserListParam param) { 108 | List users = null; 109 | if (param.getRoleId() == null && StringUtils.isEmpty(param.getUsername())){ 110 | return null; 111 | } 112 | users = userDao.listUsersByNameAndRole(param); 113 | return users; 114 | } 115 | 116 | @Override 117 | public int getTotalCount(UserListParam param) { 118 | if (param != null){ 119 | return userDao.getTotalCount(param); 120 | } 121 | return 0; 122 | } 123 | 124 | /** 125 | * 根据id查询专家 126 | * @return 127 | */ 128 | @Override 129 | public List listExpertByIds(List idList) { 130 | List experts = null; 131 | if (CollectionUtils.isEmpty(idList)){ 132 | return null; 133 | } 134 | experts = userDao.listExpertByIds(idList); 135 | return experts; 136 | } 137 | 138 | /** 139 | * 根据id删除用户 140 | * @param id 141 | */ 142 | @Override 143 | public void deleteById(Long id) { 144 | if (id != null ){ 145 | userDao.deleteById(id); 146 | } 147 | } 148 | } 149 | -------------------------------------------------------------------------------- /src/main/java/com/wymessi/utils/CustomDateUtils.java: -------------------------------------------------------------------------------- 1 | package com.wymessi.utils; 2 | 3 | import java.text.ParseException; 4 | import java.util.Date; 5 | 6 | import org.apache.commons.lang3.time.DateUtils; 7 | 8 | import com.wymessi.param.CustomParam; 9 | 10 | public class CustomDateUtils { 11 | 12 | /** 13 | * 设置正确的日期格式 14 | * 15 | * @param param 16 | * @param startToEndTime 17 | * @throws ParseException 18 | */ 19 | public static void setTimeRange(CustomParam param, String startToEndTime) { 20 | String[] strs = startToEndTime.split("~"); 21 | for (String string : strs) { 22 | Date date = null; 23 | try { 24 | date = DateUtils.parseDate(string.trim(), "yyyy-MM-dd HH:mm:ss"); 25 | } catch (ParseException e) { 26 | throw new RuntimeException("时间转化异常"); 27 | } 28 | if (param.getStartTime() == null) { 29 | param.setStartTime(date); 30 | } else { 31 | param.setEndTime(date); 32 | } 33 | 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /src/main/java/com/wymessi/utils/FileUtils.java: -------------------------------------------------------------------------------- 1 | package com.wymessi.utils; 2 | 3 | import java.io.BufferedInputStream; 4 | import java.io.File; 5 | import java.io.FileInputStream; 6 | import java.io.FileOutputStream; 7 | import java.io.IOException; 8 | import java.io.OutputStream; 9 | import java.net.URLEncoder; 10 | 11 | import javax.servlet.http.HttpServletRequest; 12 | import javax.servlet.http.HttpServletResponse; 13 | 14 | import org.springframework.web.multipart.MultipartFile; 15 | 16 | /** 17 | * 文件处理工具类 18 | * 19 | * @author 王冶 20 | * 21 | */ 22 | public class FileUtils { 23 | 24 | public static String upload(MultipartFile file) throws IOException { 25 | String fileName = file.getOriginalFilename(); // 文件名带后缀 26 | String savePath = "D:" + File.separator + "prsUploadFiles"+File.separator; // 文件保存路径 27 | byte buf[] = file.getBytes(); 28 | File parent = new File(savePath); 29 | if (!parent.exists()) { 30 | parent.mkdirs(); 31 | } 32 | FileOutputStream out = new FileOutputStream(new File(savePath+fileName)); 33 | out.write(buf); 34 | out.flush(); 35 | out.close(); 36 | return savePath+fileName; 37 | } 38 | 39 | public static String download(String path,HttpServletResponse res, HttpServletRequest req) throws IOException { 40 | File file = new File(path); 41 | if (!file.exists()) { 42 | return "下载的文件不存在,请联系管理员!"; 43 | } 44 | String fileName = path.substring(path.lastIndexOf("\\")+1); 45 | 46 | if (req.getHeader("User-Agent").toUpperCase().indexOf("MSIE") > 0) { 47 | fileName = URLEncoder.encode(fileName, "UTF-8"); 48 | } else { 49 | fileName = new String(fileName.getBytes("UTF-8"), "ISO8859-1"); 50 | } 51 | res.setHeader("Content-Disposition","attachment;"+ "filename="+ fileName); 52 | res.setContentType("application/octet-stream"); 53 | 54 | /* 55 | * 该段代码也是正确的 56 | * 57 | * String userAgent = req.getHeader("User-Agent"); 58 | 59 | // 针对IE或者以IE为内核的浏览器: 60 | if (userAgent.contains("MSIE") || userAgent.contains("Trident")) { 61 | fileName = java.net.URLEncoder.encode(fileName, "UTF-8"); 62 | } else { 63 | // 非IE浏览器的处理: 64 | fileName = new String(fileName.getBytes("UTF-8"), "ISO-8859-1"); 65 | } 66 | res.setHeader("Content-disposition", 67 | String.format("attachment; filename=\"%s\"", fileName)); 68 | res.setContentType("application/vnd.ms-excel;charset=utf-8"); 69 | res.setCharacterEncoding("UTF-8"); */ 70 | 71 | byte[] buff = new byte[1024]; 72 | BufferedInputStream bis = null; 73 | OutputStream os = null; 74 | try { 75 | os = res.getOutputStream(); 76 | bis = new BufferedInputStream(new FileInputStream(new File(path))); 77 | int i = bis.read(buff); 78 | while (i != -1) { 79 | os.write(buff, 0, buff.length); 80 | os.flush(); 81 | i = bis.read(buff); 82 | } 83 | } catch (IOException e) { 84 | e.printStackTrace(); 85 | return "下载失败,请稍后重试"; 86 | } finally { 87 | if (bis != null) { 88 | try { 89 | bis.close(); 90 | } catch (IOException e) { 91 | e.printStackTrace(); 92 | } 93 | } 94 | if (os != null) { 95 | try { 96 | os.close(); 97 | } catch (IOException e) { 98 | e.printStackTrace(); 99 | } 100 | } 101 | } 102 | return "下载成功"; 103 | } 104 | } 105 | -------------------------------------------------------------------------------- /src/main/java/com/wymessi/utils/ListUtils.java: -------------------------------------------------------------------------------- 1 | package com.wymessi.utils; 2 | 3 | import java.util.HashSet; 4 | import java.util.Iterator; 5 | import java.util.LinkedList; 6 | import java.util.List; 7 | 8 | /** 9 | * 10 | * @author 王冶 11 | * 12 | */ 13 | public class ListUtils { 14 | 15 | /** 16 | * 此方法比ArrayList.removeAll效率要高,时间复杂度低 17 | * @param src 18 | * @param target 要在src中删去的集合 19 | * @return 20 | */ 21 | public static List removeAll(List src, List target) { 22 | LinkedList result = new LinkedList<>(src); // 大集合用linkedlist 23 | HashSet targetHash = new HashSet<>(target); // 小集合用hashset 24 | Iterator iter = result.iterator(); // 采用Iterator迭代器进行数据的操作 25 | 26 | while (iter.hasNext()) { 27 | if (targetHash.contains(iter.next())) { 28 | iter.remove(); 29 | } 30 | } 31 | return result; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/main/java/com/wymessi/utils/Md5Utils.java: -------------------------------------------------------------------------------- 1 | package com.wymessi.utils; 2 | 3 | import java.io.UnsupportedEncodingException; 4 | import java.security.MessageDigest; 5 | import java.security.NoSuchAlgorithmException; 6 | 7 | import sun.misc.BASE64Encoder; 8 | 9 | @SuppressWarnings("restriction") 10 | public class Md5Utils { 11 | 12 | public static String md5(String str) throws NoSuchAlgorithmException, UnsupportedEncodingException{ 13 | //确定计算方法 14 | MessageDigest md5=MessageDigest.getInstance("MD5"); 15 | BASE64Encoder base64en = new BASE64Encoder(); 16 | //加密后的字符串 17 | String newstr=base64en.encode(md5.digest(str.getBytes("utf-8"))); 18 | return newstr; 19 | } 20 | public static void main(String[] args) throws Exception { 21 | System.out.println(md5("admin")); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/com/wymessi/utils/RedisScriptEngine.java: -------------------------------------------------------------------------------- 1 | package com.wymessi.utils; 2 | 3 | import redis.clients.jedis.Jedis; 4 | 5 | public class RedisScriptEngine { 6 | 7 | /** 8 | * 添加key value 9 | * 10 | * @param key 11 | * @param value 12 | */ 13 | public void set(String key, String value) { 14 | Jedis jedis = RedisUtils.getJedis(); 15 | jedis.set(key, value); 16 | RedisUtils.returnResource(jedis); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/main/java/com/wymessi/utils/RedisUtils.java: -------------------------------------------------------------------------------- 1 | package com.wymessi.utils; 2 | 3 | import redis.clients.jedis.Jedis; 4 | import redis.clients.jedis.JedisPool; 5 | import redis.clients.jedis.JedisPoolConfig; 6 | 7 | public class RedisUtils { 8 | 9 | // Redis服务器IP 10 | // private static String ADDR = "127.0.0.1"; 11 | private static String ADDR = "192.168.20.3"; 12 | // Redis的端口号 13 | private static int PORT = 6379; 14 | // 可用连接实例的最大数目,默认值为8; 15 | // 如果赋值为-1,则表示不限制;如果pool已经分配了maxActive个jedis实例,则此时pool的状态为exhausted(耗尽)。 16 | private static int MAX_ACTIVE = 1024; 17 | // 控制一个pool最多有多少个状态为idle(空闲的)的jedis实例,默认值也是8。 18 | private static int MAX_IDLE = 200; 19 | // 等待可用连接的最大时间,单位毫秒,默认值为-1,表示永不超时。如果超过等待时间,则直接抛出JedisConnectionException; 20 | private static int MAX_WAIT = 10000; 21 | 22 | // 在borrow一个jedis实例时,是否提前进行validate操作;如果为true,则得到的jedis实例均是可用的; 23 | private static boolean TEST_ON_BORROW = false; 24 | private static JedisPool jedisPool = null; 25 | /** 26 | * 初始化Redis连接池 27 | */ 28 | static { 29 | try { 30 | JedisPoolConfig config = new JedisPoolConfig(); 31 | config.setMaxTotal(MAX_ACTIVE); 32 | config.setMaxIdle(MAX_IDLE); 33 | config.setMaxWaitMillis(MAX_WAIT); 34 | config.setTestOnBorrow(TEST_ON_BORROW); 35 | jedisPool = new JedisPool(config, ADDR, PORT); 36 | } catch (Exception e) { 37 | e.printStackTrace(); 38 | } 39 | } 40 | 41 | /** 42 | * 获取Jedis实例 43 | * 44 | * @return 45 | */ 46 | public synchronized static Jedis getJedis() { 47 | try { 48 | if (jedisPool != null) { 49 | Jedis resource = jedisPool.getResource(); 50 | return resource; 51 | } else { 52 | return null; 53 | } 54 | } catch (Exception e) { 55 | e.printStackTrace(); 56 | return null; 57 | } 58 | } 59 | 60 | /** 61 | * 释放jedis资源 62 | * 63 | * @param jedis 64 | */ 65 | public static void returnResource(Jedis jedis) { 66 | if (jedis != null) { 67 | jedis.close(); 68 | } 69 | } 70 | } -------------------------------------------------------------------------------- /src/main/java/com/wymessi/utils/RequestUtils.java: -------------------------------------------------------------------------------- 1 | package com.wymessi.utils; 2 | 3 | import java.io.IOException; 4 | import java.io.InputStream; 5 | import java.io.InputStreamReader; 6 | import java.nio.charset.Charset; 7 | 8 | import javax.servlet.http.HttpServletRequest; 9 | 10 | import org.apache.commons.io.IOUtils; 11 | import org.apache.commons.lang3.StringUtils; 12 | 13 | import com.alibaba.fastjson.JSON; 14 | import com.alibaba.fastjson.JSONObject; 15 | import com.wymessi.exception.CustomException; 16 | 17 | 18 | 19 | public class RequestUtils { 20 | 21 | 22 | public static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8"); 23 | 24 | public static T toObject(HttpServletRequest request, Class clazz) throws IOException{ 25 | 26 | JSONObject jsonObject = toJson(request); 27 | if (jsonObject == null) 28 | return null; 29 | JSONObject dataJson = jsonObject.getJSONObject("data"); 30 | if (dataJson == null) 31 | return null; 32 | T t = null; 33 | try{ 34 | t = JSON.toJavaObject(dataJson, clazz); 35 | }catch (Exception e) { 36 | throw new CustomException("json转化异常",""); 37 | } 38 | return t; 39 | } 40 | 41 | public static JSONObject toJson(HttpServletRequest request) throws IOException{ 42 | InputStream in = request.getInputStream(); 43 | InputStreamReader reader = new InputStreamReader(in, DEFAULT_CHARSET); 44 | String content = IOUtils.toString(reader); 45 | if(StringUtils.isBlank(content)) { 46 | return null; 47 | } 48 | return JSON.parseObject(content); 49 | } 50 | 51 | public static JSONObject toParameter(HttpServletRequest request) throws IOException { 52 | JSONObject json = toJson(request); 53 | return json == null ? null : json.getJSONObject("data"); 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /src/main/java/com/wymessi/utils/Result.java: -------------------------------------------------------------------------------- 1 | package com.wymessi.utils; 2 | 3 | public class Result { 4 | 5 | private String code; 6 | private String msg; 7 | private T data; 8 | 9 | public static Result success(T data){ 10 | Result r = new Result(); 11 | r.code = "200"; 12 | r.msg = "success"; 13 | r.setData(data); 14 | return r; 15 | } 16 | public String getCode() { 17 | return code; 18 | } 19 | public void setCode(String code) { 20 | this.code = code; 21 | } 22 | public String getMsg() { 23 | return msg; 24 | } 25 | public void setMsg(String msg) { 26 | this.msg = msg; 27 | } 28 | public T getData() { 29 | return data; 30 | } 31 | public void setData(T data) { 32 | this.data = data; 33 | } 34 | 35 | } 36 | -------------------------------------------------------------------------------- /src/main/java/com/wymessi/utils/UUIDUtils.java: -------------------------------------------------------------------------------- 1 | package com.wymessi.utils; 2 | 3 | import java.util.UUID; 4 | 5 | public class UUIDUtils { 6 | 7 | /** 8 | * 生成随机字符串 9 | * @return 10 | */ 11 | public static String generateUUIDString(){ 12 | return UUID.randomUUID().toString(); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/main/resources/SQLMapConfig.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | # application.yaml 2 | # Server settings (ServerProperties) 3 | server: 4 | port: 8080 5 | address: 127.0.0.1 6 | sessionTimeout: 30 7 | contextPath: /prs 8 | 9 | # Tomcat specifics 10 | tomcat: 11 | accessLogEnabled: false 12 | protocolHeader: x-forwarded-proto 13 | remoteIpHeader: x-forwarded-for 14 | basedir: 15 | backgroundProcessorDelay: 30 # secs 16 | 17 | #日志级别配置 18 | logging: 19 | path: E:\\log 20 | level: 21 | root: info 22 | org: 23 | springframework: 24 | web: debug 25 | 26 | 27 | spring: 28 | #数据库连接池配置 29 | datasource: 30 | name: test 31 | url: jdbc:mysql://localhost:3306/prs_v2 32 | username: root 33 | password: root 34 | type: com.alibaba.druid.pool.DruidDataSource 35 | driver-class-name: com.mysql.jdbc.Driver 36 | filters: stat 37 | maxActive: 20 38 | initialSize: 1 39 | maxWait: 60000 40 | minIdle: 1 41 | timeBetweenEvictionRunsMillis: 60000 42 | minEvictableIdleTimeMillis: 300000 43 | validationQuery: select 'x' 44 | testWhileIdle: true 45 | testOnBorrow: false 46 | testOnReturn: false 47 | poolPreparedStatements: true 48 | maxOpenPreparedStatements: 20 49 | #thymleaf配置 50 | thymeleaf: 51 | prefix: classpath:/templates/ 52 | suffix: .html 53 | mode: HTML5 54 | encoding: UTF-8 55 | cache: false 56 | #上传文件大小配置 57 | http: 58 | multipart: 59 | maxFileSize: 20Mb 60 | maxRequestSize: 200Mb -------------------------------------------------------------------------------- /src/main/resources/mapper/allocate.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 15 | SELECT LAST_INSERT_ID() 16 | 17 | INSERT INTO allocate(id,allocate_user_id,group_id,allocate_time,expert_id) 18 | VALUES(#{id},#{allocateUserId},#{groupId},#{allocateTime},#{expertId}) 19 | 20 | 21 | 24 | 27 | -------------------------------------------------------------------------------- /src/main/resources/mapper/entityField.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 14 | SELECT LAST_INSERT_ID() 15 | 16 | INSERT INTO entity_field(id,field_id,entity_id,entity_type) 17 | VALUES(#{id},#{fieldId},#{entityId},#{entityType}) 18 | 19 | 20 | 21 | 22 | #{item} 23 | 24 | 25 | 26 | 29 | -------------------------------------------------------------------------------- /src/main/resources/mapper/field.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 16 | SELECT LAST_INSERT_ID() 17 | 18 | INSERT INTO field(id,field_name,create_time,create_user_id,last_update_time) 19 | VALUES(#{id},#{fieldName},#{createTime},#{createUserId},#{lastUpdateTime}) 20 | 21 | 22 | 23 | INSERT INTO field(field_name,create_time,create_user_id) 24 | VALUES 25 | 26 | (#{field.fieldName},#{field.createTime},#{field.createUserId}) 27 | 28 | 29 | 30 | 33 | 34 | 35 | 36 | #{item} 37 | 38 | 39 | 40 | 55 | 58 | 72 | 75 | 76 | UPDATE field 77 | 78 | 79 | field_name = #{fieldName}, 80 | 81 | 82 | create_user_id = #{createUserId}, 83 | 84 | 85 | create_time = #{createTime}, 86 | 87 | 88 | last_update_time = #{lastUpdateTime}, 89 | 90 | 91 | WHERE id = #{id} 92 | 93 | 94 | DELETE FROM field WHERE id = #{id} 95 | 96 | 99 | -------------------------------------------------------------------------------- /src/main/resources/mapper/group.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 17 | SELECT LAST_INSERT_ID() 18 | 19 | INSERT INTO project_group(id,group_name,status,create_time,create_user_id,last_update_time) 20 | VALUES(#{id},#{groupName},#{status},#{createTime},#{createUserId},#{lastUpdateTime}) 21 | 22 | 23 | 24 | 25 | #{item} 26 | 27 | 28 | 29 | 47 | 50 | 67 | 70 | 71 | UPDATE project_group 72 | 73 | 74 | group_name = #{groupName}, 75 | 76 | 77 | create_user_id = #{createUserId}, 78 | 79 | 80 | create_time = #{createTime}, 81 | 82 | 83 | last_update_time = #{lastUpdateTime}, 84 | 85 | 86 | status = #{status} 87 | 88 | 89 | WHERE id = #{id} 90 | 91 | -------------------------------------------------------------------------------- /src/main/resources/mapper/review.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 17 | SELECT LAST_INSERT_ID() 18 | 19 | INSERT INTO review(id,applicant_id,project_id,expert_id,opinion,grade,review_time) 20 | VALUES(#{id},#{applicantId},#{projectId},#{expertId},#{opinion},#{grade},#{reviewTime}) 21 | 22 | 25 | 26 | 29 | -------------------------------------------------------------------------------- /src/main/resources/mapper/user.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 18 | SELECT LAST_INSERT_ID() 19 | 20 | INSERT INTO sys_user(id,username,password,sex,mail,phone,title,role_id) 21 | VALUES(#{id},#{username},#{password},#{sex},#{mail},#{phone},#{title},#{roleId}) 22 | 23 | 24 | 27 | 28 | 31 | 32 | 33 | UPDATE sys_user 34 | 35 | 36 | username = #{username}, 37 | 38 | 39 | sex = #{sex}, 40 | 41 | 42 | mail = #{mail}, 43 | 44 | 45 | phone = #{phone}, 46 | 47 | 48 | title = #{title}, 49 | 50 | 51 | WHERE id = #{id} 52 | 53 | 54 | 57 | 58 | 70 | 71 | 82 | 83 | 84 | 85 | #{item} 86 | 87 | 88 | 89 | 93 | 94 | DELETE FROM sys_user WHERE id = #{id} 95 | 96 | -------------------------------------------------------------------------------- /src/main/resources/static/css/allocate.css: -------------------------------------------------------------------------------- 1 | .layui-elem-quote{ 2 | margin: 40px 0; 3 | } 4 | .layui-breadcrumb{ 5 | position: absolute; 6 | height:20px; 7 | top:15px; 8 | left: 15px; 9 | } 10 | #tableInfo{ 11 | width:1000px; 12 | position: absolute; 13 | top:200px; 14 | left:40px; 15 | } 16 | -------------------------------------------------------------------------------- /src/main/resources/static/css/applyinfo.css: -------------------------------------------------------------------------------- 1 | /* .layui-body{ 2 | padding: 150px 350px 0 150px; 3 | } 4 | */ 5 | .layui-breadcrumb{ 6 | position: absolute; 7 | height:20px; 8 | top:15px; 9 | left: 15px; 10 | } 11 | .layui-form{ 12 | width:1500px; 13 | position: absolute; 14 | top:80px; 15 | left:0px; 16 | } 17 | .layui-bg-green{ 18 | height:6px; 19 | margin-top: 150px; 20 | } 21 | #tableInfo{ 22 | width:1000px; 23 | position: absolute; 24 | top:100px; 25 | left:50px; 26 | } 27 | -------------------------------------------------------------------------------- /src/main/resources/static/css/baseinfo.css: -------------------------------------------------------------------------------- 1 | .layui-body{ 2 | padding: 150px 200px 0 200px; 3 | } 4 | .layui-breadcrumb{ 5 | position: absolute; 6 | height:20px; 7 | top:15px; 8 | left: 15px; 9 | } -------------------------------------------------------------------------------- /src/main/resources/static/css/login.css: -------------------------------------------------------------------------------- 1 | .layui-layout-body{ 2 | background: #5FB878; 3 | } 4 | .layui-form-item{ 5 | padding-bottom: 20px; 6 | } 7 | .layui-form-label{ 8 | font-weight:bold; 9 | color: #009688; 10 | } 11 | a{ 12 | text-decoration: none; 13 | color: #fff; 14 | } 15 | h1{ 16 | font-size: 60px; 17 | color: #393D49; 18 | padding:100px 0 0 100px; 19 | } 20 | h1 i{ 21 | padding-right:20px; 22 | } 23 | .layui-icon{ 24 | font-size: 60px; 25 | color: #393D49; 26 | } 27 | .login{ 28 | width:400px; 29 | height:300px; 30 | background: #F0F0F0; 31 | border-radius: 4px; 32 | margin: 50px 0 0 0; 33 | padding-top:100px; 34 | } 35 | .layui-btn{ 36 | width:88px; 37 | } 38 | .layui-footer{ 39 | height:50px; 40 | margin-top:80px; 41 | background: #ccc; 42 | } 43 | .layui-footer p{ 44 | height:50px; 45 | line-height:50px; 46 | text-align:center; 47 | color:black; 48 | } -------------------------------------------------------------------------------- /src/main/resources/static/css/register.css: -------------------------------------------------------------------------------- 1 | .layui-layout-body{ 2 | background: #5FB878; 3 | } 4 | .layui-form-label{ 5 | font-weight:bold; 6 | color: #009688; 7 | } 8 | h1{ 9 | font-size: 30px; 10 | padding-left:20px; 11 | padding-top:20px; 12 | color: #393D49; 13 | } 14 | h1 i{ 15 | padding-right:20px; 16 | } 17 | .layui-icon{ 18 | font-size: 30px; 19 | color: #393D49; 20 | } 21 | .register{ 22 | width:400px; 23 | height:450px; 24 | background: #F0F0F0; 25 | border-radius: 4px; 26 | margin: 20px auto; 27 | margin-bottom:0px; 28 | padding-top:30px; 29 | } 30 | .layui-btn{ 31 | width:190px; 32 | } 33 | .layui-footer{ 34 | height:50px; 35 | margin-top:26px; 36 | background: #ccc; 37 | } 38 | .layui-footer p{ 39 | height:50px; 40 | line-height:50px; 41 | text-align:center; 42 | color:black; 43 | } -------------------------------------------------------------------------------- /src/main/resources/static/css/upload.css: -------------------------------------------------------------------------------- 1 | a{ 2 | text-decoration: none; 3 | } 4 | .layui-form{ 5 | padding: 50px 0 50px 0; 6 | } 7 | .layui-form-item{ 8 | width: 600px; 9 | } 10 | .layui-form,.layui-elem-quote{ 11 | margin: 12px 200px 12px 200px; 12 | } 13 | .layui-textarea, .tagsinput,.tagsinput-typeahead,.input-lg, .layui-input{ 14 | border-radius:10px; 15 | border-color: #EBEDEF; 16 | font-size: 14px; 17 | } 18 | .layui-textarea{ 19 | border-width: 2px; 20 | outline: none; 21 | } 22 | .layui-input{ 23 | border-width: 2px; 24 | outline: none; 25 | } 26 | .layui-btn{ 27 | width: 490px; 28 | } 29 | .file { 30 | position: relative; 31 | display: inline-block; 32 | background: #009688; 33 | border-radius: 4px; 34 | padding: 4px 12px; 35 | width:490px; 36 | color:#fff; 37 | overflow: hidden; 38 | text-decoration: none; 39 | text-indent: 0; 40 | line-height: 20px; 41 | } 42 | .file input { 43 | position: absolute; 44 | font-size: 100px; 45 | right: 0; 46 | top: 0; 47 | opacity: 0; 48 | } 49 | .icon{ 50 | width:200px; 51 | position: absolute; 52 | left:200px; 53 | top:10px; 54 | } 55 | .layui-breadcrumb{ 56 | position: absolute; 57 | height:20px; 58 | top:15px; 59 | left: 15px; 60 | } -------------------------------------------------------------------------------- /src/main/resources/static/flatui/css/vendor/bootstrap/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/flatui/css/vendor/bootstrap/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /src/main/resources/static/flatui/css/vendor/bootstrap/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/flatui/css/vendor/bootstrap/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /src/main/resources/static/flatui/css/vendor/bootstrap/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/flatui/css/vendor/bootstrap/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /src/main/resources/static/flatui/css/vendor/bootstrap/fonts/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/flatui/css/vendor/bootstrap/fonts/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /src/main/resources/static/flatui/fonts/glyphicons/flat-ui-icons-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/flatui/fonts/glyphicons/flat-ui-icons-regular.eot -------------------------------------------------------------------------------- /src/main/resources/static/flatui/fonts/glyphicons/flat-ui-icons-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/flatui/fonts/glyphicons/flat-ui-icons-regular.ttf -------------------------------------------------------------------------------- /src/main/resources/static/flatui/fonts/glyphicons/flat-ui-icons-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/flatui/fonts/glyphicons/flat-ui-icons-regular.woff -------------------------------------------------------------------------------- /src/main/resources/static/flatui/fonts/lato/lato-black.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/flatui/fonts/lato/lato-black.eot -------------------------------------------------------------------------------- /src/main/resources/static/flatui/fonts/lato/lato-black.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/flatui/fonts/lato/lato-black.ttf -------------------------------------------------------------------------------- /src/main/resources/static/flatui/fonts/lato/lato-black.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/flatui/fonts/lato/lato-black.woff -------------------------------------------------------------------------------- /src/main/resources/static/flatui/fonts/lato/lato-bold.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/flatui/fonts/lato/lato-bold.eot -------------------------------------------------------------------------------- /src/main/resources/static/flatui/fonts/lato/lato-bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/flatui/fonts/lato/lato-bold.ttf -------------------------------------------------------------------------------- /src/main/resources/static/flatui/fonts/lato/lato-bold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/flatui/fonts/lato/lato-bold.woff -------------------------------------------------------------------------------- /src/main/resources/static/flatui/fonts/lato/lato-bolditalic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/flatui/fonts/lato/lato-bolditalic.eot -------------------------------------------------------------------------------- /src/main/resources/static/flatui/fonts/lato/lato-bolditalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/flatui/fonts/lato/lato-bolditalic.ttf -------------------------------------------------------------------------------- /src/main/resources/static/flatui/fonts/lato/lato-bolditalic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/flatui/fonts/lato/lato-bolditalic.woff -------------------------------------------------------------------------------- /src/main/resources/static/flatui/fonts/lato/lato-italic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/flatui/fonts/lato/lato-italic.eot -------------------------------------------------------------------------------- /src/main/resources/static/flatui/fonts/lato/lato-italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/flatui/fonts/lato/lato-italic.ttf -------------------------------------------------------------------------------- /src/main/resources/static/flatui/fonts/lato/lato-italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/flatui/fonts/lato/lato-italic.woff -------------------------------------------------------------------------------- /src/main/resources/static/flatui/fonts/lato/lato-light.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/flatui/fonts/lato/lato-light.eot -------------------------------------------------------------------------------- /src/main/resources/static/flatui/fonts/lato/lato-light.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/flatui/fonts/lato/lato-light.ttf -------------------------------------------------------------------------------- /src/main/resources/static/flatui/fonts/lato/lato-light.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/flatui/fonts/lato/lato-light.woff -------------------------------------------------------------------------------- /src/main/resources/static/flatui/fonts/lato/lato-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/flatui/fonts/lato/lato-regular.eot -------------------------------------------------------------------------------- /src/main/resources/static/flatui/fonts/lato/lato-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/flatui/fonts/lato/lato-regular.ttf -------------------------------------------------------------------------------- /src/main/resources/static/flatui/fonts/lato/lato-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/flatui/fonts/lato/lato-regular.woff -------------------------------------------------------------------------------- /src/main/resources/static/flatui/img/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/flatui/img/favicon.ico -------------------------------------------------------------------------------- /src/main/resources/static/flatui/img/icons/png/Book.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/flatui/img/icons/png/Book.png -------------------------------------------------------------------------------- /src/main/resources/static/flatui/img/icons/png/Calendar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/flatui/img/icons/png/Calendar.png -------------------------------------------------------------------------------- /src/main/resources/static/flatui/img/icons/png/Chat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/flatui/img/icons/png/Chat.png -------------------------------------------------------------------------------- /src/main/resources/static/flatui/img/icons/png/Clipboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/flatui/img/icons/png/Clipboard.png -------------------------------------------------------------------------------- /src/main/resources/static/flatui/img/icons/png/Compas.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/flatui/img/icons/png/Compas.png -------------------------------------------------------------------------------- /src/main/resources/static/flatui/img/icons/png/Gift-Box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/flatui/img/icons/png/Gift-Box.png -------------------------------------------------------------------------------- /src/main/resources/static/flatui/img/icons/png/Infinity-Loop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/flatui/img/icons/png/Infinity-Loop.png -------------------------------------------------------------------------------- /src/main/resources/static/flatui/img/icons/png/Mail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/flatui/img/icons/png/Mail.png -------------------------------------------------------------------------------- /src/main/resources/static/flatui/img/icons/png/Map.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/flatui/img/icons/png/Map.png -------------------------------------------------------------------------------- /src/main/resources/static/flatui/img/icons/png/Pensils.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/flatui/img/icons/png/Pensils.png -------------------------------------------------------------------------------- /src/main/resources/static/flatui/img/icons/png/Pocket.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/flatui/img/icons/png/Pocket.png -------------------------------------------------------------------------------- /src/main/resources/static/flatui/img/icons/png/Retina-Ready.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/flatui/img/icons/png/Retina-Ready.png -------------------------------------------------------------------------------- /src/main/resources/static/flatui/img/icons/png/Toilet-Paper.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/flatui/img/icons/png/Toilet-Paper.png -------------------------------------------------------------------------------- /src/main/resources/static/flatui/img/icons/png/Watches.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/flatui/img/icons/png/Watches.png -------------------------------------------------------------------------------- /src/main/resources/static/flatui/img/icons/svg/book.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/main/resources/static/flatui/img/icons/svg/calendar.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/main/resources/static/flatui/img/icons/svg/chat.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/main/resources/static/flatui/img/icons/svg/clipboard.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/main/resources/static/flatui/img/icons/svg/clocks.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/main/resources/static/flatui/img/icons/svg/compas.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/main/resources/static/flatui/img/icons/svg/loop.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /src/main/resources/static/flatui/img/icons/svg/mail.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/main/resources/static/flatui/img/icons/svg/map.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/main/resources/static/flatui/img/icons/svg/paper-bag.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/main/resources/static/flatui/img/icons/svg/pencils.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/main/resources/static/flatui/img/icons/svg/retina.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/main/resources/static/flatui/img/icons/svg/ribbon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | POPULAR 9 | 10 | 14 | 21 | 25 | 29 | 30 | 33 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /src/main/resources/static/flatui/img/icons/svg/toilet-paper.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/main/resources/static/flatui/img/login/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/flatui/img/login/icon.png -------------------------------------------------------------------------------- /src/main/resources/static/flatui/img/login/imac-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/flatui/img/login/imac-2x.png -------------------------------------------------------------------------------- /src/main/resources/static/flatui/img/login/imac.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/flatui/img/login/imac.png -------------------------------------------------------------------------------- /src/main/resources/static/flatui/img/tile/ribbon-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/flatui/img/tile/ribbon-2x.png -------------------------------------------------------------------------------- /src/main/resources/static/flatui/img/tile/ribbon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/flatui/img/tile/ribbon.png -------------------------------------------------------------------------------- /src/main/resources/static/flatui/js/vendor/video-js.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/flatui/js/vendor/video-js.swf -------------------------------------------------------------------------------- /src/main/resources/static/layui/css/modules/code.css: -------------------------------------------------------------------------------- 1 | /** layui-v2.2.5 MIT License By https://www.layui.com */ 2 | html #layuicss-skincodecss{display:none;position:absolute;width:1989px}.layui-code-h3,.layui-code-view{position:relative;font-size:12px}.layui-code-view{display:block;margin:10px 0;padding:0;border:1px solid #e2e2e2;border-left-width:6px;background-color:#F2F2F2;color:#333;font-family:Courier New}.layui-code-h3{padding:0 10px;height:32px;line-height:32px;border-bottom:1px solid #e2e2e2}.layui-code-h3 a{position:absolute;right:10px;top:0;color:#999}.layui-code-view .layui-code-ol{position:relative;overflow:auto}.layui-code-view .layui-code-ol li{position:relative;margin-left:45px;line-height:20px;padding:0 5px;border-left:1px solid #e2e2e2;list-style-type:decimal-leading-zero;*list-style-type:decimal;background-color:#fff}.layui-code-view pre{margin:0}.layui-code-notepad{border:1px solid #0C0C0C;border-left-color:#3F3F3F;background-color:#0C0C0C;color:#C2BE9E}.layui-code-notepad .layui-code-h3{border-bottom:none}.layui-code-notepad .layui-code-ol li{background-color:#3F3F3F;border-left:none} -------------------------------------------------------------------------------- /src/main/resources/static/layui/css/modules/layer/default/icon-ext.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/layui/css/modules/layer/default/icon-ext.png -------------------------------------------------------------------------------- /src/main/resources/static/layui/css/modules/layer/default/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/layui/css/modules/layer/default/icon.png -------------------------------------------------------------------------------- /src/main/resources/static/layui/css/modules/layer/default/loading-0.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/layui/css/modules/layer/default/loading-0.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/css/modules/layer/default/loading-1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/layui/css/modules/layer/default/loading-1.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/css/modules/layer/default/loading-2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/layui/css/modules/layer/default/loading-2.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/font/iconfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/layui/font/iconfont.eot -------------------------------------------------------------------------------- /src/main/resources/static/layui/font/iconfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/layui/font/iconfont.ttf -------------------------------------------------------------------------------- /src/main/resources/static/layui/font/iconfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/layui/font/iconfont.woff -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/0.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/layui/images/face/0.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/layui/images/face/1.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/10.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/layui/images/face/10.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/11.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/layui/images/face/11.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/12.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/layui/images/face/12.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/13.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/layui/images/face/13.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/14.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/layui/images/face/14.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/15.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/layui/images/face/15.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/16.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/layui/images/face/16.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/17.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/layui/images/face/17.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/18.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/layui/images/face/18.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/19.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/layui/images/face/19.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/layui/images/face/2.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/20.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/layui/images/face/20.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/21.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/layui/images/face/21.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/22.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/layui/images/face/22.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/23.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/layui/images/face/23.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/24.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/layui/images/face/24.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/25.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/layui/images/face/25.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/26.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/layui/images/face/26.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/27.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/layui/images/face/27.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/28.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/layui/images/face/28.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/29.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/layui/images/face/29.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/3.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/layui/images/face/3.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/30.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/layui/images/face/30.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/31.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/layui/images/face/31.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/32.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/layui/images/face/32.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/33.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/layui/images/face/33.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/34.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/layui/images/face/34.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/35.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/layui/images/face/35.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/36.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/layui/images/face/36.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/37.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/layui/images/face/37.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/38.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/layui/images/face/38.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/39.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/layui/images/face/39.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/4.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/layui/images/face/4.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/40.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/layui/images/face/40.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/41.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/layui/images/face/41.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/42.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/layui/images/face/42.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/43.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/layui/images/face/43.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/44.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/layui/images/face/44.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/45.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/layui/images/face/45.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/46.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/layui/images/face/46.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/47.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/layui/images/face/47.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/48.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/layui/images/face/48.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/49.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/layui/images/face/49.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/5.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/layui/images/face/5.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/50.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/layui/images/face/50.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/51.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/layui/images/face/51.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/52.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/layui/images/face/52.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/53.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/layui/images/face/53.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/54.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/layui/images/face/54.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/55.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/layui/images/face/55.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/56.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/layui/images/face/56.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/57.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/layui/images/face/57.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/58.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/layui/images/face/58.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/59.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/layui/images/face/59.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/6.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/layui/images/face/6.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/60.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/layui/images/face/60.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/61.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/layui/images/face/61.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/62.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/layui/images/face/62.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/63.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/layui/images/face/63.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/64.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/layui/images/face/64.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/65.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/layui/images/face/65.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/66.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/layui/images/face/66.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/67.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/layui/images/face/67.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/68.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/layui/images/face/68.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/69.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/layui/images/face/69.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/7.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/layui/images/face/7.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/70.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/layui/images/face/70.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/71.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/layui/images/face/71.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/8.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/layui/images/face/8.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/images/face/9.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wymessi/prs/9c5d49f57cbdbfe600cf74c133bdb7159c8e1503/src/main/resources/static/layui/images/face/9.gif -------------------------------------------------------------------------------- /src/main/resources/static/layui/lay/modules/carousel.js: -------------------------------------------------------------------------------- 1 | /** layui-v2.2.5 MIT License By https://www.layui.com */ 2 | ;layui.define("jquery",function(e){"use strict";var i=layui.$,n=(layui.hint(),layui.device(),{config:{},set:function(e){var n=this;return n.config=i.extend({},n.config,e),n},on:function(e,i){return layui.onevent.call(this,t,e,i)}}),t="carousel",a="layui-this",l=">*[carousel-item]>*",o="layui-carousel-left",r="layui-carousel-right",d="layui-carousel-prev",s="layui-carousel-next",u="layui-carousel-arrow",c="layui-carousel-ind",m=function(e){var t=this;t.config=i.extend({},t.config,n.config,e),t.render()};m.prototype.config={width:"600px",height:"280px",full:!1,arrow:"hover",indicator:"inside",autoplay:!0,interval:3e3,anim:"",trigger:"click",index:0},m.prototype.render=function(){var e=this,n=e.config;n.elem=i(n.elem),n.elem[0]&&(e.elemItem=n.elem.find(l),n.index<0&&(n.index=0),n.index>=e.elemItem.length&&(n.index=e.elemItem.length-1),n.interval<800&&(n.interval=800),n.full?n.elem.css({position:"fixed",width:"100%",height:"100%",zIndex:9999}):n.elem.css({width:n.width,height:n.height}),n.elem.attr("lay-anim",n.anim),e.elemItem.eq(n.index).addClass(a),e.elemItem.length<=1||(e.indicator(),e.arrow(),e.autoplay(),e.events()))},m.prototype.reload=function(e){var n=this;clearInterval(n.timer),n.config=i.extend({},n.config,e),n.render()},m.prototype.prevIndex=function(){var e=this,i=e.config,n=i.index-1;return n<0&&(n=e.elemItem.length-1),n},m.prototype.nextIndex=function(){var e=this,i=e.config,n=i.index+1;return n>=e.elemItem.length&&(n=0),n},m.prototype.addIndex=function(e){var i=this,n=i.config;e=e||1,n.index=n.index+e,n.index>=i.elemItem.length&&(n.index=0)},m.prototype.subIndex=function(e){var i=this,n=i.config;e=e||1,n.index=n.index-e,n.index<0&&(n.index=i.elemItem.length-1)},m.prototype.autoplay=function(){var e=this,i=e.config;i.autoplay&&(e.timer=setInterval(function(){e.slide()},i.interval))},m.prototype.arrow=function(){var e=this,n=e.config,t=i(['",'"].join(""));n.elem.attr("lay-arrow",n.arrow),n.elem.find("."+u)[0]&&n.elem.find("."+u).remove(),n.elem.append(t),t.on("click",function(){var n=i(this),t=n.attr("lay-type");e.slide(t)})},m.prototype.indicator=function(){var e=this,n=e.config,t=e.elemInd=i(['
    ',function(){var i=[];return layui.each(e.elemItem,function(e){i.push("")}),i.join("")}(),"
"].join(""));n.elem.attr("lay-indicator",n.indicator),n.elem.find("."+c)[0]&&n.elem.find("."+c).remove(),n.elem.append(t),"updown"===n.anim&&t.css("margin-top",-(t.height()/2)),t.find("li").on("hover"===n.trigger?"mouseover":n.trigger,function(){var t=i(this),a=t.index();a>n.index?e.slide("add",a-n.index):a/g,">").replace(/'/g,"'").replace(/"/g,""")),c.html('
  1. '+o.replace(/[\r\t\n]+/g,"
  2. ")+"
"),c.find(">.layui-code-h3")[0]||c.prepend('

'+(c.attr("lay-title")||e.title||"code")+(e.about?'layui.code':"")+"

");var d=c.find(">.layui-code-ol");c.addClass("layui-box layui-code-view"),(c.attr("lay-skin")||e.skin)&&c.addClass("layui-code-"+(c.attr("lay-skin")||e.skin)),(d.find("li").length/100|0)>0&&d.css("margin-left",(d.find("li").length/100|0)+"px"),(c.attr("lay-height")||e.height)&&d.css("max-height",c.attr("lay-height")||e.height)})})}).addcss("modules/code.css","skincodecss"); -------------------------------------------------------------------------------- /src/main/resources/static/layui/lay/modules/flow.js: -------------------------------------------------------------------------------- 1 | /** layui-v2.2.5 MIT License By https://www.layui.com */ 2 | ;layui.define("jquery",function(e){"use strict";var l=layui.$,o=function(e){},t='';o.prototype.load=function(e){var o,i,n,r,a=this,c=0;e=e||{};var f=l(e.elem);if(f[0]){var m=l(e.scrollElem||document),u=e.mb||50,s=!("isAuto"in e)||e.isAuto,v=e.end||"没有更多了",y=e.scrollElem&&e.scrollElem!==document,d="加载更多",h=l('");f.find(".layui-flow-more")[0]||f.append(h);var p=function(e,t){e=l(e),h.before(e),t=0==t||null,t?h.html(v):h.find("a").html(d),i=t,o=null,n&&n()},g=function(){o=!0,h.find("a").html(t),"function"==typeof e.done&&e.done(++c,p)};if(g(),h.find("a").on("click",function(){l(this);i||o||g()}),e.isLazyimg)var n=a.lazyimg({elem:e.elem+" img",scrollElem:e.scrollElem});return s?(m.on("scroll",function(){var e=l(this),t=e.scrollTop();r&&clearTimeout(r),i||(r=setTimeout(function(){var i=y?e.height():l(window).height(),n=y?e.prop("scrollHeight"):document.documentElement.scrollHeight;n-t-i<=u&&(o||g())},100))}),a):a}},o.prototype.lazyimg=function(e){var o,t=this,i=0;e=e||{};var n=l(e.scrollElem||document),r=e.elem||"img",a=e.scrollElem&&e.scrollElem!==document,c=function(e,l){var o=n.scrollTop(),r=o+l,c=a?function(){return e.offset().top-n.offset().top+o}():e.offset().top;if(c>=o&&c<=r&&!e.attr("src")){var m=e.attr("lay-src");layui.img(m,function(){var l=t.lazyimg.elem.eq(i);e.attr("src",m).removeAttr("lay-src"),l[0]&&f(l),i++})}},f=function(e,o){var f=a?(o||n).height():l(window).height(),m=n.scrollTop(),u=m+f;if(t.lazyimg.elem=l(r),e)c(e,f);else for(var s=0;su)break}};if(f(),!o){var m;n.on("scroll",function(){var e=l(this);m&&clearTimeout(m),m=setTimeout(function(){f(null,e)},50)}),o=!0}return f},e("flow",new o)}); -------------------------------------------------------------------------------- /src/main/resources/static/layui/lay/modules/laypage.js: -------------------------------------------------------------------------------- 1 | /** layui-v2.2.5 MIT License By https://www.layui.com */ 2 | ;layui.define(function(e){"use strict";var a=document,t="getElementById",n="getElementsByTagName",i="laypage",r="layui-disabled",u=function(e){var a=this;a.config=e||{},a.config.index=++s.index,a.render(!0)};u.prototype.type=function(){var e=this.config;if("object"==typeof e.elem)return void 0===e.elem.length?2:3},u.prototype.view=function(){var e=this,a=e.config,t=a.groups="groups"in a?0|a.groups:5;a.layout="object"==typeof a.layout?a.layout:["prev","page","next"],a.count=0|a.count,a.curr=0|a.curr||1,a.limits="object"==typeof a.limits?a.limits:[10,20,30,40,50],a.limit=0|a.limit||10,a.pages=Math.ceil(a.count/a.limit)||1,a.curr>a.pages&&(a.curr=a.pages),t<0?t=1:t>a.pages&&(t=a.pages),a.prev="prev"in a?a.prev:"上一页",a.next="next"in a?a.next:"下一页";var n=a.pages>t?Math.ceil((a.curr+(t>1?1:0))/(t>0?t:1)):1,i={prev:function(){return a.prev?''+a.prev+"":""}(),page:function(){var e=[];if(a.count<1)return"";n>1&&a.first!==!1&&0!==t&&e.push(''+(a.first||1)+"");var i=Math.floor((t-1)/2),r=n>1?a.curr-i:1,u=n>1?function(){var e=a.curr+(t-i-1);return e>a.pages?a.pages:e}():t;for(u-r2&&e.push('');r<=u;r++)r===a.curr?e.push('"+r+""):e.push(''+r+"");return a.pages>t&&a.pages>u&&a.last!==!1&&(u+1…'),0!==t&&e.push(''+(a.last||a.pages)+"")),e.join("")}(),next:function(){return a.next?''+a.next+"":""}(),count:'共 '+a.count+" 条",limit:function(){var e=['"}(),skip:function(){return['到第','','页',""].join("")}()};return['
',function(){var e=[];return layui.each(a.layout,function(a,t){i[t]&&e.push(i[t])}),e.join("")}(),"
"].join("")},u.prototype.jump=function(e,a){if(e){var t=this,i=t.config,r=e.children,u=e[n]("button")[0],l=e[n]("input")[0],p=e[n]("select")[0],c=function(){var e=0|l.value.replace(/\s|\D/g,"");e&&(i.curr=e,t.render())};if(a)return c();for(var o=0,y=r.length;oi.pages||(i.curr=e,t.render())});p&&s.on(p,"change",function(){var e=this.value;i.curr*e>i.count&&(i.curr=Math.ceil(i.count/e)),i.limit=e,t.render()}),u&&s.on(u,"click",function(){c()})}},u.prototype.skip=function(e){if(e){var a=this,t=e[n]("input")[0];t&&s.on(t,"keyup",function(t){var n=this.value,i=t.keyCode;/^(37|38|39|40)$/.test(i)||(/\D/.test(n)&&(this.value=n.replace(/\D/,"")),13===i&&a.jump(e,!0))})}},u.prototype.render=function(e){var n=this,i=n.config,r=n.type(),u=n.view();2===r?i.elem&&(i.elem.innerHTML=u):3===r?i.elem.html(u):a[t](i.elem)&&(a[t](i.elem).innerHTML=u),i.jump&&i.jump(i,e);var s=a[t]("layui-laypage-"+i.index);n.jump(s),i.hash&&!e&&(location.hash="!"+i.hash+"="+i.curr),n.skip(s)};var s={render:function(e){var a=new u(e);return a.index},index:layui.laypage?layui.laypage.index+1e4:0,on:function(e,a,t){return e.attachEvent?e.attachEvent("on"+a,function(a){a.target=a.srcElement,t.call(e,a)}):e.addEventListener(a,t,!1),this}};e(i,s)}); -------------------------------------------------------------------------------- /src/main/resources/static/layui/lay/modules/laytpl.js: -------------------------------------------------------------------------------- 1 | /** layui-v2.2.5 MIT License By https://www.layui.com */ 2 | ;layui.define(function(e){"use strict";var r={open:"{{",close:"}}"},c={exp:function(e){return new RegExp(e,"g")},query:function(e,c,t){var o=["#([\\s\\S])+?","([^{#}])*?"][e||0];return n((c||"")+r.open+o+r.close+(t||""))},escape:function(e){return String(e||"").replace(/&(?!#?[a-zA-Z0-9]+;)/g,"&").replace(//g,">").replace(/'/g,"'").replace(/"/g,""")},error:function(e,r){var c="Laytpl Error:";return"object"==typeof console&&console.error(c+e+"\n"+(r||"")),c+e}},n=c.exp,t=function(e){this.tpl=e};t.pt=t.prototype,window.errors=0,t.pt.parse=function(e,t){var o=this,p=e,a=n("^"+r.open+"#",""),l=n(r.close+"$","");e=e.replace(/\s+|\r|\t|\n/g," ").replace(n(r.open+"#"),r.open+"# ").replace(n(r.close+"}"),"} "+r.close).replace(/\\/g,"\\\\").replace(n(r.open+"!(.+?)!"+r.close),function(e){return e=e.replace(n("^"+r.open+"!"),"").replace(n("!"+r.close),"").replace(n(r.open+"|"+r.close),function(e){return e.replace(/(.)/g,"\\$1")})}).replace(/(?="|')/g,"\\").replace(c.query(),function(e){return e=e.replace(a,"").replace(l,""),'";'+e.replace(/\\/g,"")+';view+="'}).replace(c.query(1),function(e){var c='"+(';return e.replace(/\s/g,"")===r.open+r.close?"":(e=e.replace(n(r.open+"|"+r.close),""),/^=/.test(e)&&(e=e.replace(/^=/,""),c='"+_escape_('),c+e.replace(/\\/g,"")+')+"')}),e='"use strict";var view = "'+e+'";return view;';try{return o.cache=e=new Function("d, _escape_",e),e(t,c.escape)}catch(u){return delete o.cache,c.error(u,p)}},t.pt.render=function(e,r){var n,t=this;return e?(n=t.cache?t.cache(e,c.escape):t.parse(t.tpl,e),r?void r(n):n):c.error("no data")};var o=function(e){return"string"!=typeof e?c.error("Template not found"):new t(e)};o.config=function(e){e=e||{};for(var c in e)r[c]=e[c]},o.v="1.2.0",e("laytpl",o)}); -------------------------------------------------------------------------------- /src/main/resources/static/layui/lay/modules/tree.js: -------------------------------------------------------------------------------- 1 | /** layui-v2.2.5 MIT License By https://www.layui.com */ 2 | ;layui.define("jquery",function(e){"use strict";var o=layui.$,a=layui.hint(),i="layui-tree-enter",r=function(e){this.options=e},t={arrow:["",""],checkbox:["",""],radio:["",""],branch:["",""],leaf:""};r.prototype.init=function(e){var o=this;e.addClass("layui-box layui-tree"),o.options.skin&&e.addClass("layui-tree-skin-"+o.options.skin),o.tree(e),o.on(e)},r.prototype.tree=function(e,a){var i=this,r=i.options,n=a||r.nodes;layui.each(n,function(a,n){var l=n.children&&n.children.length>0,c=o('
    '),s=o(["
  • ",function(){return l?''+(n.spread?t.arrow[1]:t.arrow[0])+"":""}(),function(){return r.check?''+("checkbox"===r.check?t.checkbox[0]:"radio"===r.check?t.radio[0]:"")+"":""}(),function(){return'"+(''+(l?n.spread?t.branch[1]:t.branch[0]:t.leaf)+"")+(""+(n.name||"未命名")+"")}(),"
  • "].join(""));l&&(s.append(c),i.tree(c,n.children)),e.append(s),"function"==typeof r.click&&i.click(s,n),i.spread(s,n),r.drag&&i.drag(s,n)})},r.prototype.click=function(e,o){var a=this,i=a.options;e.children("a").on("click",function(e){layui.stope(e),i.click(o)})},r.prototype.spread=function(e,o){var a=this,i=(a.options,e.children(".layui-tree-spread")),r=e.children("ul"),n=e.children("a"),l=function(){e.data("spread")?(e.data("spread",null),r.removeClass("layui-show"),i.html(t.arrow[0]),n.find(".layui-icon").html(t.branch[0])):(e.data("spread",!0),r.addClass("layui-show"),i.html(t.arrow[1]),n.find(".layui-icon").html(t.branch[1]))};r[0]&&(i.on("click",l),n.on("dblclick",l))},r.prototype.on=function(e){var a=this,r=a.options,t="layui-tree-drag";e.find("i").on("selectstart",function(e){return!1}),r.drag&&o(document).on("mousemove",function(e){var i=a.move;if(i.from){var r=(i.to,o('
    '));e.preventDefault(),o("."+t)[0]||o("body").append(r);var n=o("."+t)[0]?o("."+t):r;n.addClass("layui-show").html(i.from.elem.children("a").html()),n.css({left:e.pageX+10,top:e.pageY+10})}}).on("mouseup",function(){var e=a.move;e.from&&(e.from.elem.children("a").removeClass(i),e.to&&e.to.elem.children("a").removeClass(i),a.move={},o("."+t).remove())})},r.prototype.move={},r.prototype.drag=function(e,a){var r=this,t=(r.options,e.children("a")),n=function(){var t=o(this),n=r.move;n.from&&(n.to={item:a,elem:e},t.addClass(i))};t.on("mousedown",function(){var o=r.move;o.from={item:a,elem:e}}),t.on("mouseenter",n).on("mousemove",n).on("mouseleave",function(){var e=o(this),a=r.move;a.from&&(delete a.to,e.removeClass(i))})},e("tree",function(e){var i=new r(e=e||{}),t=o(e.elem);return t[0]?void i.init(t):a.error("layui.tree 没有找到"+e.elem+"元素")})}); -------------------------------------------------------------------------------- /src/main/resources/static/layui/lay/modules/util.js: -------------------------------------------------------------------------------- 1 | /** layui-v2.2.5 MIT License By https://www.layui.com */ 2 | ;layui.define("jquery",function(e){"use strict";var t=layui.$,i={fixbar:function(e){var i,o,a="layui-fixbar",r="layui-fixbar-top",n=t(document),l=t("body");e=t.extend({showHeight:200},e),e.bar1=e.bar1===!0?"":e.bar1,e.bar2=e.bar2===!0?"":e.bar2,e.bgcolor=e.bgcolor?"background-color:"+e.bgcolor:"";var c=[e.bar1,e.bar2,""],g=t(['
      ',e.bar1?'
    • '+c[0]+"
    • ":"",e.bar2?'
    • '+c[1]+"
    • ":"",'
    • '+c[2]+"
    • ","
    "].join("")),s=g.find("."+r),u=function(){var t=n.scrollTop();t>=e.showHeight?i||(s.show(),i=1):i&&(s.hide(),i=0)};t("."+a)[0]||("object"==typeof e.css&&g.css(e.css),l.append(g),u(),g.find("li").on("click",function(){var i=t(this),o=i.attr("lay-type");"top"===o&&t("html,body").animate({scrollTop:0},200),e.click&&e.click.call(this,o)}),n.on("scroll",function(){clearTimeout(o),o=setTimeout(function(){u()},100)}))},countdown:function(e,t,i){var o=this,a="function"==typeof t,r=new Date(e).getTime(),n=new Date(!t||a?(new Date).getTime():t).getTime(),l=r-n,c=[Math.floor(l/864e5),Math.floor(l/36e5)%24,Math.floor(l/6e4)%60,Math.floor(l/1e3)%60];a&&(i=t);var g=setTimeout(function(){o.countdown(e,n+1e3,i)},1e3);return i&&i(l>0?c:[0,0,0,0],t,g),l<=0&&clearTimeout(g),g},timeAgo:function(e,t){var i=this,o=[[],[]],a=(new Date).getTime()-new Date(e).getTime();return a>6912e5?(a=new Date(e),o[0][0]=i.digit(a.getFullYear(),4),o[0][1]=i.digit(a.getMonth()+1),o[0][2]=i.digit(a.getDate()),t||(o[1][0]=i.digit(a.getHours()),o[1][1]=i.digit(a.getMinutes()),o[1][2]=i.digit(a.getSeconds())),o[0].join("-")+" "+o[1].join(":")):a>=864e5?(a/1e3/60/60/24|0)+"天前":a>=36e5?(a/1e3/60/60|0)+"小时前":a>=12e4?(a/1e3/60|0)+"分钟前":a<0?"未来":"刚刚"},digit:function(e,t){var i="";e=String(e),t=t||2;for(var o=e.length;o 2 | 3 | 4 | 5 | 7 | PRS-评审打分页面 8 | 10 | 12 | 26 | 27 | 28 |
    29 |
    30 | 31 | 32 |
    33 |
    34 |
    35 |
    36 |
    37 |
    38 |
    39 | 40 |
    41 | 43 | 46 |
    47 |
    48 |
    49 | 50 |
    51 | 52 |
    53 |
    54 |
    55 |
    56 | 57 |
    58 |
    59 | 60 | 61 | 62 | 63 |
    64 |
    65 |
    66 |
    67 |
    68 | 72 |
    73 | 74 | 95 | 96 | -------------------------------------------------------------------------------- /src/main/resources/templates/login.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 7 | PRS-登录 8 | 10 | 12 | 13 | 14 |
    15 |
    16 | 17 | 18 |
    19 |
    20 |
    21 |

    22 | PRS-科研项目评审系统 23 |

    24 |
    25 |
    26 |
    27 | 65 |
    66 |
    67 |
    68 | 72 |
    73 | 74 | 106 | 107 | -------------------------------------------------------------------------------- /src/main/resources/templates/message.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 7 | PRS-全局消息 8 | 10 | 11 | 12 | 13 | 14 | 34 | 35 | -------------------------------------------------------------------------------- /src/main/resources/templates/system/fieldManage/addField.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 7 | PRS-添加领域 8 | 10 | 12 | 23 | 24 | 25 |
    26 |
    27 | 28 | 29 |
    30 |
    31 |
    32 |
    33 |
    34 |
    35 | 36 |
    37 | 38 |
    39 | 42 | 43 |
    44 |
    45 | 46 |
    47 |
    48 | 49 |
    50 |
    51 |
    52 |
    53 |
    54 |
    55 |
    56 | 60 |
    61 | 62 | 76 | 77 | -------------------------------------------------------------------------------- /src/main/resources/templates/system/groupManage/addGroup.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 7 | PRS-添加分组 8 | 10 | 12 | 23 | 24 | 25 |
    26 |
    27 | 28 | 29 |
    30 |
    31 |
    32 |
    33 |
    34 |
    35 | 36 |
    37 | 38 |
    39 | 42 | 43 |
    44 |
    45 | 46 |
    47 |
    48 | 49 |
    50 |
    51 |
    52 |
    53 |
    54 |
    55 |
    56 | 60 |
    61 | 62 | 76 | 77 | --------------------------------------------------------------------------------