diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..bd8efca --- /dev/null +++ b/pom.xml @@ -0,0 +1,211 @@ + + + + org.springframework.boot + spring-boot-starter-parent + 2.1.6.RELEASE + + 4.0.0 + + EnrollStudent_independent + + + + org.apache.httpcomponents + httpclient + 4.3 + + + org.apache.httpcomponents + httpmime + 4.5.3 + + + org.thymeleaf + thymeleaf + 3.0.9.RELEASE + + + org.thymeleaf + thymeleaf-spring4 + 3.0.9.RELEASE + + + org.springframework.boot + spring-boot-starter-thymeleaf + + + org.mybatis.generator + mybatis-generator-core + 1.3.5 + + + org.apache.poi + poi + 4.1.0 + + + org.apache.poi + poi-ooxml + 4.1.0 + + + org.slf4j + slf4j-api + 1.7.13 + + + com.github.pagehelper + pagehelper-spring-boot-starter + 1.2.12 + + + com.alibaba + fastjson + 1.2.16 + + + com.nimbusds + nimbus-jose-jwt + 6.0 + + + org.springframework.boot + spring-boot-starter-test + test + + + org.apache.commons + commons-lang3 + 3.3.2 + + + org.mybatis.spring.boot + mybatis-spring-boot-starter + 1.3.0 + + + com.microsoft.sqlserver + mssql-jdbc + 6.4.0.jre8 + + + org.springframework.boot + spring-boot-starter-web + + + org.apache.commons + commons-lang3 + 3.3.2 + + + io.springfox + springfox-swagger2 + 2.6.1 + + + io.springfox + springfox-swagger-ui + 2.6.1 + + + + + + student + + + + + + org.mybatis.generator + mybatis-generator-maven-plugin + 1.3.5 + + true + true + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.1 + + 1.8 + 1.8 + UTF-8 + + + + + + org.apache.maven.plugins + maven-jar-plugin + + + + com.sincere.student.StudentApplication + true + lib/ + + + ./config/ + + + + config/** + + + + + + + org.apache.maven.plugins + maven-dependency-plugin + + + copy + package + + copy-dependencies + + + + ${project.build.directory}/lib + + + + + + + + org.apache.maven.plugins + maven-resources-plugin + 2.5 + + UTF-8 + + + + + maven-source-plugin + 2.2 + + true + + + + compile + + jar + + + + + + + \ No newline at end of file diff --git a/src/main/java/com/sincere/student/StudentApplication.java b/src/main/java/com/sincere/student/StudentApplication.java new file mode 100644 index 0000000..ca4e9da --- /dev/null +++ b/src/main/java/com/sincere/student/StudentApplication.java @@ -0,0 +1,16 @@ +package com.sincere.student; + +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cache.annotation.EnableCaching; + +@EnableCaching +@SpringBootApplication +@MapperScan("com.sincere.student.mapper") +public class StudentApplication { + + public static void main(String[] args) { + SpringApplication.run(StudentApplication.class, args); + } +} diff --git a/src/main/java/com/sincere/student/Swagger2.java b/src/main/java/com/sincere/student/Swagger2.java new file mode 100644 index 0000000..971f00d --- /dev/null +++ b/src/main/java/com/sincere/student/Swagger2.java @@ -0,0 +1,51 @@ +package com.sincere.student; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import springfox.documentation.builders.ApiInfoBuilder; +import springfox.documentation.builders.ParameterBuilder; +import springfox.documentation.builders.PathSelectors; +import springfox.documentation.builders.RequestHandlerSelectors; +import springfox.documentation.schema.ModelRef; +import springfox.documentation.service.ApiInfo; +import springfox.documentation.service.Parameter; +import springfox.documentation.spi.DocumentationType; +import springfox.documentation.spring.web.plugins.Docket; +import springfox.documentation.swagger2.annotations.EnableSwagger2; + +import java.util.ArrayList; +import java.util.List; + +@EnableSwagger2 +@Configuration //让Spring来加载该类配置 +public class Swagger2 { + + @Bean + public Docket createRestApi() { + ParameterBuilder ticketPar = new ParameterBuilder(); + List pars = new ArrayList(); + ticketPar.name("X-Authorization").description("user token") + .modelRef(new ModelRef("string")).parameterType("header") + .required(false).build(); //header中的ticket参数非必填,传空也可以 + pars.add(ticketPar.build()); + + + return new Docket(DocumentationType.SWAGGER_2) + .apiInfo(apiInfo()) + .enableUrlTemplating(true) + .select() + // 扫描所有有注解的api,用这种方式更灵活 + .apis(RequestHandlerSelectors.basePackage("com.sincere.student.controller")) + .paths(PathSelectors.any()) + .build().globalOperationParameters(pars); + + } + private ApiInfo apiInfo() { + return new ApiInfoBuilder() + .title("Spring Boot中使用Swagger2构建RESTful APIs") + .description("接口文档") + .termsOfServiceUrl("") + .version("1.0") + .build(); + } +} diff --git a/src/main/java/com/sincere/student/access/MemberAccess.java b/src/main/java/com/sincere/student/access/MemberAccess.java new file mode 100644 index 0000000..ff81227 --- /dev/null +++ b/src/main/java/com/sincere/student/access/MemberAccess.java @@ -0,0 +1,12 @@ +package com.sincere.student.access; + +import java.lang.annotation.*; +/** + * 方法上有这个注解就表示需要登录 + */ +@Documented +@Retention(RetentionPolicy.RUNTIME)// +@Target({ElementType.METHOD, ElementType.TYPE})//该注解修饰类中的方法 +@Inherited +public @interface MemberAccess { +} diff --git a/src/main/java/com/sincere/student/access/MemberInterceptor.java b/src/main/java/com/sincere/student/access/MemberInterceptor.java new file mode 100644 index 0000000..ef06d42 --- /dev/null +++ b/src/main/java/com/sincere/student/access/MemberInterceptor.java @@ -0,0 +1,62 @@ +package com.sincere.student.access; + +import com.alibaba.fastjson.JSON; +import com.sincere.student.dto.BaseDto; +import com.sincere.student.utils.ResultException; +import com.sincere.student.utils.TokenUtils; +import org.springframework.web.method.HandlerMethod; +import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.OutputStream; +import java.lang.annotation.Annotation; +import java.lang.reflect.Method; + + +public class MemberInterceptor extends HandlerInterceptorAdapter { + + @Override + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { + if (handler instanceof HandlerMethod) { + + HandlerMethod myHandlerMethod = (HandlerMethod) handler; + Method method= myHandlerMethod.getMethod(); + Annotation methodAnnotation=method.getAnnotation(MemberAccess.class);//方法上有该标记 + if(methodAnnotation != null){ + boolean isLogin = isLogin(request) ; + if(isLogin){ + return true; + }else{//未登录 + //Ajax请求返回JSON + BaseDto repVo = new BaseDto(); + repVo.setSuccess(false); + repVo.setMessage("请先登录"); + String data = JSON.toJSONString(repVo); + response.setHeader("content-type", "text/html;charset=UTF-8"); + OutputStream out = response.getOutputStream(); + out.write(data.getBytes("UTF-8")); + return false; + } + } + } + return true; + } + + private boolean isLogin(HttpServletRequest request) throws Exception{ + try { + String token = request.getHeader("X-Authorization"); + if( token != null){ + try{ + TokenUtils.validToken(token); + return true; + }catch (ResultException e){ + + } + } + }catch (Exception e){ + return false; + } + return false; + } +} diff --git a/src/main/java/com/sincere/student/access/StaticAdapter.java b/src/main/java/com/sincere/student/access/StaticAdapter.java new file mode 100644 index 0000000..5c2ba40 --- /dev/null +++ b/src/main/java/com/sincere/student/access/StaticAdapter.java @@ -0,0 +1,22 @@ +package com.sincere.student.access; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.InterceptorRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; + +@Configuration +public class StaticAdapter extends WebMvcConfigurerAdapter { + + @Bean + public MemberInterceptor getMemberInterceptor() { + return new MemberInterceptor(); + } + + //添加拦截器 + @Override + public void addInterceptors(InterceptorRegistry registry) { + registry.addInterceptor(getMemberInterceptor()); + super.addInterceptors(registry); + } +} diff --git a/src/main/java/com/sincere/student/controller/AdminController.java b/src/main/java/com/sincere/student/controller/AdminController.java new file mode 100644 index 0000000..24bfa6f --- /dev/null +++ b/src/main/java/com/sincere/student/controller/AdminController.java @@ -0,0 +1,593 @@ +package com.sincere.student.controller; + +import com.sincere.student.access.MemberAccess; +import com.sincere.student.dto.*; +import com.sincere.student.enums.AdvertEnums; +import com.sincere.student.enums.ColumnEnums; +import com.sincere.student.enums.ParameterUtils; +import com.sincere.student.model.*; +import com.sincere.student.service.*; +import com.sincere.student.utils.ExcelUtils; +import com.sincere.student.utils.Page; +import com.sincere.student.utils.ResultException; +import com.sincere.student.utils.TokenUtils; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.ArrayList; +import java.util.List; + +@RestController +@RequestMapping("admin") +public class AdminController { + + @Autowired + ColumnService columnService ; + + @Autowired + AdvertService advertService ; + + @Autowired + ArticleService articleService ; + + @Autowired + MajorService majorService ; + + @Autowired + UniversityService universityService ; + + @Autowired + ParameterService parameterService; + + @Autowired + VideoService videoService ; + + @Autowired + ConsultService consultService ; + + @Autowired + UserService userService ; + + @Autowired + MessageService messageService ; + + @Autowired + SubmitService submitService; + + /** + * 投档线 + */ + @MemberAccess + @ApiOperation("投档线列表接口") + @RequestMapping(value = "/submit/getList" , method = RequestMethod.POST) + public BaseDto> getFileList(@RequestBody MessageSearchDto messageSearchDto){ + BaseDto> result = new BaseDto<>(); + result.setData(submitService.getAdminList(messageSearchDto)); + return result ; + } + + @MemberAccess + @ApiOperation("投档线创建接口") + @RequestMapping(value = "/submit/createFile" , method = RequestMethod.POST) + public BaseDto createFile(@RequestBody SubmitFile submitFile){ + BaseDto result = new BaseDto(); + try{ + List list = ExcelUtils.analysisExcel(submitFile.getFileUrl()); + List points = new ArrayList<>(); + for(Point point : list){ + Integer universityId = universityService.selectByName(point.getUniversityName()); + if(universityId == null){ + throw new ResultException(902,point.getUniversityName()+"不存在"); + } + point.setUniversityId(universityId); + Integer majorId = universityService.selectIdByMajor(point.getMajor(),universityId); + if(majorId == null){ + throw new ResultException(902,point.getUniversityName()+"-"+point.getMajor()+"关系不存在"); + } + point.setMajorId(majorId); + points.add(point); + } + submitFile.setList(points); + submitService.create(submitFile); + }catch (ResultException e){ + result.setSuccess(false); + result.setMessage(e.getMessage()); + } + return result ; + } + + + /** + * 留言板 + */ + @MemberAccess + @ApiOperation("留言板列表接口") + @RequestMapping(value = "/message/getList" , method = RequestMethod.POST) + public BaseDto> getMessageList(@RequestBody MessageSearchDto messageSearchDto){ + BaseDto> result = new BaseDto<>(); + result.setData(messageService.getList(messageSearchDto)); + return result ; + } + + @MemberAccess + @ApiOperation("留言板详情,管理回复 接口") + @RequestMapping(value = "/message/getDetail" , method = RequestMethod.POST) + public BaseDto getMessageDetail(@RequestBody IdDto idDto){ + BaseDto result = new BaseDto<>(); + result.setData(messageService.getDetail(idDto.getId())); + return result ; + } + + @MemberAccess + @ApiOperation("回复接口") + @RequestMapping(value = "/message/reply" , method = RequestMethod.POST) + public BaseDto getMessageDetail(@RequestBody Reply reply){ + messageService.reply(reply); + return new BaseDto() ; + } + + @MemberAccess + @ApiOperation("删除某个回复 接口") + @RequestMapping(value = "/message/deleteReply" , method = RequestMethod.POST) + public BaseDto deleteReply(@RequestBody IdDto idDto){ + messageService.deleteReply(idDto.getId()); + return new BaseDto<>() ; + } + + @MemberAccess + @ApiOperation("删除留言 接口") + @RequestMapping(value = "/message/deleteMessage" , method = RequestMethod.POST) + public BaseDto deleteMessage(@RequestBody IdDto idDto){ + messageService.deleteMessage(idDto.getId()); + return new BaseDto<>() ; + } + + /** + * 登录 修改密码 + */ + @ApiOperation("登录") + @RequestMapping(value = "/login" , method = RequestMethod.POST) + public BaseDto login(@RequestBody SysUser sysUser){ + BaseDto result = new BaseDto<>() ; + SysUser user = userService.getByUser(); + if(user.getUserName().equals(sysUser.getUserName()) && user.getPassword().equals(sysUser.getPassword())){ + String token = TokenUtils.buildToken(user.getUserName()); + result.setData(token); + }else { + result.setSuccess(false); + result.setMessage("账号密码错误"); + } + return result ; + } + + @MemberAccess + @ApiOperation("修改密码") + @RequestMapping(value = "/updatePassword" , method = RequestMethod.POST) + public BaseDto updatePassword(@RequestBody SysUser sysUser){ + BaseDto result = new BaseDto() ; + SysUser user = userService.getByUser(); + user.setPassword(sysUser.getPassword()); + userService.update(sysUser); + return result ; + } + + /** + * 招生咨询会 + */ + @MemberAccess + @ApiOperation("获取招生咨询会相关接口") + @RequestMapping(value = "/consult/getList" , method = RequestMethod.POST) + public BaseDto> getConsultList(@RequestBody ConsultSearchDto consultSearchDto){ + BaseDto> result = new BaseDto<>() ; + Page page = consultService.getList(consultSearchDto); + result.setData(page); + return result ; + } + + @MemberAccess + @ApiOperation("获取招生咨询会详情相关接口") + @RequestMapping(value = "/consult/getDetail" , method = RequestMethod.POST) + public BaseDto getConsultDetail(@RequestBody IdDto idDto){ + BaseDto result = new BaseDto<>() ; + result.setData(consultService.getDetail(idDto.getId())); + return result ; + } + + @MemberAccess + @ApiOperation("新建招生咨询会相关接口") + @RequestMapping(value = "/consult/createConsult" , method = RequestMethod.POST) + public BaseDto createConsult(@RequestBody UniversityConsult universityConsult){ + BaseDto result = new BaseDto() ; + consultService.create(universityConsult); + return result ; + } + + @MemberAccess + @ApiOperation("修改招生咨询会相关接口") + @RequestMapping(value = "/consult/updateConsult" , method = RequestMethod.POST) + public BaseDto updateConsult(@RequestBody UniversityConsult universityConsult){ + BaseDto result = new BaseDto() ; + consultService.update(universityConsult); + return result ; + } + + @MemberAccess + @ApiOperation("删除招生咨询会(传主键)") + @RequestMapping(value = "/consult/delete" , method = RequestMethod.POST) + public BaseDto deleteConsult(@RequestBody IdDto idDto){ + BaseDto result = new BaseDto() ; + consultService.delete(idDto.getId()); + return result ; + } + + /** + * 视频 + */ + @MemberAccess + @ApiOperation("获取视频相关接口") + @RequestMapping(value = "/video/getList" , method = RequestMethod.POST) + public BaseDto> getVideoList(@RequestBody VideoSearchDto videoSearchDto){ + BaseDto> result = new BaseDto<>() ; + Page