yonge 4 years ago
parent
commit
0854451465
100 changed files with 2952 additions and 0 deletions
  1. 50 0
      edu-user/edu-user-biz/java/com/keao/edu/user/UserServerApplication.java
  2. 49 0
      edu-user/edu-user-biz/java/com/keao/edu/user/config/PermissionCheckService.java
  3. 40 0
      edu-user/edu-user-biz/java/com/keao/edu/user/config/ResourceServerConfig.java
  4. 56 0
      edu-user/edu-user-biz/java/com/keao/edu/user/config/WebMvcConfig.java
  5. 14 0
      edu-user/edu-user-biz/java/com/keao/edu/user/config/WebSocketConfig.java
  6. 72 0
      edu-user/edu-user-biz/java/com/keao/edu/user/controller/AppVersionInfoController.java
  7. 85 0
      edu-user/edu-user-biz/java/com/keao/edu/user/controller/EmployeeController.java
  8. 42 0
      edu-user/edu-user-biz/java/com/keao/edu/user/controller/ExamCertificationController.java
  9. 77 0
      edu-user/edu-user-biz/java/com/keao/edu/user/controller/ExamLocationController.java
  10. 73 0
      edu-user/edu-user-biz/java/com/keao/edu/user/controller/ExamManualLedgerController.java
  11. 65 0
      edu-user/edu-user-biz/java/com/keao/edu/user/controller/ExamMusicTheoryController.java
  12. 211 0
      edu-user/edu-user-biz/java/com/keao/edu/user/controller/ExamOrderController.java
  13. 157 0
      edu-user/edu-user-biz/java/com/keao/edu/user/controller/ExamOrganizationRelationController.java
  14. 156 0
      edu-user/edu-user-biz/java/com/keao/edu/user/controller/ExamRegistrationController.java
  15. 71 0
      edu-user/edu-user-biz/java/com/keao/edu/user/controller/ExamReviewController.java
  16. 174 0
      edu-user/edu-user-biz/java/com/keao/edu/user/controller/ExamRoomController.java
  17. 176 0
      edu-user/edu-user-biz/java/com/keao/edu/user/controller/ExamRoomStudentRelationController.java
  18. 77 0
      edu-user/edu-user-biz/java/com/keao/edu/user/controller/ExamSongController.java
  19. 39 0
      edu-user/edu-user-biz/java/com/keao/edu/user/controller/ExamSubjectController.java
  20. 78 0
      edu-user/edu-user-biz/java/com/keao/edu/user/controller/ExamSubjectSongController.java
  21. 93 0
      edu-user/edu-user-biz/java/com/keao/edu/user/controller/ExamTeacherSalaryController.java
  22. 108 0
      edu-user/edu-user-biz/java/com/keao/edu/user/controller/ExaminationBasicController.java
  23. 64 0
      edu-user/edu-user-biz/java/com/keao/edu/user/controller/MusicTheoryController.java
  24. 86 0
      edu-user/edu-user-biz/java/com/keao/edu/user/controller/OrganizationController.java
  25. 38 0
      edu-user/edu-user-biz/java/com/keao/edu/user/controller/ShortUrlController.java
  26. 81 0
      edu-user/edu-user-biz/java/com/keao/edu/user/controller/StudentController.java
  27. 118 0
      edu-user/edu-user-biz/java/com/keao/edu/user/controller/StudentExamResultController.java
  28. 80 0
      edu-user/edu-user-biz/java/com/keao/edu/user/controller/SubjectController.java
  29. 93 0
      edu-user/edu-user-biz/java/com/keao/edu/user/controller/SysConfigController.java
  30. 46 0
      edu-user/edu-user-biz/java/com/keao/edu/user/controller/SysSuggestionController.java
  31. 50 0
      edu-user/edu-user-biz/java/com/keao/edu/user/controller/TaskController.java
  32. 70 0
      edu-user/edu-user-biz/java/com/keao/edu/user/controller/TeacherController.java
  33. 78 0
      edu-user/edu-user-biz/java/com/keao/edu/user/controller/TenantInfoController.java
  34. 46 0
      edu-user/edu-user-biz/java/com/keao/edu/user/controller/UploadFileController.java
  35. 139 0
      edu-user/edu-user-biz/java/com/keao/edu/user/controller/WebSocketServer.java
  36. 0 0
      edu-user/edu-user-biz/java/com/keao/edu/user/dao/AppVersionInfoDao.java
  37. 0 0
      edu-user/edu-user-biz/java/com/keao/edu/user/dao/EmployeeDao.java
  38. 0 0
      edu-user/edu-user-biz/java/com/keao/edu/user/dao/ExamCertificationDao.java
  39. 0 0
      edu-user/edu-user-biz/java/com/keao/edu/user/dao/ExamLifecycleLogDao.java
  40. 0 0
      edu-user/edu-user-biz/java/com/keao/edu/user/dao/ExamLocationDao.java
  41. 0 0
      edu-user/edu-user-biz/java/com/keao/edu/user/dao/ExamManualLedgerDao.java
  42. 0 0
      edu-user/edu-user-biz/java/com/keao/edu/user/dao/ExamMusicTheoryDao.java
  43. 0 0
      edu-user/edu-user-biz/java/com/keao/edu/user/dao/ExamOrganizationRelationDao.java
  44. 0 0
      edu-user/edu-user-biz/java/com/keao/edu/user/dao/ExamRegistrationDao.java
  45. 0 0
      edu-user/edu-user-biz/java/com/keao/edu/user/dao/ExamRegistrationPaymentDao.java
  46. 0 0
      edu-user/edu-user-biz/java/com/keao/edu/user/dao/ExamReviewDao.java
  47. 0 0
      edu-user/edu-user-biz/java/com/keao/edu/user/dao/ExamRoomDao.java
  48. 0 0
      edu-user/edu-user-biz/java/com/keao/edu/user/dao/ExamRoomStudentRelationDao.java
  49. 0 0
      edu-user/edu-user-biz/java/com/keao/edu/user/dao/ExamSongDao.java
  50. 0 0
      edu-user/edu-user-biz/java/com/keao/edu/user/dao/ExamSubjectDao.java
  51. 0 0
      edu-user/edu-user-biz/java/com/keao/edu/user/dao/ExamSubjectSongDao.java
  52. 0 0
      edu-user/edu-user-biz/java/com/keao/edu/user/dao/ExamTeacherSalaryDao.java
  53. 0 0
      edu-user/edu-user-biz/java/com/keao/edu/user/dao/ExaminationBasicDao.java
  54. 0 0
      edu-user/edu-user-biz/java/com/keao/edu/user/dao/MusicTheoryDao.java
  55. 0 0
      edu-user/edu-user-biz/java/com/keao/edu/user/dao/OrganizationDao.java
  56. 0 0
      edu-user/edu-user-biz/java/com/keao/edu/user/dao/ShortUrlDao.java
  57. 0 0
      edu-user/edu-user-biz/java/com/keao/edu/user/dao/StudentDao.java
  58. 0 0
      edu-user/edu-user-biz/java/com/keao/edu/user/dao/StudentExamResultDao.java
  59. 0 0
      edu-user/edu-user-biz/java/com/keao/edu/user/dao/SubjectDao.java
  60. 0 0
      edu-user/edu-user-biz/java/com/keao/edu/user/dao/SysConfigDao.java
  61. 0 0
      edu-user/edu-user-biz/java/com/keao/edu/user/dao/SysSuggestionDao.java
  62. 0 0
      edu-user/edu-user-biz/java/com/keao/edu/user/dao/SysUserDao.java
  63. 0 0
      edu-user/edu-user-biz/java/com/keao/edu/user/dao/TeacherDao.java
  64. 0 0
      edu-user/edu-user-biz/java/com/keao/edu/user/dao/TenantInfoDao.java
  65. 0 0
      edu-user/edu-user-biz/java/com/keao/edu/user/dto/BaseUserInfoDto.java
  66. 0 0
      edu-user/edu-user-biz/java/com/keao/edu/user/dto/ExamCertificationDto.java
  67. 0 0
      edu-user/edu-user-biz/java/com/keao/edu/user/dto/ExamLifecycleLogDto.java
  68. 0 0
      edu-user/edu-user-biz/java/com/keao/edu/user/dto/ExamManualLedgerStatisticsDto.java
  69. 0 0
      edu-user/edu-user-biz/java/com/keao/edu/user/dto/ExamOrganRegistDto.java
  70. 0 0
      edu-user/edu-user-biz/java/com/keao/edu/user/dto/ExamOrganStatisticsDto.java
  71. 0 0
      edu-user/edu-user-biz/java/com/keao/edu/user/dto/ExamOrganizationRelationExtraDto.java
  72. 0 0
      edu-user/edu-user-biz/java/com/keao/edu/user/dto/ExamPaymentInfo.java
  73. 0 0
      edu-user/edu-user-biz/java/com/keao/edu/user/dto/ExamRecordDto.java
  74. 0 0
      edu-user/edu-user-biz/java/com/keao/edu/user/dto/ExamRegistrationDto.java
  75. 0 0
      edu-user/edu-user-biz/java/com/keao/edu/user/dto/ExamRegistrationPaymentDto.java
  76. 0 0
      edu-user/edu-user-biz/java/com/keao/edu/user/dto/ExamRegistrationRoomDto.java
  77. 0 0
      edu-user/edu-user-biz/java/com/keao/edu/user/dto/ExamRegistrationStatisticsDto.java
  78. 0 0
      edu-user/edu-user-biz/java/com/keao/edu/user/dto/ExamReviewDto.java
  79. 0 0
      edu-user/edu-user-biz/java/com/keao/edu/user/dto/ExamReviewRecordDto.java
  80. 0 0
      edu-user/edu-user-biz/java/com/keao/edu/user/dto/ExamRoomDto.java
  81. 0 0
      edu-user/edu-user-biz/java/com/keao/edu/user/dto/ExamRoomExamTimeDto.java
  82. 0 0
      edu-user/edu-user-biz/java/com/keao/edu/user/dto/ExamRoomListDto.java
  83. 0 0
      edu-user/edu-user-biz/java/com/keao/edu/user/dto/ExamRoomStatisticsDto.java
  84. 0 0
      edu-user/edu-user-biz/java/com/keao/edu/user/dto/ExamRoomStudentRelationDto.java
  85. 0 0
      edu-user/edu-user-biz/java/com/keao/edu/user/dto/ExamSubjectDto.java
  86. 0 0
      edu-user/edu-user-biz/java/com/keao/edu/user/dto/ExamSubjectSongDto.java
  87. 0 0
      edu-user/edu-user-biz/java/com/keao/edu/user/dto/ExamTeacherSalaryDto.java
  88. 0 0
      edu-user/edu-user-biz/java/com/keao/edu/user/dto/ExamTeacherSalaryStaticsInfo.java
  89. 0 0
      edu-user/edu-user-biz/java/com/keao/edu/user/dto/ExaminationBasicDto.java
  90. 0 0
      edu-user/edu-user-biz/java/com/keao/edu/user/dto/NeedCheckingDetailDto.java
  91. 0 0
      edu-user/edu-user-biz/java/com/keao/edu/user/dto/RecordNotify.java
  92. 0 0
      edu-user/edu-user-biz/java/com/keao/edu/user/dto/RoomStudentListDto.java
  93. 0 0
      edu-user/edu-user-biz/java/com/keao/edu/user/dto/StuRecordDetailDto.java
  94. 0 0
      edu-user/edu-user-biz/java/com/keao/edu/user/dto/StudentBaseExamsDto.java
  95. 0 0
      edu-user/edu-user-biz/java/com/keao/edu/user/dto/StudentExamListDto.java
  96. 0 0
      edu-user/edu-user-biz/java/com/keao/edu/user/dto/StudentExamPaymentDto.java
  97. 0 0
      edu-user/edu-user-biz/java/com/keao/edu/user/dto/StudentExamResultStatisticsDto.java
  98. 0 0
      edu-user/edu-user-biz/java/com/keao/edu/user/dto/TeacherDto.java
  99. 0 0
      edu-user/edu-user-biz/java/com/keao/edu/user/dto/TenantInfoDto.java
  100. 0 0
      edu-user/edu-user-biz/java/com/keao/edu/user/entity/AppVersionInfo.java

+ 50 - 0
edu-user/edu-user-biz/java/com/keao/edu/user/UserServerApplication.java

@@ -0,0 +1,50 @@
+package com.keao.edu.user;
+
+import com.huifu.adapay.Adapay;
+import com.huifu.adapay.model.MerConfig;
+import com.keao.edu.thirdparty.adapay.ConfigInit;
+import com.keao.edu.user.service.NotifyCallback;
+import com.spring4all.swagger.EnableSwagger2Doc;
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
+import org.springframework.cloud.client.loadbalancer.LoadBalanced;
+import org.springframework.cloud.openfeign.EnableFeignClients;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableAsync;
+import org.springframework.web.client.RestTemplate;
+
+@SpringBootApplication
+@EnableDiscoveryClient
+@EnableFeignClients({"com.keao.edu"})
+@MapperScan({"com.keao.edu.user.dao", "com.keao.edu.common.dao"})
+@ComponentScan(basePackages="com.keao.edu")
+@Configuration
+@EnableSwagger2Doc
+@EnableAsync
+public class UserServerApplication {
+
+	public static void main(String[] args) {
+		SpringApplication.run(UserServerApplication.class, args);
+	}
+
+	@Bean
+	@LoadBalanced
+	public RestTemplate restTemplate() {
+		return new RestTemplate();
+	}
+
+	@Bean
+	public static void startMqtt() {
+		MerConfig merConfig = ConfigInit.merConfig;
+		NotifyCallback notifyCallback = new NotifyCallback();
+		try {
+			Adapay.startMqttListener(merConfig, notifyCallback);
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+}

+ 49 - 0
edu-user/edu-user-biz/java/com/keao/edu/user/config/PermissionCheckService.java

@@ -0,0 +1,49 @@
+package com.keao.edu.user.config;
+
+import com.keao.edu.auth.api.client.SysUserFeignService;
+import com.keao.edu.auth.api.entity.SysUser;
+import com.keao.edu.auth.api.util.SecurityUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.core.Authentication;
+import org.springframework.security.core.GrantedAuthority;
+import org.springframework.stereotype.Component;
+
+import java.util.Collection;
+
+@Component("pcs")
+public class PermissionCheckService {
+
+	@Autowired
+	private SysUserFeignService sysUserFeignService;
+
+	public boolean hasPermissions(String... permissions) {
+		Authentication authentication = SecurityUtils.getAuthentication();
+		if (authentication == null) {
+			return false;
+		}
+
+		SysUser user = sysUserFeignService.queryUserInfo();
+		if (user.getIsSuperAdmin()) {
+			return true;
+		}
+
+		Collection<? extends GrantedAuthority> authorities = authentication.getAuthorities();
+
+		for (String perm : permissions) {
+			for (GrantedAuthority authority : authorities) {
+				if (StringUtils.equalsIgnoreCase(perm, authority.getAuthority())) {
+					return true;
+				}
+			}
+		}
+
+		return false;
+	}
+
+	public boolean hasRoles(String... roles) {
+
+		return hasPermissions(roles);
+	}
+
+}

+ 40 - 0
edu-user/edu-user-biz/java/com/keao/edu/user/config/ResourceServerConfig.java

@@ -0,0 +1,40 @@
+package com.keao.edu.user.config;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
+import org.springframework.security.config.annotation.web.builders.HttpSecurity;
+import org.springframework.security.oauth2.config.annotation.web.configuration.EnableResourceServer;
+import org.springframework.security.oauth2.config.annotation.web.configuration.ResourceServerConfigurerAdapter;
+import org.springframework.security.oauth2.config.annotation.web.configurers.ResourceServerSecurityConfigurer;
+
+import com.keao.edu.common.security.BaseAccessDeniedHandler;
+import com.keao.edu.common.security.BaseAuthenticationEntryPoint;
+
+@Configuration
+@EnableResourceServer
+@EnableGlobalMethodSecurity(prePostEnabled = true)
+public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
+
+    @Autowired
+    private BaseAccessDeniedHandler baseAccessDeniedHandler;
+
+    @Autowired
+    private BaseAuthenticationEntryPoint baseAuthenticationEntryPoint;
+
+    @Override
+    public void configure(HttpSecurity http) throws Exception {
+        http.authorizeRequests()
+                .antMatchers("/task/*","/v2/api-docs", "/su/**", "/student/apply", "/examRegistration/ocr", "/examOrder/paymentResult",
+                        "/examOrder/notify","/examinationBasic/getInfo","/examOrder/executePayment","/examOrder/pageList","/studentExamResult/recordSync")
+                .permitAll()
+                .anyRequest().authenticated().and().csrf().disable().exceptionHandling().accessDeniedHandler(baseAccessDeniedHandler)
+                .authenticationEntryPoint(baseAuthenticationEntryPoint).and();
+    }
+
+    @Override
+    public void configure(ResourceServerSecurityConfigurer resources) throws Exception {
+        resources.authenticationEntryPoint(baseAuthenticationEntryPoint).accessDeniedHandler(baseAccessDeniedHandler);
+    }
+
+}

+ 56 - 0
edu-user/edu-user-biz/java/com/keao/edu/user/config/WebMvcConfig.java

@@ -0,0 +1,56 @@
+package com.keao.edu.user.config;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.format.FormatterRegistry;
+import org.springframework.http.MediaType;
+import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+import com.keao.edu.common.config.EnumConverterFactory;
+import com.keao.edu.common.config.LocalFastJsonHttpMessageConverter;
+import com.keao.edu.common.tenant.TenantInterceptor;
+import com.keao.edu.datasource.interceptor.DataSourceInterceptor;
+
+@Configuration
+public class WebMvcConfig implements WebMvcConfigurer {
+
+	/**
+	 * 枚举类的转换器 addConverterFactory
+	 */
+	@Override
+	public void addFormatters(FormatterRegistry registry) {
+		registry.addConverterFactory(new EnumConverterFactory());
+	}
+
+	@Override
+	public void addInterceptors(InterceptorRegistry registry) {
+
+		registry.addInterceptor(getDataSrouceInterceptor()).addPathPatterns("/**");
+		registry.addInterceptor(getTenantInterceptor()).addPathPatterns("/**");
+	}
+
+	@Bean
+	public DataSourceInterceptor getDataSrouceInterceptor() {
+		return new DataSourceInterceptor();
+	}
+
+	@Bean
+	public TenantInterceptor getTenantInterceptor() {
+		return new TenantInterceptor();
+	}
+	
+	@Bean
+    public HttpMessageConverters fastJsonHttpMessageConverters(){
+		LocalFastJsonHttpMessageConverter converter = new LocalFastJsonHttpMessageConverter();
+        List<MediaType> fastMediaTypes =  new ArrayList<MediaType>();
+        fastMediaTypes.add(MediaType.APPLICATION_JSON_UTF8);
+        converter.setSupportedMediaTypes(fastMediaTypes);
+        return new HttpMessageConverters(converter);
+    }
+
+}

+ 14 - 0
edu-user/edu-user-biz/java/com/keao/edu/user/config/WebSocketConfig.java

@@ -0,0 +1,14 @@
+package com.keao.edu.user.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.socket.server.standard.ServerEndpointExporter;
+
+@Configuration
+public class WebSocketConfig {
+
+    @Bean
+    public ServerEndpointExporter serverEndpointExporter () {
+        return new ServerEndpointExporter();
+    }
+}

+ 72 - 0
edu-user/edu-user-biz/java/com/keao/edu/user/controller/AppVersionInfoController.java

@@ -0,0 +1,72 @@
+package com.keao.edu.user.controller;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiOperation;
+
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.MediaType;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.keao.edu.common.controller.BaseController;
+import com.keao.edu.common.page.QueryInfo;
+import com.keao.edu.user.entity.AppVersionInfo;
+import com.keao.edu.user.service.AppVersionInfoService;
+
+@RequestMapping("appVersionInfo")
+@Api(tags = "APP版本信息服务")
+@RestController
+public class AppVersionInfoController extends BaseController {
+
+	@Autowired
+	private AppVersionInfoService appVersionInfoService;
+
+	@ApiOperation("分页查询")
+	@GetMapping(value = "/list")
+	@PreAuthorize("@pcs.hasPermissions('appVersionInfo/list')")
+	public Object getList(QueryInfo queryInfo) {
+		return succeed(appVersionInfoService.queryPage(queryInfo));
+	}
+
+	@ApiOperation("根据app客户端查询对象")
+	@ApiImplicitParam(name = "platform", value = "平台名称", required = true, dataType = "String", paramType = "path")
+	@GetMapping(value = "/queryByPlatform")
+	public Object queryByPlatform(String platform) {
+		List<AppVersionInfo> list = appVersionInfoService.queryNewestByPlatform(platform);
+		if (list.size() > 0) {
+			return succeed(list.get(0));
+		}
+		return failed();
+	}
+
+	@ApiOperation("单查询")
+	@ApiImplicitParam(name = "id", value = "ID编号", required = true, dataType = "Integer", paramType = "path")
+	@GetMapping(value = "/query")
+	@PreAuthorize("@pcs.hasPermissions('appVersionInfo/query')")
+	public Object query(Integer id) {
+		return succeed(appVersionInfoService.get(id));
+	}
+
+	@ApiOperation("新增")
+	@PostMapping(value = "/add", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
+	@PreAuthorize("@pcs.hasPermissions('appVersionInfo/add')")
+	public Object add(AppVersionInfo appVersionInfo) {
+		appVersionInfoService.add(appVersionInfo);
+		return succeed();
+	}
+
+	@ApiOperation("更新")
+	@PostMapping(value = "/update", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
+	@PreAuthorize("@pcs.hasPermissions('appVersionInfo/update')")
+	public Object update(AppVersionInfo appVersionInfo) {
+		appVersionInfoService.updateVersion(appVersionInfo);
+		return succeed();
+	}
+
+}

+ 85 - 0
edu-user/edu-user-biz/java/com/keao/edu/user/controller/EmployeeController.java

@@ -0,0 +1,85 @@
+package com.keao.edu.user.controller;
+
+
+import com.keao.edu.auth.api.client.SysUserFeignService;
+import com.keao.edu.auth.api.entity.SysUser;
+import com.keao.edu.common.controller.BaseController;
+import com.keao.edu.common.entity.HttpResponseResult;
+import com.keao.edu.common.page.PageInfo;
+import com.keao.edu.common.tenant.TenantContextHolder;
+import com.keao.edu.user.entity.Employee;
+import com.keao.edu.user.page.EmployeeQueryInfo;
+import com.keao.edu.user.service.EmployeeService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+@RestController
+@RequestMapping("employee")
+@Api(tags = "员工服务")
+public class EmployeeController extends BaseController {
+
+	@Autowired
+	private EmployeeService employeeService;
+	@Autowired
+	private SysUserFeignService sysUserFeignService;
+	
+	@ApiOperation("员工服务分页查询")
+	@GetMapping(value = "/list")
+	public HttpResponseResult<PageInfo<Employee>> getList(EmployeeQueryInfo queryInfo) {
+		SysUser sysUser = sysUserFeignService.queryUserInfo();
+		queryInfo.setUserId(sysUser.getId());
+		/*if(queryInfo.getOrganId() != null){
+			queryInfo.setOrganIds(organizationService.getChildOrganIds(queryInfo.getOrganId(),true));
+		}*/
+		return succeed(employeeService.queryPage(queryInfo));
+	}
+
+	@ApiOperation("查询员工详情")
+	@ApiImplicitParam(name = "id", value = "员工ID", required = true, dataType = "Integer", paramType = "path")
+	@GetMapping(value = "/query")
+	public HttpResponseResult<Employee> query(Integer id) {
+		return succeed(employeeService.getEmployee(id));
+	}
+
+	@ApiOperation("新增员工")
+	@PostMapping(value = "/add")
+	public HttpResponseResult add(@RequestBody Employee employee) {
+//        SysUser sysUser = sysUserFeignService.queryUserInfo();
+//        employee.setOrganId(sysUser.getId());
+		employee.setTenantId(TenantContextHolder.getTenantId());
+	    employeeService.add(employee);
+		return succeed();
+	}
+
+	@ApiOperation("更新员工")
+	@PostMapping(value = "/update")
+	public HttpResponseResult update(@RequestBody Employee employee) {
+		employeeService.updateEmployee(employee);
+		return succeed();
+	}
+
+	@ApiOperation(value = "获取用户信息")
+	@GetMapping("/queryUserInfo")
+	public Object apiQueryUserInfo() {
+		SysUser sysUser = sysUserFeignService.queryUserInfo();
+		if(sysUser != null && sysUser.getId() != null){
+//			Employee employee = employeeService.get(sysUser.getId());
+//			sysUser.setRoles(employeeDao.queryUserRole(sysUser.getId()));
+//			sysUser.setContactAddress(employee.getContactAddress());
+//			sysUser.setPostalCode(employee.getPostalCode());
+			return succeed(sysUser);
+		}
+		return failed("获取用户信息失败");
+	}
+
+	@ApiOperation("删除")
+	@PostMapping(value = "/del/{id}")
+	public HttpResponseResult add(@PathVariable("id") Integer id) {
+		employeeService.del(id);
+		return succeed();
+	}
+
+}

+ 42 - 0
edu-user/edu-user-biz/java/com/keao/edu/user/controller/ExamCertificationController.java

@@ -0,0 +1,42 @@
+package com.keao.edu.user.controller;
+
+import com.keao.edu.common.controller.BaseController;
+import com.keao.edu.common.entity.HttpResponseResult;
+import com.keao.edu.user.dto.ExamCertificationDto;
+import com.keao.edu.user.dto.NeedCheckingDetailDto;
+import com.keao.edu.user.service.ExamCertificationService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+@RestController
+@RequestMapping("examCertification")
+@Api(tags = "准考证服务")
+public class ExamCertificationController extends BaseController {
+
+    @Autowired
+    private ExamCertificationService examCertificationService;
+
+    @ApiOperation("后台获取学员准考证详情")
+    @GetMapping(value = "findDetailByStudentId")
+    public HttpResponseResult<ExamCertificationDto> findDetailByStudentId(Long examRegistrationId) {
+        return succeed(examCertificationService.findDetailByStudentId(examRegistrationId));
+    }
+
+    @ApiOperation("学生端获取学员准考证列表")
+    @GetMapping(value = "queryCertificationPage")
+    public HttpResponseResult<List<ExamCertificationDto>> queryCertification(Long examRegistrationId) {
+        return succeed(examCertificationService.queryCertificationPage(examRegistrationId));
+    }
+
+    @ApiOperation("学生端待考详情")
+    @GetMapping(value = "needCheckingDetail")
+    public HttpResponseResult<NeedCheckingDetailDto> needCheckingDetail(Long examRegistrationId) {
+        return succeed(examCertificationService.needCheckingDetail(examRegistrationId));
+    }
+}

+ 77 - 0
edu-user/edu-user-biz/java/com/keao/edu/user/controller/ExamLocationController.java

@@ -0,0 +1,77 @@
+package com.keao.edu.user.controller;
+
+import com.keao.edu.common.controller.BaseController;
+import com.keao.edu.common.entity.HttpResponseResult;
+import com.keao.edu.common.page.PageInfo;
+import com.keao.edu.common.tenant.TenantContextHolder;
+import com.keao.edu.user.entity.ExamLocation;
+import com.keao.edu.user.page.ExamLocationQueryInfo;
+import com.keao.edu.user.service.ExamLocationService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiOperation;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @Author Joburgess
+ * @Date 2020.06.16
+ */
+@RestController
+@RequestMapping("examLocation")
+@Api(tags = "线下考点服务")
+public class ExamLocationController extends BaseController {
+
+    @Autowired
+    private ExamLocationService examLocationService;
+
+    @ApiOperation("分页查询")
+    @GetMapping(value = "/list")
+    public HttpResponseResult<PageInfo<ExamLocation>> getList(ExamLocationQueryInfo queryInfo) {
+        if(StringUtils.isBlank(queryInfo.getSearch())){
+            queryInfo.setSearch(null);
+        }
+        return succeed(examLocationService.queryPage(queryInfo));
+    }
+
+    @ApiOperation("获取所在机构所有考点")
+    @GetMapping(value = "/getTenantAllLocations")
+    public HttpResponseResult<List<ExamLocation>> getTenantAllLocations(){
+        return succeed(examLocationService.getTenantAllLocations(TenantContextHolder.getTenantId()));
+    }
+
+    @ApiOperation("查询考点详情")
+    @ApiImplicitParam(name = "id", value = "机构ID", required = true, dataType = "Integer", paramType = "path")
+    @GetMapping(value = "/query")
+    public HttpResponseResult<ExamLocation> query(Integer id) {
+        return succeed(examLocationService.get(id));
+    }
+
+    @ApiOperation("新增考点")
+    @PostMapping(value = "/add")
+    public HttpResponseResult add(@RequestBody ExamLocation examLocation) {
+        examLocation.setTenantId(TenantContextHolder.getTenantId());
+        examLocation.setIsAvailable(true);
+        examLocationService.insert(examLocation);
+        return succeed();
+    }
+
+    @ApiOperation("更新考点")
+    @PostMapping(value = "/update")
+    public HttpResponseResult update(@RequestBody ExamLocation examLocation) {
+        examLocation.setUpdateTime(new Date());
+        examLocationService.update(examLocation);
+        return succeed();
+    }
+
+    @ApiOperation("删除考点")
+    @PostMapping(value = "/del")
+    public HttpResponseResult add(Integer id) {
+        return succeed(examLocationService.delete(id));
+    }
+
+}

+ 73 - 0
edu-user/edu-user-biz/java/com/keao/edu/user/controller/ExamManualLedgerController.java

@@ -0,0 +1,73 @@
+package com.keao.edu.user.controller;
+
+import com.keao.edu.auth.api.client.SysUserFeignService;
+import com.keao.edu.auth.api.entity.SysUser;
+import com.keao.edu.common.controller.BaseController;
+import com.keao.edu.common.entity.HttpResponseResult;
+import com.keao.edu.common.page.PageInfo;
+import com.keao.edu.common.tenant.OrganContextHolder;
+import com.keao.edu.common.tenant.TenantContextHolder;
+import com.keao.edu.user.dto.ExamManualLedgerStatisticsDto;
+import com.keao.edu.user.entity.ExamManualLedger;
+import com.keao.edu.user.enums.TransDirectionEnum;
+import com.keao.edu.user.page.ExamManualLedgerQueryInfo;
+import com.keao.edu.user.service.ExamManualLedgerService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * @Author Joburgess
+ * @Date 2020.07.07
+ */
+@RestController
+@RequestMapping("examManualLedger")
+@Api(tags = "支出记录服务")
+public class ExamManualLedgerController extends BaseController {
+
+    @Autowired
+    private ExamManualLedgerService examManualLedgerService;
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+
+    @ApiOperation("分页查询")
+    @GetMapping(value = "/list")
+    public HttpResponseResult<PageInfo<ExamManualLedger>> getList(ExamManualLedgerQueryInfo queryInfo) {
+        return succeed(examManualLedgerService.queryExamManualLedgers(queryInfo));
+    }
+
+    @ApiOperation("新增支出记录")
+    @PostMapping(value = "/add")
+    public HttpResponseResult add(@RequestBody ExamManualLedger examManualLedger) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        examManualLedger.setTransDirection(TransDirectionEnum.EXPENDITURE);
+        examManualLedger.setTenantId(TenantContextHolder.getTenantId());
+        examManualLedger.setOperatorUserId(sysUser.getId());
+        examManualLedger.setOrganId(OrganContextHolder.getOrganId());
+        examManualLedgerService.addExamManualLedger(examManualLedger);
+        return succeed();
+    }
+
+    @ApiOperation("更新支出记录")
+    @PostMapping(value = "/update")
+    public HttpResponseResult update(@RequestBody ExamManualLedger examManualLedger) {
+        examManualLedgerService.update(examManualLedger);
+        return succeed();
+    }
+
+    @ApiOperation("删除支出记录")
+    @PostMapping(value = "/del")
+    public HttpResponseResult del(Long id) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        examManualLedgerService.deleteExamManualLedger(sysUser.getId(),id);
+        return succeed();
+    }
+
+    @ApiOperation("获取考级项目支出统计信息")
+    @GetMapping(value = "/getExamManualLedgerStatistics")
+    public HttpResponseResult<ExamManualLedgerStatisticsDto> getExamManualLedgerStatistics(Long examId, Integer targetOrganId){
+        return succeed(examManualLedgerService.getExamManualLedgerStatistics(OrganContextHolder.getOrganId(),examId,targetOrganId));
+    }
+
+}

+ 65 - 0
edu-user/edu-user-biz/java/com/keao/edu/user/controller/ExamMusicTheoryController.java

@@ -0,0 +1,65 @@
+package com.keao.edu.user.controller;
+
+import com.keao.edu.common.controller.BaseController;
+import com.keao.edu.common.entity.HttpResponseResult;
+import com.keao.edu.common.page.PageInfo;
+import com.keao.edu.common.tenant.TenantContextHolder;
+import com.keao.edu.user.entity.ExamMusicTheory;
+import com.keao.edu.user.page.ExamMusicTheoryQueryInfo;
+import com.keao.edu.user.service.ExamMusicTheoryService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @Author Joburgess
+ * @Date 2020.07.01
+ */
+@RestController
+@RequestMapping("examMusicTheory")
+@Api(tags = "考级乐理")
+public class ExamMusicTheoryController extends BaseController {
+
+    @Autowired
+    private ExamMusicTheoryService examMusicTheoryService;
+
+    @ApiOperation("分页查询")
+    @GetMapping(value = "/list")
+    public HttpResponseResult<PageInfo<ExamMusicTheory>> getList(ExamMusicTheoryQueryInfo queryInfo) {
+        return succeed(examMusicTheoryService.queryPage(queryInfo));
+    }
+
+    @ApiOperation("新增")
+    @PostMapping(value = "/add")
+    public HttpResponseResult add(ExamMusicTheory examMusicTheory) {
+        examMusicTheory.setTenantId(TenantContextHolder.getTenantId());
+        examMusicTheoryService.insert(examMusicTheory);
+        return succeed();
+    }
+
+    @ApiOperation("更新")
+    @PostMapping(value = "/update")
+    public HttpResponseResult update(ExamMusicTheory examMusicTheory) {
+        examMusicTheory.setUpdateTime(new Date());
+        examMusicTheoryService.update(examMusicTheory);
+        return succeed();
+    }
+
+    @ApiOperation("删除")
+    @PostMapping(value = "/del/{id}")
+    public HttpResponseResult add(@PathVariable("id") Integer id) {
+        return succeed(examMusicTheoryService.delete(id));
+    }
+
+
+    @ApiOperation("获取项目乐理级别列表")
+    @GetMapping(value = "/getTheoryLevelList")
+    public HttpResponseResult<List<ExamMusicTheory>> getTheoryLevelList(Integer examId) {
+        return succeed(examMusicTheoryService.getTheoryLevelList(examId));
+    }
+
+}

+ 211 - 0
edu-user/edu-user-biz/java/com/keao/edu/user/controller/ExamOrderController.java

@@ -0,0 +1,211 @@
+package com.keao.edu.user.controller;
+
+import com.alibaba.fastjson.JSON;
+import com.keao.edu.auth.api.client.SysUserFeignService;
+import com.keao.edu.auth.api.entity.SysUser;
+import com.keao.edu.common.controller.BaseController;
+import com.keao.edu.common.entity.HttpResponseResult;
+import com.keao.edu.common.page.PageInfo;
+import com.keao.edu.thirdparty.adapay.ConfigInit;
+import com.keao.edu.thirdparty.adapay.Payment;
+import com.keao.edu.thirdparty.yqpay.Msg;
+import com.keao.edu.user.dto.ExamPaymentInfo;
+import com.keao.edu.user.dto.ExamRegistrationPaymentDto;
+import com.keao.edu.user.entity.Employee;
+import com.keao.edu.user.entity.ExamRegistrationPayment;
+import com.keao.edu.user.enums.TransStatusEnum;
+import com.keao.edu.user.page.ExamRegistrationPaymentQueryInfo;
+import com.keao.edu.user.service.EmployeeService;
+import com.keao.edu.user.service.ExamRegistrationPaymentService;
+import com.keao.edu.util.date.DateUtil;
+import com.keao.edu.util.http.HttpUtil;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+
+@RestController
+@Api(tags = "报名订单服务")
+@RequestMapping(value = "examOrder")
+public class ExamOrderController extends BaseController {
+
+    @Autowired
+    private ExamRegistrationPaymentService examRegistrationPaymentService;
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+    @Autowired
+    private EmployeeService employeeService;
+
+    @ApiOperation(value = "缴费列表")
+    @GetMapping(value = "pageList")
+    @PreAuthorize("@pcs.hasPermissions('examOrder/pageList')")
+    public HttpResponseResult<PageInfo<ExamRegistrationPaymentDto>> pageList(ExamRegistrationPaymentQueryInfo queryInfo) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (!sysUser.getIsSuperAdmin() && Objects.isNull(queryInfo.getOrganId())) {
+            Employee employee = employeeService.get(sysUser.getId());
+            if (Objects.nonNull(employee)) {
+                queryInfo.setOrganId(employee.getOrganId());
+            }
+        }
+        return succeed(examRegistrationPaymentService.pageList(queryInfo));
+    }
+
+    @ApiOperation("获取用户项目未支付的订单")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "examinationBasicId", value = "项目id", required = true, dataType = "Integer")})
+    @GetMapping(value = "/getExamIngOrder")
+    public HttpResponseResult<ExamRegistrationPayment> getExamIngOrder(Long examinationBasicId) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        return succeed(examRegistrationPaymentService.getExamIngOrder(examinationBasicId, sysUser.getId()));
+    }
+
+    @ApiOperation(value = "台牌支付")
+    @PostMapping("/executePayment")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "amount", value = "支付金额", required = true, dataType = "BigDecimal"),
+            @ApiImplicitParam(name = "orderNo", value = "订单号", required = true, dataType = "String"),
+            @ApiImplicitParam(name = "payChannel", value = "支付方式", required = true, dataType = "String"),
+            @ApiImplicitParam(name = "returnUrl", value = "返回页面", required = true, dataType = "String"),
+            @ApiImplicitParam(name = "orderSubject", value = "订单标题", required = true, dataType = "String"),
+            @ApiImplicitParam(name = "orderBody", value = "订单内容", required = true, dataType = "String"),
+            @ApiImplicitParam(name = "sign", value = "sign", required = true, dataType = "String"),
+            @ApiImplicitParam(name = "code", value = "code", required = true, dataType = "String")
+    })
+    public Object executePayment(BigDecimal amount, String orderNo, String payChannel, String returnUrl, String orderSubject, String orderBody, String sign, String code, String platform) throws Exception {
+        String openId = "";
+        if (payChannel.equals("wx_pub")) {
+            if (code == null || code.isEmpty()) {
+                return failed("微信支付请先授权");
+            }
+            String wxMpOAuth2AccessTokenUrl = String.format(ConfigInit.wxMpOAuth2AccessTokenUrl, ConfigInit.wxAppId, ConfigInit.wxAppSecret, code);
+            Map<String, String> weChatRes = JSON.parseObject(HttpUtil.get(wxMpOAuth2AccessTokenUrl, new HashMap<>()), Map.class);
+            if (!weChatRes.containsKey("openid")) {
+                return failed("授权失败,请重新授权");
+            }
+            openId = weChatRes.get("openid");
+        }
+
+        ExamRegistrationPayment examRegistrationPayment = examRegistrationPaymentService.getByOrderNo(orderNo);
+
+        if (examRegistrationPayment == null) {
+            return failed("订单不存在,请勿非法请求");
+        }
+        String merNos = examRegistrationPayment.getMerNo();
+        Date createTime = examRegistrationPayment.getCreateTime();
+        Calendar beforeTime = Calendar.getInstance();
+        beforeTime.add(Calendar.MINUTE, -28);// 28 分钟之前的时间
+        Date beforeDate = beforeTime.getTime();
+        if (createTime.before(beforeDate)) {
+            return failed("订单已超时,请重新下单");
+        }
+        amount = examRegistrationPayment.getTransAmount();
+
+        Date expireDate = DateUtil.addMinutes(createTime, 30);
+        String timeExpire = new SimpleDateFormat("yyyyMMddHHmmss").format(expireDate);
+
+        Map<String, Object> paymentParams = new HashMap<>();
+        paymentParams.put("app_id", ConfigInit.appId);
+        paymentParams.put("order_no", orderNo);
+        paymentParams.put("pay_channel", payChannel);
+        paymentParams.put("pay_amt", amount);
+        paymentParams.put("goods_title", orderSubject);
+        paymentParams.put("goods_desc", orderBody);
+        paymentParams.put("time_expire", timeExpire);
+
+        if (!merNos.equals(ConfigInit.merNo)) {
+            List<Map<String, Object>> divMembers = new ArrayList<>();
+            Map<String, Object> divMember = new HashMap<>();
+            divMember.put("member_id", merNos);//分佣账户
+            divMember.put("amount", amount);//分佣金额
+            divMember.put("fee_flag", "Y"); //承担手续费
+            divMembers.add(divMember);
+            paymentParams.put("div_members", JSON.toJSONString(divMembers));
+        }
+
+        Map<String, Object> expendParams = new HashMap<>(5);
+        expendParams.put("open_id", openId);
+        expendParams.put("is_raw", "1");
+        expendParams.put("callback_url", returnUrl);
+        expendParams.put("limit_pay", "1");
+        paymentParams.put("expend", expendParams);
+
+        Map<String, Object> payment = Payment.executePayment(paymentParams);
+
+        examRegistrationPayment.setTransNo((String) payment.get("id"));
+        examRegistrationPaymentService.update(examRegistrationPayment);
+        return succeed(payment);
+    }
+
+
+    @ApiOperation(value = "获取订单状态及订单信息")
+    @GetMapping(value = "/paymentResult")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "orderNo", value = "订单编号", required = true, dataType = "String")})
+    public HttpResponseResult<ExamPaymentInfo> getExamOrderInfo(String orderNo) {
+        return succeed(examRegistrationPaymentService.getExamOrderInfo(orderNo));
+    }
+
+    @PostMapping("/notify")
+    public Msg notify(@ModelAttribute Msg msg) throws Exception {
+        Map<String, Object> rqMap = new LinkedHashMap<String, Object>();
+        rqMap.put("code", msg.getCode());
+        rqMap.put("msg", msg.getMsg());
+        rqMap.put("responseType", msg.getResponseType());
+        rqMap.put("responseParameters", msg.getResponseParameters());
+        rqMap.put("sign", msg.getSign());
+        //boolean rs = YqPayUtil.verify(rqMap);
+        msg.setMsg("fail");
+        Map<String, String> notifyMap = new HashMap<>();
+        //if (rs) {
+        notifyMap = JSON.parseObject(msg.getResponseParameters(), Map.class);
+        //}
+        //支付中订单存在,更新状态
+        if (msg.getResponseType().equals("1") && notifyMap.size() > 0) {
+            TransStatusEnum status = msg.getCode().equals("88") ? TransStatusEnum.SUCCESS : TransStatusEnum.FAILED;
+            String channelType = notifyMap.get("channelType").equals("1") ? "WXPay" : (notifyMap.get("channelType").equals("2") ? "Alipay" : "quickPay");
+
+            String memo = notifyMap.get("remarks");
+            String orderNo = notifyMap.get("merMerOrderNo");
+            String transNo = notifyMap.get("orderNo");
+
+            notifyMap.put("channelType", channelType);
+            notifyMap.put("memo", memo);
+            notifyMap.put("transStatus", status.getCode());
+            notifyMap.put("orderNo", orderNo);
+            notifyMap.put("transNo", transNo);
+
+            examRegistrationPaymentService.updateOrder(notifyMap);
+            msg.setCode("000000");
+            msg.setMsg("success");
+        }
+        return msg;
+    }
+
+    @PostMapping(value = "orderSuccess")
+    public HttpResponseResult orderSuccess(String orderNo){
+        Map<String, String> notifyMap = new HashMap<>();
+        notifyMap.put("channelType", "Alipay");
+        notifyMap.put("memo", "手动回调");
+        notifyMap.put("transStatus", "SUCCESS");
+        notifyMap.put("orderNo", orderNo);
+        notifyMap.put("transNo", UUID.randomUUID().toString());
+        examRegistrationPaymentService.updateOrder(notifyMap);
+        return succeed();
+    }
+
+    @ApiOperation(value = "关闭订单")
+    @PostMapping("/closeOrder")
+    public HttpResponseResult closeOrder(String orderNo){
+        return succeed(examRegistrationPaymentService.closeOrder(orderNo));
+    }
+
+
+}

+ 157 - 0
edu-user/edu-user-biz/java/com/keao/edu/user/controller/ExamOrganizationRelationController.java

@@ -0,0 +1,157 @@
+package com.keao.edu.user.controller;
+
+import com.keao.edu.auth.api.client.SysUserFeignService;
+import com.keao.edu.auth.api.entity.SysUser;
+import com.keao.edu.common.controller.BaseController;
+import com.keao.edu.common.entity.HttpResponseResult;
+import com.keao.edu.common.page.PageInfo;
+import com.keao.edu.user.dto.ExamOrganizationRelationExtraDto;
+import com.keao.edu.user.entity.Employee;
+import com.keao.edu.user.entity.ExamOrganizationRelation;
+import com.keao.edu.user.page.ExamOrganizationRelationQueryInfo;
+import com.keao.edu.user.service.EmployeeService;
+import com.keao.edu.user.service.ExamOrganizationRelationService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+
+/**
+ * @Author Joburgess
+ * @Date 2020.06.18
+ */
+@RestController
+@RequestMapping("examOrganizationRelation")
+@Api(tags = "考级项目合作单位服务")
+public class ExamOrganizationRelationController extends BaseController {
+
+    @Autowired
+    private ExamOrganizationRelationService examOrganizationRelationService;
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+    @Autowired
+    private EmployeeService employeeService;
+
+    @ApiOperation("分页查询")
+    @GetMapping(value = "/list")
+    public HttpResponseResult<PageInfo<ExamOrganizationRelationExtraDto>> getList(ExamOrganizationRelationQueryInfo queryInfo) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if(Objects.isNull(sysUser)){
+            return failed("请重新登录");
+        }
+        if(!sysUser.getIsSuperAdmin()&&Objects.isNull(queryInfo.getOrganId())){
+            Employee employee = employeeService.get(sysUser.getId());
+            if(Objects.nonNull(employee)){
+                queryInfo.setOrganId(employee.getOrganId());
+            }
+        }
+
+        return succeed(examOrganizationRelationService.queryExamOrgans(queryInfo));
+    }
+
+    @ApiOperation("获取子合作单位")
+    @GetMapping(value = "/getChildOrgans")
+    public HttpResponseResult<List<ExamOrganizationRelationExtraDto>> getChildOrgans(Long examId) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if(Objects.isNull(sysUser)){
+            return failed("请重新登录");
+        }
+        Integer organId=null;
+        Employee employee = employeeService.get(sysUser.getId());
+        if(Objects.nonNull(employee)){
+            organId=employee.getOrganId();
+        }
+
+        return succeed(examOrganizationRelationService.getChildOrgans(examId,organId));
+    }
+
+    @ApiOperation("添加合作单位")
+    @PostMapping(value = "/addExamOrganizations")
+    public HttpResponseResult addExamOrganizations(@RequestBody List<ExamOrganizationRelation> organizationRelations){
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if(Objects.isNull(sysUser)){
+            return failed("请重新登录");
+        }
+        Employee employee = employeeService.get(sysUser.getId());
+        if(Objects.isNull(employee)){
+            return failed("用户异常");
+        }
+        examOrganizationRelationService.addExamOrganizations(organizationRelations,employee.getOrganId());
+        return succeed();
+    }
+
+    @ApiOperation("更新考级项目与合作单位关联信息")
+    @PostMapping(value = "/updateExamOrganizationRelation")
+    public HttpResponseResult updateExamOrganizationRelation(@RequestBody ExamOrganizationRelation examOrganizationRelation){
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if(Objects.isNull(sysUser)){
+            return failed("请重新登录");
+        }
+        Employee employee = employeeService.get(sysUser.getId());
+        if(Objects.isNull(employee)){
+            return failed("用户异常");
+        }
+        examOrganizationRelationService.updateExamOrganizationRelation(examOrganizationRelation,employee.getOrganId());
+        return succeed();
+    }
+
+    @ApiOperation("发送考级报名链接")
+    @PostMapping(value = "/sendUrl")
+    public HttpResponseResult sendUrl(Integer examId){
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if(Objects.isNull(sysUser)){
+            return failed("请重新登录");
+        }
+        Employee employee = employeeService.get(sysUser.getId());
+        if(Objects.isNull(employee)){
+            return failed("用户异常");
+        }
+        examOrganizationRelationService.sendUrl(examId,employee.getOrganId());
+        return succeed();
+    }
+
+    @ApiOperation("删除")
+    @PostMapping(value = "/del")
+    public HttpResponseResult del(Long id){
+        examOrganizationRelationService.deleteExamOrgan(id);
+        return succeed();
+    }
+
+    @ApiOperation("获取本单位项目信息")
+    @GetMapping(value = "/getExamOrganStatistics")
+    public HttpResponseResult getExamOrganStatistics(Long examId){
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if(Objects.isNull(sysUser)){
+            return failed("请重新登录");
+        }
+        Integer organId=null;
+        if(!sysUser.getIsSuperAdmin()){
+            Employee employee = employeeService.get(sysUser.getId());
+            if(Objects.nonNull(employee)){
+                organId = employee.getOrganId();
+            }
+        }
+        return succeed(examOrganizationRelationService.getExamOrganStatistics(organId, examId));
+    }
+
+    @ApiOperation("获取未关联到考级项目的合作单位")
+    @GetMapping(value = "/queryUnRelatedOrgans")
+    public HttpResponseResult<Map<String, Object>> queryUnRelatedOrgans(ExamOrganizationRelationQueryInfo queryInfo){
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if(Objects.isNull(sysUser)){
+            return failed("请重新登录");
+        }
+        if(!sysUser.getIsSuperAdmin()&&Objects.isNull(queryInfo.getOrganId())){
+            Employee employee = employeeService.get(sysUser.getId());
+            if(Objects.nonNull(employee)){
+                queryInfo.setOrganId(employee.getOrganId());
+            }
+        }
+        return succeed(examOrganizationRelationService.queryUnRelatedOrgans(queryInfo));
+    }
+
+}

+ 156 - 0
edu-user/edu-user-biz/java/com/keao/edu/user/controller/ExamRegistrationController.java

@@ -0,0 +1,156 @@
+package com.keao.edu.user.controller;
+
+import com.keao.edu.auth.api.client.SysUserFeignService;
+import com.keao.edu.auth.api.entity.SysUser;
+import com.keao.edu.common.controller.BaseController;
+import com.keao.edu.common.entity.HttpResponseResult;
+import com.keao.edu.common.page.PageInfo;
+import com.keao.edu.common.page.QueryInfo;
+import com.keao.edu.thirdparty.ocr.Ocr;
+import com.keao.edu.user.dto.*;
+import com.keao.edu.user.entity.Employee;
+import com.keao.edu.user.entity.ExamRegistration;
+import com.keao.edu.user.enums.StudentRegistrationStatusEnum;
+import com.keao.edu.user.page.ApplyListQueryInfo;
+import com.keao.edu.user.page.ExamRecordQueryInfo;
+import com.keao.edu.user.page.ExamRegistrationQueryInfo;
+import com.keao.edu.user.service.EmployeeService;
+import com.keao.edu.user.service.ExamRegistrationService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.IOException;
+import java.util.Objects;
+
+/**
+ * @Author Joburgess
+ * @Date 2020.06.23
+ */
+@RestController
+@Api(tags = "学员报名服务")
+@RequestMapping(value = "examRegistration")
+public class ExamRegistrationController extends BaseController {
+
+    @Autowired
+    private ExamRegistrationService examRegistrationService;
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+    @Autowired
+    private EmployeeService employeeService;
+
+    @ApiOperation(value = "学员报名记录查询")
+    @GetMapping(value = "list")
+    @PreAuthorize("@pcs.hasPermissions('examRegistration/list')")
+    public HttpResponseResult<PageInfo<ExamRegistrationRoomDto>> list(ExamRegistrationQueryInfo queryInfo) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (!sysUser.getIsSuperAdmin() && Objects.isNull(queryInfo.getOrganId())) {
+            Employee employee = employeeService.get(sysUser.getId());
+            if(Objects.isNull(employee)){
+                return failed("用户信息异常");
+            }
+            queryInfo.setOrganId(employee.getOrganId());
+        }else if(sysUser.getIsSuperAdmin()){
+            queryInfo.setOrganId(null);
+        }
+        if(Objects.nonNull(queryInfo.getOrganizationId())){
+            queryInfo.setOrganId(queryInfo.getOrganizationId());
+        }
+        return succeed(examRegistrationService.queryExamRegistrationStudents(queryInfo));
+    }
+
+    @ApiOperation(value = "学生端学员报名记录查询")
+    @GetMapping(value = "applyList")
+    public HttpResponseResult<PageInfo<ExamRegistrationDto>> applyList(ApplyListQueryInfo queryInfo) {
+        return succeed(examRegistrationService.applyList(queryInfo));
+    }
+
+    @ApiOperation(value = "学生端考级曲库考试列表")
+    @GetMapping(value = "studentBaseExams")
+    public HttpResponseResult<PageInfo<StudentBaseExamsDto>> studentBaseExams(QueryInfo queryInfo) {
+        return succeed(examRegistrationService.studentBaseExams(queryInfo));
+    }
+
+    @ApiOperation(value = "学生端获取学员考试记录")
+    @GetMapping(value = "examList")
+    public HttpResponseResult<PageInfo<StudentExamListDto>> examList(ExamRecordQueryInfo queryInfo) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        queryInfo.setStudentId(sysUser.getId());
+        return succeed(examRegistrationService.examList(queryInfo));
+    }
+
+    @ApiOperation(value = "更新学员报名状态")
+    @PostMapping(value = "updateExamRegistrationStatus")
+    @PreAuthorize("@pcs.hasPermissions('examRegistration/updateExamREgistrationStatus')")
+    public HttpResponseResult updateExamRegistrationStatus(Long registId, StudentRegistrationStatusEnum status, String memo){
+        examRegistrationService.updateExamRegistrationStatus(registId, status, memo);
+        return succeed();
+    }
+
+    @ApiOperation(value = "修改学员报名信息")
+    @PostMapping(value = "update")
+    public HttpResponseResult update(@RequestBody ExamRegistration examRegistration) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if(Objects.isNull(sysUser)){
+            return failed("用户信息异常");
+        }
+        examRegistration.setStudentId(sysUser.getId());
+        examRegistrationService.updateExamRegistration(examRegistration);
+        return succeed();
+    }
+
+
+    @ApiOperation(value = "报名")
+    @PostMapping(value = "add")
+    public HttpResponseResult add(@RequestBody ExamRegistration examRegistration) throws Exception {
+        SysUser student = sysUserFeignService.queryUserInfo();
+        examRegistration.setStudentId(student.getId());
+        return succeed(examRegistrationService.addRegistration(examRegistration));
+    }
+
+    @ApiOperation(value = "获取招生统计信息")
+    @GetMapping(value = "getExamRegistrationStaticsInfo")
+    @PreAuthorize("@pcs.hasPermissions('examRegistration/getExamRegistrationStaticsInfo')")
+    public HttpResponseResult<ExamRegistrationStatisticsDto> getExamRegistrationStaticsInfo(Integer examId) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        Integer organId=null;
+        if(!sysUser.getIsSuperAdmin()){
+            Employee employee = employeeService.get(sysUser.getId());
+            if(Objects.isNull(employee)){
+                return failed("用户信息异常");
+            }
+            organId=employee.getOrganId();
+        }
+        return succeed(examRegistrationService.getExamRegistrationStaticsInfo(organId, examId));
+    }
+
+
+    @ApiOperation(value = "ocr")
+    @PostMapping(value = "ocr")
+    @ApiImplicitParams({@ApiImplicitParam(name = "file", value = "身份证图片", required = true, dataType = "file"),
+            @ApiImplicitParam(name = "idCardSide", value = "身份证(front-人像面 back-国徽面)", required = true, dataType = "String")})
+    public HttpResponseResult ocr(@RequestParam("file") MultipartFile file, String idCardSide) throws IOException {
+        return succeed(Ocr.idcard(file, idCardSide));
+    }
+
+
+    @ApiOperation(value = "获取报名信息(报名)")
+    @GetMapping(value = "getExamRegistration")
+    @ApiImplicitParams({@ApiImplicitParam(name = "examRegistrationId", value = "报名id", required = true, dataType = "int")})
+    public HttpResponseResult<ExamRegistrationDto> getExamRegistration(Long examRegistrationId) {
+        return succeed(examRegistrationService.getExamRegistration(examRegistrationId));
+    }
+
+    @ApiOperation(value = "重新支付(报名用)")
+    @PostMapping(value = "repay")
+    public HttpResponseResult repay(@RequestParam String orderNo) throws Exception {
+        SysUser student = sysUserFeignService.queryUserInfo();
+        return succeed(examRegistrationService.repay(student.getId(), orderNo));
+    }
+
+}

+ 71 - 0
edu-user/edu-user-biz/java/com/keao/edu/user/controller/ExamReviewController.java

@@ -0,0 +1,71 @@
+package com.keao.edu.user.controller;
+
+import com.keao.edu.auth.api.client.SysUserFeignService;
+import com.keao.edu.auth.api.entity.SysUser;
+import com.keao.edu.common.controller.BaseController;
+import com.keao.edu.common.entity.HttpResponseResult;
+import com.keao.edu.common.page.PageInfo;
+import com.keao.edu.common.page.QueryInfo;
+import com.keao.edu.user.dto.ExamReviewDto;
+import com.keao.edu.user.dto.ExamReviewRecordDto;
+import com.keao.edu.user.entity.Employee;
+import com.keao.edu.user.entity.ExamReview;
+import com.keao.edu.user.page.ExamReviewQueryInfo;
+import com.keao.edu.user.page.ExamReviewRecordQueryInfo;
+import com.keao.edu.user.service.EmployeeService;
+import com.keao.edu.user.service.ExamReviewService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiModelProperty;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Objects;
+
+@RestController
+@RequestMapping("examReview")
+@Api(tags = "评审服务")
+public class ExamReviewController extends BaseController {
+
+    @Autowired
+    private ExamReviewService examReviewService;
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+    @Autowired
+    private EmployeeService employeeService;
+
+    @ApiOperation("分页查询评审结果")
+    @GetMapping(value = "/list")
+    public HttpResponseResult<PageInfo<ExamReviewDto>> getList(ExamReviewQueryInfo queryInfo) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if(!sysUser.getIsSuperAdmin()){
+            Employee employee = employeeService.get(sysUser.getId());
+            if(Objects.nonNull(employee)){
+                queryInfo.setOrganId(employee.getOrganId());
+            }
+        }
+        return succeed(examReviewService.findExamResult(queryInfo));
+    }
+
+    @ApiOperation("监考页面分页查询评审结果")
+    @GetMapping(value = "/queryExamReviewRecordList")
+    public HttpResponseResult<PageInfo<ExamReviewRecordDto>> queryExamReviewRecordList(ExamReviewRecordQueryInfo queryInfo) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        queryInfo.setTeacherId(sysUser.getId());
+        return succeed(examReviewService.queryExamReviewRecordList(queryInfo));
+    }
+
+    @ApiOperation("修改评审结果")
+    @PostMapping(value = "/update")
+    public HttpResponseResult update(ExamReview examReview){
+        examReviewService.update(examReview);
+        return succeed();
+    }
+
+    @ApiOperation("老师评审")
+    @PostMapping(value = "/createExamReview")
+    public HttpResponseResult createExamReview(ExamReview examReview){
+        examReviewService.add(examReview);
+        return succeed();
+    }
+}

+ 174 - 0
edu-user/edu-user-biz/java/com/keao/edu/user/controller/ExamRoomController.java

@@ -0,0 +1,174 @@
+package com.keao.edu.user.controller;
+
+import com.keao.edu.auth.api.client.SysUserFeignService;
+import com.keao.edu.auth.api.entity.SysUser;
+import com.keao.edu.common.controller.BaseController;
+import com.keao.edu.common.entity.HttpResponseResult;
+import com.keao.edu.common.page.PageInfo;
+import com.keao.edu.user.api.entity.ExamRoom;
+import com.keao.edu.user.dto.ExamRoomDto;
+import com.keao.edu.user.dto.ExamRoomListDto;
+import com.keao.edu.user.dto.ExamRoomStatisticsDto;
+import com.keao.edu.user.entity.Employee;
+import com.keao.edu.user.entity.Teacher;
+import com.keao.edu.user.page.ExamRoomListQueryInfo;
+import com.keao.edu.user.page.ExamRoomQueryInfo;
+import com.keao.edu.user.service.EmployeeService;
+import com.keao.edu.user.service.ExamRoomService;
+import com.keao.edu.user.service.TeacherService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Objects;
+
+@RestController
+@RequestMapping("examRoom")
+@Api(tags = "考场服务")
+public class ExamRoomController extends BaseController {
+
+    @Autowired
+    private ExamRoomService examRoomService;
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+    @Autowired
+    private EmployeeService employeeService;
+    @Autowired
+    private TeacherService teacherService;
+
+    @ApiOperation("分页查询监考列表")
+    @GetMapping(value = "/list")
+    public HttpResponseResult<PageInfo<ExamRoomListDto>> getList(ExamRoomListQueryInfo queryInfo) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if(!sysUser.getIsSuperAdmin() && Objects.isNull(queryInfo.getOrganId())){
+            Teacher teacher = teacherService.get(sysUser.getId());
+            if(Objects.isNull(teacher)){
+                return failed("用户信息异常");
+            }
+            queryInfo.setOrganId(teacher.getOrganId());
+        }
+        return succeed(examRoomService.queryExamRoomPage(queryInfo));
+    }
+
+    @ApiOperation("发送考试安排")
+    @GetMapping(value = "/sendExamPlan")
+    public HttpResponseResult sendExamPlan(Integer examId){
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        Employee employee = employeeService.get(sysUser.getId());
+        if(Objects.isNull(employee)){
+            return failed("用户信息异常");
+        }
+        examRoomService.sendExamPlan(employee.getOrganId(), examId, sysUser.getId());
+        return succeed();
+    }
+
+    @ApiOperation("获取考级项目教室列表")
+    @GetMapping(value = "/queryExamRooms")
+    public HttpResponseResult<PageInfo<ExamRoomDto>> queryExamRooms(ExamRoomQueryInfo queryInfo) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if(!sysUser.getIsSuperAdmin()&&Objects.isNull(queryInfo.getOrganId())){
+            Employee employee = employeeService.get(sysUser.getId());
+            if(Objects.isNull(employee)){
+                return failed("用户信息异常");
+            }
+            queryInfo.setOrganId(employee.getOrganId());
+        }
+        return succeed(examRoomService.queryExamRooms(queryInfo));
+    }
+
+    @ApiOperation("更新考场")
+    @PostMapping(value = "/update")
+    public HttpResponseResult update(@RequestBody ExamRoom examRoom){
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        Employee employee = employeeService.get(sysUser.getId());
+        if(Objects.isNull(employee)){
+            return failed("用户信息异常");
+        }
+        examRoom.setOrganId(employee.getOrganId());
+        examRoomService.update(examRoom);
+        return succeed();
+    }
+
+    @ApiOperation("创建教室")
+    @PostMapping(value = "/createExamRoom")
+    public HttpResponseResult createExamRoom(@RequestBody ExamRoom examRoom){
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        Employee employee = employeeService.get(sysUser.getId());
+        if(Objects.isNull(employee)){
+            return failed("用户信息异常");
+        }
+        examRoom.setOrganId(employee.getOrganId());
+        examRoomService.createExamRoom(examRoom);
+        return succeed();
+    }
+
+    @ApiOperation("更新教室信息")
+    @PostMapping(value = "/updateExamRoom")
+    public HttpResponseResult<ExamRoom> updateExamRoom(@RequestBody ExamRoom examRoom){
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        Employee employee = employeeService.get(sysUser.getId());
+        if(Objects.isNull(employee)){
+            return failed("用户信息异常");
+        }
+        examRoom.setOrganId(employee.getOrganId());
+        return succeed(examRoomService.updateExamRoom(examRoom));
+    }
+
+    @ApiOperation("教室状态变更(关闭教室,开启教室)")
+    @PostMapping(value = "/changeExamRoom")
+    public HttpResponseResult changeExamRoom(Long examRoomId,Integer openFlag){
+        examRoomService.changeExamRoom(examRoomId,openFlag);
+        return succeed();
+    }
+
+    @ApiOperation("删除教室")
+    @PostMapping(value = "/deleteExamRooms")
+    public HttpResponseResult deleteExamRooms(String examRoomIds){
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        Integer organId=null;
+        if(!sysUser.getIsSuperAdmin()){
+            Employee employee = employeeService.get(sysUser.getId());
+            if(Objects.isNull(employee)){
+                return failed("用户信息异常");
+            }
+            organId=employee.getOrganId();
+        }
+        examRoomService.deleteExamRooms(organId,examRoomIds);
+        return succeed();
+    }
+
+    @ApiOperation("获取教室")
+    @GetMapping(value = "/get")
+    public HttpResponseResult<ExamRoom> getExamRoom(Long id){
+        return succeed(examRoomService.get(id));
+    }
+
+    @ApiOperation("获取教室")
+    @PostMapping(value = "/api/get")
+    public ExamRoom getApiExamRoom(Long id){
+        return examRoomService.get(id);
+    }
+
+    @ApiOperation("获取考场统计信息")
+    @GetMapping(value = "/getExamRoomStatisticsInfo")
+    public HttpResponseResult<ExamRoomStatisticsDto> getExamRoomStatisticsInfo(Long examId){
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        Integer organId=null;
+        if(!sysUser.getIsSuperAdmin()){
+            Employee employee = employeeService.get(sysUser.getId());
+            if(Objects.isNull(employee)){
+                return failed("用户信息异常");
+            }
+            organId=employee.getOrganId();
+        }
+        return succeed(examRoomService.getExamRoomStatisticsInfo(organId, examId));
+    }
+
+    @ApiOperation("获取报名学员可加入教室列表")
+    @GetMapping(value = "/getStudentEnableJoinRoom")
+    public HttpResponseResult<List<ExamRoom>> getStudentEnableJoinRoom(Long registId){
+        return succeed(examRoomService.getStudentEnableJoinRoom(registId));
+    }
+}

+ 176 - 0
edu-user/edu-user-biz/java/com/keao/edu/user/controller/ExamRoomStudentRelationController.java

@@ -0,0 +1,176 @@
+package com.keao.edu.user.controller;
+
+import com.keao.edu.auth.api.client.SysUserFeignService;
+import com.keao.edu.auth.api.entity.SysUser;
+import com.keao.edu.common.controller.BaseController;
+import com.keao.edu.common.entity.HttpResponseResult;
+import com.keao.edu.common.page.PageInfo;
+import com.keao.edu.im.api.entity.PublishMessageDto;
+import com.keao.edu.user.api.entity.ExamRoomStudentRelation;
+import com.keao.edu.user.dto.ExamRoomStudentRelationDto;
+import com.keao.edu.user.dto.StuRecordDetailDto;
+import com.keao.edu.user.entity.Employee;
+import com.keao.edu.user.page.ExamRoomStudentRelationQueryInfo;
+import com.keao.edu.user.service.EmployeeService;
+import com.keao.edu.user.service.ExamRoomStudentRelationService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Objects;
+
+@RestController
+@RequestMapping("examRoomStudentRelation")
+@Api(tags = "考场与学生关联服务")
+public class ExamRoomStudentRelationController extends BaseController {
+
+    @Autowired
+    private ExamRoomStudentRelationService examRoomStudentRelationService;
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+    @Autowired
+    private EmployeeService employeeService;
+
+    /*@ApiOperation("开启/关闭教室")
+    @GetMapping(value = "/switchClassRoom")
+    public HttpResponseResult switchClassRoom(Integer openFlag,Integer examinationBasicId,Integer studentId) {
+        examRoomStudentRelationService.switchClassRoom(openFlag,examinationBasicId,studentId);
+        return succeed();
+    }*/
+
+    @ApiOperation("签到")
+    @PostMapping(value = "/signIn")
+    public HttpResponseResult signIn(Long examRegistrationId) {
+        examRoomStudentRelationService.signIn(examRegistrationId);
+        return succeed();
+    }
+
+    @ApiOperation("下一位")
+    @PostMapping(value = "/nextBit")
+    public HttpResponseResult nextBit(Integer examStatus,Long roomId) {
+        examRoomStudentRelationService.nextBit(examStatus,roomId);
+        return succeed();
+    }
+
+    @ApiOperation("开始考试")
+    @PostMapping(value = "/actionExam")
+    public HttpResponseResult actionExam(Long roomId) {
+        examRoomStudentRelationService.actionExam(roomId);
+        return succeed();
+    }
+
+    @ApiOperation("监考端选择去录播")
+    @PostMapping(value = "/webRecorded")
+    public HttpResponseResult webRecorded(Long roomId) {
+        examRoomStudentRelationService.recorded(roomId);
+        return succeed();
+    }
+
+    /*@ApiOperation("学生选择去录播")
+    @PostMapping(value = "/stuRecorded")
+    public HttpResponseResult<NeedCheckingDetailDto> stuRecorded(Long examRegistrationId) {
+        return succeed(examRoomStudentRelationService.stuRecorded(examRegistrationId));
+    }*/
+
+    @ApiOperation("学生端录播详情页面")
+    @GetMapping(value = "/stuRecordDetail")
+    public HttpResponseResult<StuRecordDetailDto> stuRecordDetail(Long examRegistrationId) {
+        return succeed(examRoomStudentRelationService.stuRecordDetail(examRegistrationId));
+    }
+
+    @ApiOperation("学生端完成录播")
+    @PostMapping(value = "/stuEndRecord")
+    public HttpResponseResult stuEndRecord(Long examRegistrationId,String videoUrl) {
+        examRoomStudentRelationService.stuEndRecord(examRegistrationId,videoUrl);
+        return succeed();
+    }
+
+    /*@ApiOperation("学生选择重新排队")
+    @PostMapping(value = "/againQueue")
+    public HttpResponseResult<NeedCheckingDetailDto> againQueue(Long examRegistrationId) {
+        return succeed(examRoomStudentRelationService.againQueue(examRegistrationId));
+    }*/
+
+    @ApiOperation("获取后台考场待考队列")
+    @PostMapping(value = "/queryNeedCheckingList")
+    public HttpResponseResult queryNeedCheckingList(Long roomId) {
+        return succeed(examRoomStudentRelationService.queryNeedCheckingList(roomId));
+    }
+
+    @ApiOperation("获取推送消息内容")
+    @PostMapping(value = "api/getPublishMessage")
+    public PublishMessageDto getPublishMessage(Long examRegistrationId) {
+        return examRoomStudentRelationService.getPublishMessage(examRegistrationId);
+    }
+
+    @ApiOperation("获取教室学员关联")
+    @PostMapping(value = "api/getExamRoomStudentRelation")
+    public ExamRoomStudentRelation getExamRoomStudentRelation(Long registrationId) {
+        return examRoomStudentRelationService.getExamRoomStudentRelation(registrationId);
+    }
+
+    @ApiOperation("给教室分配学员")
+    @PostMapping(value = "/addStudentForRoom")
+    public HttpResponseResult addStudentForRoom(Long examRoomId, String registIds){
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        Integer organId=null;
+        if(!sysUser.getIsSuperAdmin()){
+            Employee employee = employeeService.get(sysUser.getId());
+            if(Objects.isNull(employee)){
+                return failed("用户信息异常");
+            }
+            organId=employee.getOrganId();
+        }
+        examRoomStudentRelationService.addStudentForRoom(examRoomId, registIds, organId);
+        return succeed();
+    }
+
+    @ApiOperation("更换学员考场")
+    @PostMapping(value = "/changeStudentExamRoom")
+    public HttpResponseResult changeStudentExamRoom(Long registId, Long examRoomId){
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        Integer organId=null;
+        if(!sysUser.getIsSuperAdmin()){
+            Employee employee = employeeService.get(sysUser.getId());
+            if(Objects.isNull(employee)){
+                return failed("用户信息异常");
+            }
+            organId=employee.getOrganId();
+        }
+        examRoomStudentRelationService.changeStudentExamRoom(registId, examRoomId, organId);
+        return succeed();
+    }
+
+    @ApiOperation("获取教室学员")
+    @GetMapping(value = "/findExamRoomStudents")
+    public HttpResponseResult<PageInfo<ExamRoomStudentRelationDto>> findExamRoomStudents(ExamRoomStudentRelationQueryInfo queryInfo){
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if(!sysUser.getIsSuperAdmin()){
+            Employee employee = employeeService.get(sysUser.getId());
+            if(Objects.nonNull(employee)){
+                queryInfo.setOrganId(employee.getOrganId());
+            }
+        }
+        return succeed(examRoomStudentRelationService.findExamRoomStudents(queryInfo));
+    }
+
+    @ApiOperation("删除指定教室学员")
+    @PostMapping(value = "/deleteStudentFromRoom")
+    public HttpResponseResult deleteStudentFromRoom(Long examRoomId, String registIds){
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        Integer organId=null;
+        if(!sysUser.getIsSuperAdmin()){
+            Employee employee = employeeService.get(sysUser.getId());
+            if(Objects.isNull(employee)){
+                return failed("用户信息异常");
+            }
+            organId=employee.getOrganId();
+        }
+        examRoomStudentRelationService.deleteStudentFromRoom(examRoomId, registIds, organId);
+        return succeed();
+    }
+}

+ 77 - 0
edu-user/edu-user-biz/java/com/keao/edu/user/controller/ExamSongController.java

@@ -0,0 +1,77 @@
+package com.keao.edu.user.controller;
+
+import com.keao.edu.common.controller.BaseController;
+import com.keao.edu.common.entity.HttpResponseResult;
+import com.keao.edu.common.page.PageInfo;
+import com.keao.edu.common.tenant.TenantContextHolder;
+import com.keao.edu.user.entity.ExamSong;
+import com.keao.edu.user.page.ExamSongQueryInfo;
+import com.keao.edu.user.service.ExamSongService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @Author Joburgess
+ * @Date 2020.06.16
+ */
+@RestController
+@RequestMapping("examSong")
+@Api(tags = "曲库服务")
+public class ExamSongController extends BaseController {
+
+    @Autowired
+    private ExamSongService examSongService;
+
+    @ApiOperation("分页查询")
+    @GetMapping(value = "/list")
+    public HttpResponseResult<PageInfo<ExamSong>> getList(ExamSongQueryInfo queryInfo) {
+        return succeed(examSongService.queryPage(queryInfo));
+    }
+
+    @ApiOperation("学生端分页查询考级曲库")
+    @GetMapping(value = "/queryPage")
+    public HttpResponseResult<PageInfo<ExamSong>> queryPage(ExamSongQueryInfo queryInfo) {
+        return succeed(examSongService.querySongPage(queryInfo));
+    }
+
+    @ApiOperation("查询曲库详情")
+    @ApiImplicitParam(name = "id", value = "机构ID", required = true, dataType = "Integer", paramType = "path")
+    @GetMapping(value = "/query")
+    public HttpResponseResult<ExamSong> query(Integer id) {
+        return succeed(examSongService.get(id));
+    }
+
+    @ApiOperation("新增曲库")
+    @PostMapping(value = "/add")
+    public HttpResponseResult add(@RequestBody ExamSong examSong) {
+        examSong.setTenantId(TenantContextHolder.getTenantId());
+        examSongService.insert(examSong);
+        return succeed();
+    }
+
+    @ApiOperation("更新曲库")
+    @PostMapping(value = "/update")
+    public HttpResponseResult update(@RequestBody ExamSong examSong) {
+        examSong.setUpdateTime(new Date());
+        examSongService.update(examSong);
+        return succeed();
+    }
+
+    @ApiOperation("删除曲库")
+    @PostMapping(value = "/del")
+    public HttpResponseResult add(Integer id) {
+        return succeed(examSongService.delete(id));
+    }
+
+    @ApiOperation("根据专业获取曲目")
+    @GetMapping(value = "/getWithSubject")
+    public HttpResponseResult<List<ExamSong>> getWithSubject(Integer subjectId){
+        return succeed(examSongService.getWithSubject(subjectId));
+    }
+}

+ 39 - 0
edu-user/edu-user-biz/java/com/keao/edu/user/controller/ExamSubjectController.java

@@ -0,0 +1,39 @@
+package com.keao.edu.user.controller;
+
+import com.keao.edu.common.controller.BaseController;
+import com.keao.edu.common.entity.HttpResponseResult;
+import com.keao.edu.common.tenant.TenantContextHolder;
+import com.keao.edu.user.dto.ExamSubjectDto;
+import com.keao.edu.user.entity.ExamSong;
+import com.keao.edu.user.entity.Subject;
+import com.keao.edu.user.service.ExamSubjectService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiOperation;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@RestController
+@RequestMapping("examSubject")
+@Api(tags = "考级内容服务")
+public class ExamSubjectController extends BaseController {
+
+    @Autowired
+    private ExamSubjectService examSubjectService;
+
+    @ApiOperation("获取考试项目专业")
+    @ApiImplicitParam(name = "ExamId", value = "考试项目id", required = true, dataType = "Integer")
+    @GetMapping(value = "/getExamSubjects")
+    public HttpResponseResult<List<ExamSubjectDto>> getExamSubjects(Integer examId) {
+        return succeed(examSubjectService.getExamSubjects(examId));
+    }
+
+    @ApiOperation("获取与考级项目相关的专业")
+    @GetMapping(value = "/getUnRelatedWithExamSubjects")
+    public HttpResponseResult<List<Subject>> getUnRelatedWithExamSubjects(Integer examId){
+        return succeed(examSubjectService.getUnRelatedWithExamSubjects(Integer.valueOf(TenantContextHolder.getTenantId()), examId));
+    }
+}

+ 78 - 0
edu-user/edu-user-biz/java/com/keao/edu/user/controller/ExamSubjectSongController.java

@@ -0,0 +1,78 @@
+package com.keao.edu.user.controller;
+
+import com.keao.edu.common.controller.BaseController;
+import com.keao.edu.common.entity.HttpResponseResult;
+import com.keao.edu.common.page.PageInfo;
+import com.keao.edu.user.dto.ExamSubjectSongDto;
+import com.keao.edu.user.entity.ExamSong;
+import com.keao.edu.user.entity.ExamSubjectSong;
+import com.keao.edu.user.page.ExamSubjectSongQueryInfo;
+import com.keao.edu.user.service.ExamSubjectSongService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * @Author Joburgess
+ * @Date 2020.06.18
+ */
+@RestController
+@RequestMapping("examSubjectSong")
+@Api(tags = "考级内容服务")
+public class ExamSubjectSongController extends BaseController {
+
+    @Autowired
+    private ExamSubjectSongService examSubjectSongService;
+
+    @ApiOperation("分页查询")
+    @GetMapping(value = "/list")
+    public HttpResponseResult<PageInfo<ExamSubjectSongDto>> getList(ExamSubjectSongQueryInfo queryInfo) {
+        return succeed(examSubjectSongService.queryExamSubjectSongs(queryInfo));
+    }
+
+    @ApiOperation("添加考试内容")
+    @PostMapping(value = "/addExamSubjects")
+    public HttpResponseResult addExamSubjects(@RequestBody List<ExamSubjectSong> examSubjectSongs) {
+        examSubjectSongService.addExamSubjects(examSubjectSongs);
+        return succeed();
+    }
+
+    @ApiOperation("更新考试内容")
+    @PostMapping(value = "/update")
+    public HttpResponseResult update(@RequestBody ExamSubjectSong examSubjectSong) {
+        examSubjectSongService.update(examSubjectSong);
+        return succeed();
+    }
+
+    @ApiOperation(value = "删除考试内容")
+    @PostMapping(value = "del")
+    public HttpResponseResult del(Long id) {
+        examSubjectSongService.deleteExamSubjectSong(id);
+        return succeed();
+    }
+
+    @ApiOperation("获取考级专业相应级别列表-报名")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "examinationBasicId", value = "项目id", required = true, dataType = "Integer"),
+            @ApiImplicitParam(name = "examSubjectId", value = "考试项目专业id", required = true, dataType = "Integer")})
+    @GetMapping(value = "/getExamSubjectLevel")
+    public HttpResponseResult<List<ExamSubjectSong>> getExamSubjectLevel(Integer examinationBasicId, Long examSubjectId) {
+        return succeed(examSubjectSongService.getExamSubjectLevels(examinationBasicId, examSubjectId));
+    }
+
+    @ApiOperation("获取考级专业相应级别的曲目-报名")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "examinationBasicId", value = "项目id", required = true, dataType = "Integer"),
+            @ApiImplicitParam(name = "examSubjectId", value = "考试项目专业id", required = true, dataType = "Integer"),
+            @ApiImplicitParam(name = "level", value = "级别", required = true, dataType = "Integer")})
+    @GetMapping(value = "/getExamSubjectSong")
+    public HttpResponseResult<List<ExamSong>> getExamSubjectSong(Integer examinationBasicId, Long examSubjectId, Integer level) {
+        return succeed(examSubjectSongService.getExamSubjectSong(examinationBasicId, examSubjectId, level));
+    }
+
+}

+ 93 - 0
edu-user/edu-user-biz/java/com/keao/edu/user/controller/ExamTeacherSalaryController.java

@@ -0,0 +1,93 @@
+package com.keao.edu.user.controller;
+
+import com.keao.edu.common.controller.BaseController;
+import com.keao.edu.common.entity.HttpResponseResult;
+import com.keao.edu.common.page.PageInfo;
+import com.keao.edu.user.dto.BaseUserInfoDto;
+import com.keao.edu.user.dto.ExamTeacherSalaryDto;
+import com.keao.edu.user.dto.ExamTeacherSalaryStaticsInfo;
+import com.keao.edu.user.dto.TeacherDto;
+import com.keao.edu.user.entity.ExamTeacherSalary;
+import com.keao.edu.user.page.ExamTeacherSalaryQueryInfo;
+import com.keao.edu.user.service.ExamTeacherSalaryService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @Author Joburgess
+ * @Date 2020.07.01
+ */
+@RestController
+@RequestMapping("examTeacherSalary")
+@Api(tags = "考级项目教师服务")
+public class ExamTeacherSalaryController extends BaseController {
+
+    @Autowired
+    private ExamTeacherSalaryService examTeacherSalaryService;
+
+    @ApiOperation("分页查询")
+    @GetMapping(value = "/list")
+    public HttpResponseResult<PageInfo<ExamTeacherSalaryDto>> getList(ExamTeacherSalaryQueryInfo queryInfo) {
+        return succeed(examTeacherSalaryService.queryExamTeacherSalary(queryInfo));
+    }
+
+    @ApiOperation("新增")
+    @PostMapping(value = "/add")
+    public HttpResponseResult add(ExamTeacherSalary examTeacherSalary) {
+        examTeacherSalary.setTotalInvigilationNum(0);
+        examTeacherSalary.setTotalInvigilationStudentNum(0);
+        examTeacherSalary.setTotalSettlementCost(BigDecimal.ZERO);
+        examTeacherSalaryService.insert(examTeacherSalary);
+        return succeed();
+    }
+
+    @ApiOperation("新增考级教师")
+    @PostMapping(value = "/addExamTeacherSalary")
+    public HttpResponseResult addExamTeacherSalary(Long examId, String teacherIdsStr) {
+        examTeacherSalaryService.addExamTeacherSalary(examId, teacherIdsStr);
+        return succeed();
+    }
+
+    @ApiOperation("获取指定考级项目可排考教师")
+    @GetMapping(value = "/getExamTeachers")
+    public HttpResponseResult<List<BaseUserInfoDto>> getExamTeachers(Integer examId){
+        return succeed(examTeacherSalaryService.getExamTeachers(examId));
+    }
+
+    @ApiOperation("更新")
+    @PostMapping(value = "/update")
+    public HttpResponseResult update(ExamTeacherSalary examTeacherSalary) {
+        examTeacherSalary.setUpdateTime(new Date());
+        examTeacherSalaryService.updateExamTeacherSalary(examTeacherSalary);
+        return succeed();
+    }
+
+    @ApiOperation("删除")
+    @PostMapping(value = "/del")
+    public HttpResponseResult add(Long id) {
+        examTeacherSalaryService.deleteExamTeacherSalary(id);
+        return succeed();
+    }
+
+    @ApiOperation("获取与考级项目无关的教师")
+    @GetMapping(value = "/getUnRelatedWithExamTeachers")
+    public HttpResponseResult<PageInfo<TeacherDto>> getUnRelatedWithExamTeachers(ExamTeacherSalaryQueryInfo queryInfo){
+        return succeed(examTeacherSalaryService.getUnRelatedWithExamTeachers(queryInfo));
+    }
+
+    @ApiOperation("获取考级项目关联教师统计信息")
+    @GetMapping(value = "/getExamTeacherSalaryStaticsInfo")
+    public HttpResponseResult<ExamTeacherSalaryStaticsInfo> getExamTeacherSalaryStaticsInfo(Integer examId){
+        return succeed(examTeacherSalaryService.getExamTeacherSalaryStaticsInfo(examId));
+    }
+
+}

+ 108 - 0
edu-user/edu-user-biz/java/com/keao/edu/user/controller/ExaminationBasicController.java

@@ -0,0 +1,108 @@
+package com.keao.edu.user.controller;
+
+import com.keao.edu.auth.api.client.SysUserFeignService;
+import com.keao.edu.auth.api.entity.SysUser;
+import com.keao.edu.common.controller.BaseController;
+import com.keao.edu.common.entity.HttpResponseResult;
+import com.keao.edu.common.page.PageInfo;
+import com.keao.edu.user.dto.ExaminationBasicDto;
+import com.keao.edu.user.entity.Employee;
+import com.keao.edu.user.entity.ExaminationBasic;
+import com.keao.edu.user.enums.ExamStatusEnum;
+import com.keao.edu.user.page.ExaminationQueryInfo;
+import com.keao.edu.user.service.EmployeeService;
+import com.keao.edu.user.service.ExaminationBasicService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Objects;
+
+/**
+ * @Author Joburgess
+ * @Date 2020.06.18
+ */
+@RestController
+@RequestMapping("examinationBasic")
+@Api(tags = "考级项目服务")
+public class ExaminationBasicController extends BaseController {
+
+    @Autowired
+    private ExaminationBasicService examinationBasicService;
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+    @Autowired
+    private EmployeeService employeeService;
+
+    @ApiOperation("查询指定考级项目")
+    @GetMapping(value = "/getExaminationBasic")
+    public HttpResponseResult<ExaminationBasicDto> getExaminationBasic(Integer examId) {
+        return succeed(examinationBasicService.getExaminationBasic(examId));
+    }
+
+    @ApiOperation("分页查询")
+    @GetMapping(value = "/list")
+    public HttpResponseResult<PageInfo<ExaminationBasicDto>> getList(ExaminationQueryInfo queryInfo) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if(!sysUser.getIsSuperAdmin()){
+            Employee employee = employeeService.get(sysUser.getId());
+            if(Objects.isNull(employee)){
+                return failed("用户信息异常");
+            }
+            queryInfo.setOrganId(employee.getOrganId());
+        }
+        return succeed(examinationBasicService.findExaminationBasics(queryInfo));
+    }
+
+    @ApiOperation("创建考级项目")
+    @PostMapping(value = "/addExaminationBasic")
+    public HttpResponseResult<ExaminationBasic> addExaminationBasic(@RequestBody ExaminationBasic examinationBasic){
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        Employee employee = employeeService.get(sysUser.getId());
+        if(Objects.isNull(employee)){
+            return failed("用户信息异常");
+        }
+        examinationBasic.setCreatorId(sysUser.getId());
+        examinationBasic.setOrganId(employee.getOrganId());
+        return succeed(examinationBasicService.addExaminationBasic(examinationBasic));
+    }
+
+    @ApiOperation("更新考级项目")
+    @PostMapping(value = "/update")
+    public HttpResponseResult update(@RequestBody ExaminationBasic examinationBasic){
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        examinationBasicService.updateExam(examinationBasic,sysUser.getId());
+        return succeed();
+    }
+
+    @ApiOperation("更新考级项目状态")
+    @PostMapping(value = "/updateExamBasicStatus")
+    public HttpResponseResult updateExamBasicStatus(Long examId, ExamStatusEnum statusEnum){
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        examinationBasicService.updateExamBasicStatus(examId, statusEnum, sysUser.getId());
+        return succeed();
+    }
+
+    @ApiOperation("关闭考级项目")
+    @PostMapping(value = "/closeExam")
+    public HttpResponseResult closeExam(Integer examId, String reason){
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        Integer organId = null;
+        if(!sysUser.getIsSuperAdmin()){
+            Employee employee = employeeService.get(sysUser.getId());
+            if(Objects.isNull(employee)){
+                return failed("用户信息异常");
+            }
+            organId = employee.getOrganId();
+        }
+        examinationBasicService.closeExam(organId, examId, reason);
+        return succeed();
+    }
+
+    @ApiOperation("获取考级项目信息")
+    @PostMapping(value = "/getInfo")
+    public HttpResponseResult<ExaminationBasic> getInfo(Integer examId){
+        return succeed(examinationBasicService.getInfo(examId));
+    }
+}

+ 64 - 0
edu-user/edu-user-biz/java/com/keao/edu/user/controller/MusicTheoryController.java

@@ -0,0 +1,64 @@
+package com.keao.edu.user.controller;
+
+import com.keao.edu.common.controller.BaseController;
+import com.keao.edu.common.entity.HttpResponseResult;
+import com.keao.edu.common.page.PageInfo;
+import com.keao.edu.common.page.QueryInfo;
+import com.keao.edu.common.tenant.TenantContextHolder;
+import com.keao.edu.user.entity.MusicTheory;
+import com.keao.edu.user.service.MusicTheoryService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * @Author wangyp
+ * @Date 2020/6/27 9:17
+ * @Description TODO
+ */
+@RestController
+@RequestMapping("musicTheory")
+@Api(tags = "乐理信息")
+public class MusicTheoryController extends BaseController {
+
+    @Autowired
+    private MusicTheoryService musicTheoryService;
+
+    @ApiOperation("分页查询")
+    @GetMapping(value = "/list")
+    public HttpResponseResult<PageInfo<MusicTheory>> getList(QueryInfo queryInfo) {
+        return succeed(musicTheoryService.queryPage(queryInfo));
+    }
+
+    @ApiOperation("查询乐理详情")
+    @ApiImplicitParam(name = "id", value = "机构ID", required = true, dataType = "Integer", paramType = "path")
+    @GetMapping(value = "/query")
+    public HttpResponseResult<MusicTheory> query(Integer id) {
+        return succeed(musicTheoryService.get(id));
+    }
+
+    @ApiOperation("新增乐理")
+    @PostMapping(value = "/add")
+    public HttpResponseResult add(MusicTheory musicTheory) {
+        musicTheory.setTenantId(TenantContextHolder.getTenantId());
+        musicTheoryService.addMusicTheory(musicTheory);
+        return succeed();
+    }
+
+    @ApiOperation("更新乐理")
+    @PostMapping(value = "/update")
+    public HttpResponseResult update(MusicTheory musicTheory) {
+        musicTheoryService.update(musicTheory);
+        return succeed();
+    }
+
+    @ApiOperation("删除乐理")
+    @PostMapping(value = "/del/{id}")
+    public HttpResponseResult add(@PathVariable("id") Integer id) {
+        return succeed(musicTheoryService.delete(id));
+    }
+
+
+}

+ 86 - 0
edu-user/edu-user-biz/java/com/keao/edu/user/controller/OrganizationController.java

@@ -0,0 +1,86 @@
+package com.keao.edu.user.controller;
+
+
+import com.keao.edu.auth.api.client.SysUserFeignService;
+import com.keao.edu.auth.api.entity.SysUser;
+import com.keao.edu.common.controller.BaseController;
+import com.keao.edu.common.entity.HttpResponseResult;
+import com.keao.edu.common.page.PageInfo;
+import com.keao.edu.common.tenant.TenantContextHolder;
+import com.keao.edu.user.entity.Organization;
+import com.keao.edu.user.page.OrganizationQueryInfo;
+import com.keao.edu.user.service.OrganizationService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 合作单位服务
+ */
+@RestController
+@Api(tags = "合作单位服务")
+@RequestMapping(value = "organization")
+public class OrganizationController extends BaseController {
+
+	@Autowired
+	private OrganizationService organizationService;
+	@Autowired
+	private SysUserFeignService sysUserFeignService;
+
+	@ApiOperation(value = "合作单位列表")
+	@GetMapping(value = "list")
+    @PreAuthorize("@pcs.hasPermissions('organization/list')")
+	public HttpResponseResult<PageInfo<Organization>> configList(OrganizationQueryInfo queryInfo) {
+		SysUser sysUser = sysUserFeignService.queryUserInfo();
+		queryInfo.setParentId(sysUser.getId());
+		if(queryInfo.getOrganId() != null){
+			queryInfo.setOrganIds(organizationService.getChildOrganIds(queryInfo.getOrganId(),false));
+		}
+		return succeed(organizationService.queryPage(queryInfo));
+	}
+
+	@ApiOperation(value = "修改合作单位")
+	@PostMapping(value = "update")
+    @PreAuthorize("@pcs.hasPermissions('organization/update')")
+	public HttpResponseResult updateOrganization(@RequestBody Organization organization) {
+		organizationService.updateOrganization(organization);
+		return succeed();
+	}
+
+	@ApiOperation(value = "新增合作单位")
+	@PostMapping(value = "add")
+    @PreAuthorize("@pcs.hasPermissions('organization/add')")
+	public HttpResponseResult addConfig(@RequestBody Organization organization) {
+		organization.setTenantId(TenantContextHolder.getTenantId());
+		organizationService.add(organization);
+		return succeed();
+	}
+
+	@ApiOperation(value = "查询合作单位")
+	@GetMapping(value = "get")
+    @PreAuthorize("@pcs.hasPermissions('organization/get')")
+	public HttpResponseResult<Organization> getConfig(Integer id) {
+		return succeed(organizationService.getOrganization(id));
+	}
+
+	@ApiOperation(value = "删除合作单位")
+	@PostMapping(value = "del")
+    @PreAuthorize("@pcs.hasPermissions('organization/del')")
+	public HttpResponseResult del(Integer id) {
+		organizationService.del(id);
+		return succeed();
+	}
+
+	@ApiOperation(value = "获取当前分部及其所有子合作单位")
+	@GetMapping(value = "getChildOrgans")
+	@PreAuthorize("@pcs.hasPermissions('organization/getChildOrgans')")
+	public HttpResponseResult<List<Organization>> getChildOrgans(Integer includeSelf){
+		SysUser sysUser = sysUserFeignService.queryUserInfo();
+		Organization organization = organizationService.findByUserId(sysUser.getId());
+		return succeed(organizationService.getChildOrgans(organization.getId(), includeSelf==1));
+	}
+}

+ 38 - 0
edu-user/edu-user-biz/java/com/keao/edu/user/controller/ShortUrlController.java

@@ -0,0 +1,38 @@
+package com.keao.edu.user.controller;
+
+import com.keao.edu.common.controller.BaseController;
+import com.keao.edu.user.entity.ShortUrl;
+import com.keao.edu.user.service.ShortUrlService;
+import io.swagger.annotations.Api;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.util.Objects;
+
+/**
+ * @Author Joburgess
+ * @Date 2020.06.22
+ */
+@Controller
+@RequestMapping("/")
+@Api(tags = "短链接服务")
+public class ShortUrlController extends BaseController {
+
+    @Autowired
+    private ShortUrlService shortUrlService;
+
+    @GetMapping(value = "/su/{id}")
+    public void redirectUrl(@PathVariable("id") Long id, HttpServletResponse response) throws IOException {
+        ShortUrl shortUrl = shortUrlService.get(id);
+        if(Objects.isNull(shortUrl)|| StringUtils.isBlank(shortUrl.getUrl())){
+            return;
+        }
+        response.sendRedirect(shortUrl.getUrl());
+    }
+
+}

+ 81 - 0
edu-user/edu-user-biz/java/com/keao/edu/user/controller/StudentController.java

@@ -0,0 +1,81 @@
+package com.keao.edu.user.controller;
+
+
+import com.keao.edu.auth.api.client.SysUserFeignService;
+import com.keao.edu.auth.api.entity.SysUser;
+import com.keao.edu.common.controller.BaseController;
+import com.keao.edu.common.entity.HttpResponseResult;
+import com.keao.edu.common.page.PageInfo;
+import com.keao.edu.common.page.QueryInfo;
+import com.keao.edu.user.api.entity.Student;
+import com.keao.edu.user.dto.StudentExamPaymentDto;
+import com.keao.edu.user.page.StudentApplyQueryInfo;
+import com.keao.edu.user.service.StudentService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.util.ObjectUtils;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * 系统配置控制层
+ */
+@RestController
+@Api(tags = "学员服务")
+@RequestMapping(value = "student")
+public class StudentController extends BaseController {
+
+    @Autowired
+    private StudentService studentService;
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+
+    @ApiOperation(value = "学员列表")
+    @GetMapping(value = "list")
+    @PreAuthorize("@pcs.hasPermissions('student/list')")
+    public HttpResponseResult<PageInfo<Student>> list(QueryInfo queryInfo) {
+        return succeed(studentService.queryStudentPage(queryInfo));
+    }
+
+    @ApiOperation(value = "学生端学员报考记录列表(包括详情)")
+    @PostMapping(value = "applyList")
+    @PreAuthorize("@pcs.hasPermissions('student/applyList')")
+    public HttpResponseResult<PageInfo<StudentExamPaymentDto>> applyList(StudentApplyQueryInfo queryInfo) {
+        return succeed(studentService.queryApplyList(queryInfo));
+    }
+
+    @ApiOperation(value = "查询学员")
+    @GetMapping(value = "get")
+    @PreAuthorize("@pcs.hasPermissions('student/get')")
+    public HttpResponseResult<Student> get(Integer id) {
+        return succeed(studentService.get(id));
+    }
+
+    @ApiOperation(value = "学员报名")
+    @PostMapping(value = "apply")
+    public HttpResponseResult apply(Integer organId, String phone) {
+        Student student = new Student(organId, phone);
+        studentService.addStudent(student);
+        return succeed();
+    }
+
+    @ApiOperation(value = "获取学生信息")
+    @GetMapping(value = "getStudent")
+    public HttpResponseResult<Student> getStudent() {
+        SysUser user = sysUserFeignService.queryUserInfo();
+        return succeed(studentService.getStudent(user.getId()));
+    }
+
+    @ApiOperation(value = "更新学员基本信息")
+    @PostMapping(value = "updateInfo")
+    public HttpResponseResult<Student> updateInfo(Student student) {
+        SysUser user = sysUserFeignService.queryUserInfo();
+        student.setUserId(user.getId());
+        return succeed(studentService.updateInfo(student));
+    }
+
+}

+ 118 - 0
edu-user/edu-user-biz/java/com/keao/edu/user/controller/StudentExamResultController.java

@@ -0,0 +1,118 @@
+package com.keao.edu.user.controller;
+
+import com.alibaba.fastjson.JSONObject;
+import com.keao.edu.auth.api.client.SysUserFeignService;
+import com.keao.edu.auth.api.entity.SysUser;
+import com.keao.edu.common.controller.BaseController;
+import com.keao.edu.common.entity.HttpResponseResult;
+import com.keao.edu.common.page.PageInfo;
+import com.keao.edu.user.api.enums.StudentExamResultApiDto;
+import com.keao.edu.user.dto.RecordNotify;
+import com.keao.edu.user.dto.StudentExamResultStatisticsDto;
+import com.keao.edu.user.entity.Employee;
+import com.keao.edu.user.entity.StudentExamResult;
+import com.keao.edu.user.page.StudentExamResultQueryInfo;
+import com.keao.edu.user.service.EmployeeService;
+import com.keao.edu.user.service.StudentExamResultService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Objects;
+
+/**
+ * @Author Joburgess
+ * @Date 2020.06.30
+ */
+@RestController
+@RequestMapping("studentExamResult")
+@Api(tags = "考试结果服务")
+public class StudentExamResultController extends BaseController {
+
+    @Autowired
+    private StudentExamResultService studentExamResultService;
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+    @Autowired
+    private EmployeeService employeeService;
+
+    @RequestMapping(value = "/recordSync")
+    public void recordSync(@RequestBody String body) throws Exception {
+        RecordNotify recordNotify = JSONObject.parseObject(body, RecordNotify.class);
+        studentExamResultService.recordSync(recordNotify);
+    }
+
+    @ApiOperation("查询考试结果")
+    @GetMapping(value = "/queryStudentExamResult")
+    public HttpResponseResult<PageInfo<StudentExamResult>> queryStudentExamResult(StudentExamResultQueryInfo queryInfo){
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if(!sysUser.getIsSuperAdmin()&&Objects.isNull(queryInfo.getOrganId())){
+            Employee employee = employeeService.get(sysUser.getId());
+            if(Objects.isNull(employee)){
+                return failed("用户信息异常");
+            }
+            queryInfo.setOrganId(employee.getOrganId());
+        }
+        return succeed(studentExamResultService.queryStudentExamResult(queryInfo));
+    }
+
+    @ApiOperation("修改考试结果")
+    @PostMapping(value = "/update")
+    public HttpResponseResult update(StudentExamResult examResult){
+        studentExamResultService.updateStudentExamResult(examResult);
+        return succeed();
+    }
+
+    @ApiOperation("修改考试状态")
+    @PostMapping(value = "/api/updateFinishedExam")
+    public void updateFinishedExam(Long examRegistrationId,Integer finishedExam){
+        studentExamResultService.updateFinishedExam(examRegistrationId,finishedExam);
+    }
+
+    @ApiOperation("修改SessionId")
+    @PostMapping(value = "/api/updateSessionId")
+    public void updateSessionId(Long examRegistrationId,String sessionId){
+        studentExamResultService.updateSessionId(examRegistrationId,sessionId);
+    }
+
+    @ApiOperation("获取考试结果")
+    @PostMapping(value = "/api/get")
+    public StudentExamResultApiDto get(Long id){
+        return studentExamResultService.getStudentExamResultApiDto(id);
+    }
+
+    @ApiOperation("考试结果统计信息")
+    @GetMapping(value = "/getStudentExamResultStatisticsInfo")
+    public HttpResponseResult<StudentExamResultStatisticsDto> getStudentExamResultStatisticsInfo(Integer examId){
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        Integer organId=null;
+        if(!sysUser.getIsSuperAdmin()){
+            Employee employee = employeeService.get(sysUser.getId());
+            if(Objects.isNull(employee)){
+                return failed("用户信息异常");
+            }
+            organId=employee.getOrganId();
+        }
+        return succeed(studentExamResultService.getStudentExamResultStatisticsInfo(organId, examId));
+    }
+
+    @ApiOperation("确认考生")
+    @PostMapping(value = "/confirmStudent")
+    public HttpResponseResult confirmStudent(Long examRegistrationId) {
+        studentExamResultService.confirmStudent(examRegistrationId);
+        return succeed();
+    }
+
+    /**
+     * 屏蔽指定用户
+     * @param roomId
+     * @return
+     * @throws Exception
+     */
+    @RequestMapping(value = "/shieldUserId", method = RequestMethod.POST)
+    public Object shieldUserId(Long roomId,Integer shieldFlag)throws Exception {
+        studentExamResultService.shieldUserId(roomId,shieldFlag);
+        return succeed();
+    }
+}

+ 80 - 0
edu-user/edu-user-biz/java/com/keao/edu/user/controller/SubjectController.java

@@ -0,0 +1,80 @@
+package com.keao.edu.user.controller;
+
+
+import com.keao.edu.common.controller.BaseController;
+import com.keao.edu.common.entity.HttpResponseResult;
+import com.keao.edu.common.page.PageInfo;
+import com.keao.edu.common.tenant.TenantContextHolder;
+import com.keao.edu.user.entity.Subject;
+import com.keao.edu.user.page.SubjectQueryInfo;
+import com.keao.edu.user.service.SubjectService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@RequestMapping("subject")
+@Api(tags = "科目服务")
+@RestController
+public class SubjectController extends BaseController {
+
+    @Autowired
+    private SubjectService subjectService;
+
+    @ApiOperation(value = "修改、新增科目")
+    @PostMapping("/upset")
+    @PreAuthorize("@pcs.hasPermissions('subject/upset')")
+    public HttpResponseResult update(@RequestBody Subject subject){
+        subject.setTenantId(TenantContextHolder.getTenantId());
+        subjectService.upSetSubject(subject);
+        return succeed();
+    }
+
+    @ApiOperation(value = "删除科目")
+    @PostMapping("/del")
+    @PreAuthorize("@pcs.hasPermissions('subject/del')")
+    public HttpResponseResult del(@RequestBody Subject subject){
+        subject.setTenantId(TenantContextHolder.getTenantId());
+        subject.setDelFlag(true);
+        subjectService.upSetSubject(subject);
+        return succeed();
+    }
+
+    @ApiOperation(value = "根据科目编号查询科目")
+    @GetMapping("/get/{id}")
+    @PreAuthorize("@pcs.hasPermissions('subject/get')")
+    public HttpResponseResult<Subject> get(@ApiParam(value = "科目编号", required = true) @PathVariable("id") Integer id){
+        return succeed(subjectService.get(id));
+    }
+
+    @ApiOperation(value = "分页查询科目列表")
+    @GetMapping("/queryPage")
+    @PreAuthorize("@pcs.hasPermissions('subject/queryPage')")
+    public HttpResponseResult<PageInfo<Subject>> queryPage(SubjectQueryInfo queryInfo){
+        return succeed(subjectService.queryPage(queryInfo));
+    }
+
+    @ApiOperation(value = "学生端分页查询科目列表")
+    @GetMapping("/studentQueryPage")
+    public HttpResponseResult<PageInfo<Subject>> studentQueryPage(SubjectQueryInfo queryInfo){
+        return succeed(subjectService.queryPage(queryInfo));
+    }
+
+    @ApiOperation(value = "分页查询科目树状列表")
+    @GetMapping("/queryPageTree")
+    @PreAuthorize("@pcs.hasPermissions('subject/queryPageTree')")
+    public HttpResponseResult<PageInfo<Subject>> queryPageTree(SubjectQueryInfo queryInfo){
+        return succeed(subjectService.queryPageTree(queryInfo));
+    }
+
+    @ApiOperation(value = "获取子集科目列表")
+    @GetMapping("/findSubSubjects")
+    @PreAuthorize("@pcs.hasPermissions('subject/findSubSubjects')")
+    public HttpResponseResult<List<Subject>> findSubSubjects(){
+        return succeed(subjectService.findSubSubjects(Integer.parseInt(TenantContextHolder.getTenantId())));
+    }
+}

+ 93 - 0
edu-user/edu-user-biz/java/com/keao/edu/user/controller/SysConfigController.java

@@ -0,0 +1,93 @@
+package com.keao.edu.user.controller;
+
+
+import com.keao.edu.common.controller.BaseController;
+import com.keao.edu.common.entity.SysConfig;
+import com.keao.edu.user.service.SysConfigService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 系统配置控制层
+ */
+@RestController
+@Api(tags = "系统参数设置")
+@RequestMapping(value = "sysConfig")
+public class SysConfigController extends BaseController {
+
+	@Autowired
+	private SysConfigService sysConfigService;
+
+	@ApiOperation(value = "参数列表")
+	@GetMapping(value = "list")
+    @PreAuthorize("@pcs.hasPermissions('sysConfig/list')")
+	public Object configList(String group) {
+//		String tenantId = TenantContextHolder.getTenantId();
+		Map<String,Object> params = new HashMap<String, Object>();
+		params.put("group", group);
+//		params.put("tenantId", tenantId);
+		return succeed(sysConfigService.findAll(params));
+	}
+
+	@ApiOperation(value = "修改参数")
+	@PostMapping(value = "update")
+    @PreAuthorize("@pcs.hasPermissions('sysConfig/update')")
+	public Object update(SysConfig config) {
+		config.setModifyOn(new Date());
+		sysConfigService.update(config);
+		return succeed();
+	}
+
+	@ApiOperation(value = "新增参数")
+	@PostMapping(value = "add")
+    @PreAuthorize("@pcs.hasPermissions('sysConfig/add')")
+	public Object addConfig(SysConfig config) {
+		if (config == null)
+			return failed("参数无效");
+		if (StringUtils.isBlank(config.getParamName())) {
+			return failed("参数名称不能为空");
+		}
+		if (StringUtils.isBlank(config.getParanValue())) {
+			return failed("参数值不能为空");
+		}
+		config.setCreateOn(new Date());
+		config.setModifyOn(new Date());
+		return sysConfigService.insert(config) > 0 ? succeed() : failed("添加失败");
+	}
+
+	@ApiOperation(value = "查询参数")
+	@GetMapping(value = "get")
+    @PreAuthorize("@pcs.hasPermissions('sysConfig/get')")
+	public Object getConfig(Long id) {
+		if (id == null || id <= 0)
+			return failed("请检查输入的ID");
+		return succeed(sysConfigService.get(id));
+	}
+
+	@ApiOperation(value = "查询参数")
+	@GetMapping(value = "queryByParamName")
+    @PreAuthorize("@pcs.hasPermissions('sysConfig/queryByParamName')")
+	public Object queryByParamName(String paramName) {
+		if(StringUtils.isBlank(paramName)){
+			return failed("参数不能为空");
+		}
+		return succeed(sysConfigService.findByParamName(paramName));
+	}
+
+	@ApiOperation(value = "查询参数")
+	@PostMapping(value = "api/get")
+	public String apiGet(String paramName) {
+		return sysConfigService.findByParamName(paramName).getParanValue();
+	}
+}

+ 46 - 0
edu-user/edu-user-biz/java/com/keao/edu/user/controller/SysSuggestionController.java

@@ -0,0 +1,46 @@
+package com.keao.edu.user.controller;
+
+
+import com.keao.edu.common.controller.BaseController;
+import com.keao.edu.common.page.QueryInfo;
+import com.keao.edu.user.entity.SysSuggestion;
+import com.keao.edu.user.service.SysSuggestionService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RequestMapping("sysSuggestion")
+@Api(tags = "意见反馈")
+@RestController
+public class SysSuggestionController extends BaseController {
+
+    @Autowired
+    private SysSuggestionService sysSuggestionService;
+
+    @ApiOperation(value = "新增")
+    @RequestMapping("/add")
+    @PreAuthorize("@pcs.hasPermissions('sysSuggestion/add')")
+    public Object add(SysSuggestion sysSuggestion) {
+        sysSuggestionService.insert(sysSuggestion);
+        return succeed();
+    }
+
+    @ApiOperation(value = "删除")
+    @RequestMapping("/del")
+    @PreAuthorize("@pcs.hasPermissions('sysSuggestion/del')")
+    public Object del(Long id) {
+        sysSuggestionService.delete(id);
+        return succeed();
+    }
+
+    @ApiOperation(value = "分页查询")
+    @RequestMapping("/queryPage")
+    @PreAuthorize("@pcs.hasPermissions('sysSuggestion/queryPage')")
+    public Object queryPage(QueryInfo queryInfo) {
+        return succeed(sysSuggestionService.queryPage(queryInfo));
+    }
+
+}

+ 50 - 0
edu-user/edu-user-biz/java/com/keao/edu/user/controller/TaskController.java

@@ -0,0 +1,50 @@
+package com.keao.edu.user.controller;
+
+import com.keao.edu.common.controller.BaseController;
+import com.keao.edu.user.service.ExamRegistrationPaymentService;
+import com.keao.edu.user.service.ExamRoomService;
+import com.keao.edu.user.service.ExaminationBasicService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RequestMapping("task")
+@RestController
+public class TaskController extends BaseController {
+
+    @Autowired
+    private ExamRegistrationPaymentService examRegistrationPaymentService;
+    @Autowired
+    private ExaminationBasicService examinationBasicService;
+    @Autowired
+    private ExamRoomService examRoomService;
+
+    // 查询订单状态
+    @GetMapping("/queryPaymentStatus")
+    public void queryOrderStatus() throws Exception {
+        try {
+            examRegistrationPaymentService.queryPaymentStatus();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    //更新考级项目状态
+    @GetMapping("/updateExamStatus")
+    public void updateExamStatus(){
+        examinationBasicService.updateExamStatus();
+    }
+
+    //明日考试安排推送
+    @GetMapping("/tomorrowExamPlanRemind")
+    public void tomorrowExamPlanRemind(String day){
+        examRoomService.tomorrowExamPlanRemind(day);
+    }
+
+    //考级项目结束提醒,提醒确认结果
+    @GetMapping("/examEndRemind")
+    public void examEndRemind(){
+        examinationBasicService.examEndRemind();
+    }
+}

+ 70 - 0
edu-user/edu-user-biz/java/com/keao/edu/user/controller/TeacherController.java

@@ -0,0 +1,70 @@
+package com.keao.edu.user.controller;
+
+
+import com.keao.edu.common.controller.BaseController;
+import com.keao.edu.common.entity.HttpResponseResult;
+import com.keao.edu.common.page.PageInfo;
+import com.keao.edu.common.tenant.OrganContextHolder;
+import com.keao.edu.common.tenant.TenantContextHolder;
+import com.keao.edu.user.entity.Teacher;
+import com.keao.edu.user.page.TeacherQueryInfo;
+import com.keao.edu.user.service.TeacherService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * 系统配置控制层
+ */
+@RestController
+@Api(tags = "教师服务")
+@RequestMapping(value = "teacher")
+public class TeacherController extends BaseController {
+
+	@Autowired
+	private TeacherService teacherService;
+
+	@ApiOperation(value = "教师列表")
+	@GetMapping(value = "list")
+    @PreAuthorize("@pcs.hasPermissions('teacher/list')")
+	public HttpResponseResult<PageInfo<Teacher>> list(TeacherQueryInfo queryInfo) {
+		/*if(queryInfo.getOrganId() != null){
+			queryInfo.setOrganIds(organizationService.getChildOrganIds(queryInfo.getOrganId(),true));
+		}*/
+		return succeed(teacherService.queryTeacherPage(queryInfo));
+	}
+
+	@ApiOperation(value = "修改教师")
+	@PostMapping(value = "update")
+    @PreAuthorize("@pcs.hasPermissions('teacher/update')")
+	public HttpResponseResult update(@RequestBody Teacher teacher) {
+		teacherService.updateTeacher(teacher);
+		return succeed();
+	}
+
+	@ApiOperation(value = "新增教师")
+	@PostMapping(value = "add")
+    @PreAuthorize("@pcs.hasPermissions('teacher/add')")
+	public HttpResponseResult add(@RequestBody Teacher teacher) {
+		teacher.setTenantId(TenantContextHolder.getTenantId());
+		teacher.setOrganId(OrganContextHolder.getOrganId());
+		return succeed(teacherService.add(teacher));
+	}
+
+	@ApiOperation(value = "查询教师")
+	@GetMapping(value = "get")
+    @PreAuthorize("@pcs.hasPermissions('teacher/get')")
+	public HttpResponseResult<Teacher> get(Integer id) {
+		return succeed(teacherService.get(id));
+	}
+
+	@ApiOperation(value = "删除教师")
+	@PostMapping(value = "del")
+    @PreAuthorize("@pcs.hasPermissions('teacher/del')")
+	public HttpResponseResult del(Integer id) {
+		teacherService.del(id);
+		return succeed();
+	}
+}

+ 78 - 0
edu-user/edu-user-biz/java/com/keao/edu/user/controller/TenantInfoController.java

@@ -0,0 +1,78 @@
+package com.keao.edu.user.controller;
+
+
+import com.keao.edu.auth.api.client.SysUserFeignService;
+import com.keao.edu.auth.api.entity.SysUser;
+import com.keao.edu.common.controller.BaseController;
+import com.keao.edu.common.entity.HttpResponseResult;
+import com.keao.edu.common.page.PageInfo;
+import com.keao.edu.common.page.QueryInfo;
+import com.keao.edu.common.tenant.TenantContextHolder;
+import com.keao.edu.user.dto.TenantInfoDto;
+import com.keao.edu.user.entity.TenantInfo;
+import com.keao.edu.user.service.TenantInfoService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Date;
+
+@RestController
+@RequestMapping("tenantInfo")
+@Api(tags = "机构服务")
+public class TenantInfoController extends BaseController {
+
+	@Autowired
+	private TenantInfoService tenantInfoService;
+	@Autowired
+	private SysUserFeignService sysUserFeignService;
+	
+	@ApiOperation("机构服务分页查询")
+	@GetMapping(value = "/list")
+	public HttpResponseResult<PageInfo<TenantInfoDto>> getList(QueryInfo queryInfo) {
+		return succeed(tenantInfoService.queryTenants(queryInfo));
+	}
+
+	@ApiOperation("查询机构详情")
+	@GetMapping(value = "/query")
+	public HttpResponseResult<TenantInfo> query() {
+		String tenantId = TenantContextHolder.getTenantId();
+		if(StringUtils.isNotEmpty(tenantId)){
+			return succeed(tenantInfoService.get(Integer.parseInt(tenantId)));
+		}else {
+			return succeed(new TenantInfo());
+		}
+	}
+
+	@ApiOperation("新增机构")
+	@PostMapping(value = "/add")
+	public HttpResponseResult add(@RequestBody TenantInfoDto tenantInfo) {
+		tenantInfoService.addTenant(tenantInfo);
+		return succeed();
+	}
+
+	@ApiOperation("更新机构")
+	@PostMapping(value = "/update")
+	public HttpResponseResult update(@RequestBody TenantInfoDto tenantInfo) {
+		SysUser sysUser = sysUserFeignService.queryUserInfo();
+		if(!sysUser.getIsSuperAdmin()){
+			String tenantId = TenantContextHolder.getTenantId();
+			if(StringUtils.isNotEmpty(tenantId)){
+				tenantInfo.setId(Integer.parseInt(tenantId));
+			}
+		}
+
+		tenantInfo.setUpdateTime(new Date());
+		tenantInfoService.updateTenant(tenantInfo);
+		return succeed();
+	}
+
+	@ApiOperation("删除")
+	@PostMapping(value = "/del")
+	public HttpResponseResult add(Integer id) {
+		return succeed(tenantInfoService.delete(id));
+	}
+
+}

+ 46 - 0
edu-user/edu-user-biz/java/com/keao/edu/user/controller/UploadFileController.java

@@ -0,0 +1,46 @@
+package com.keao.edu.user.controller;
+
+import com.keao.edu.common.controller.BaseController;
+import com.keao.edu.common.entity.UploadReturnBean;
+import com.keao.edu.user.service.UploadFileService;
+import com.keao.edu.util.upload.UploadUtil;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiParam;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+
+/**
+ * 上传控制层
+ */
+@RestController
+@Api(tags = "文件上传服务")
+public class UploadFileController extends BaseController {
+
+	private final static Logger LOGGER = LoggerFactory.getLogger(UploadFileController.class);
+
+	@Autowired
+	private UploadFileService uploadFileService;
+
+	@PostMapping(value = "uploadFile")
+	public Object uploadFile(@ApiParam(value = "上传的文件", required = true) @RequestParam("file") MultipartFile file) {
+		try {
+			if (file != null && StringUtils.isNotBlank(file.getOriginalFilename())) {
+				UploadReturnBean bean = uploadFileService.uploadFile(file.getInputStream(), UploadUtil.getExtension(file.getOriginalFilename()));
+				if (bean.isStatus()) {
+					return succeed(bean);
+				}
+				return failed(bean.getMessage());
+			}
+		} catch (Exception e) {
+			LOGGER.error("上传失败", e);
+		}
+		return failed("上传失败");
+	}
+}

+ 139 - 0
edu-user/edu-user-biz/java/com/keao/edu/user/controller/WebSocketServer.java

@@ -0,0 +1,139 @@
+package com.keao.edu.user.controller;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Component;
+
+import javax.websocket.*;
+import javax.websocket.server.PathParam;
+import javax.websocket.server.ServerEndpoint;
+import java.io.IOException;
+import java.util.concurrent.ConcurrentHashMap;
+
+@ServerEndpoint(value = "/ws/{userId}")
+@Component
+public class WebSocketServer {
+
+    private static Logger log = LoggerFactory.getLogger(WebSocketServer.class);
+    /**静态变量,用来记录当前在线连接数。应该把它设计成线程安全的。*/
+    private static int onlineCount = 0;
+    /**concurrent包的线程安全Set,用来存放每个客户端对应的MyWebSocket对象。*/
+    private static ConcurrentHashMap<String,WebSocketServer> webSocketMap = new ConcurrentHashMap<>();
+    /**与某个客户端的连接会话,需要通过它来给客户端发送数据*/
+    private Session session;
+    /**接收userId*/
+    private String userId="";
+
+    /**
+     * 连接建立成功调用的方法*/
+    @OnOpen
+    public void onOpen(Session session,@PathParam("userId") String userId) {
+        this.session = session;
+        this.userId=userId;
+        if(webSocketMap.containsKey(userId)){
+            webSocketMap.remove(userId);
+            webSocketMap.put(userId,this);
+            //加入set中
+        }else{
+            webSocketMap.put(userId,this);
+            //加入set中
+            addOnlineCount();
+            //在线数加1
+        }
+
+        log.info("用户连接:"+userId+",当前在线人数为:" + getOnlineCount());
+
+        try {
+            sendMessage("连接成功");
+        } catch (IOException e) {
+            log.error("用户:"+userId+",网络异常!!!!!!");
+        }
+    }
+
+    /**
+     * 连接关闭调用的方法
+     */
+    @OnClose
+    public void onClose() {
+        if(webSocketMap.containsKey(userId)){
+            webSocketMap.remove(userId);
+            //从set中删除
+            subOnlineCount();
+        }
+        log.info("用户退出:"+userId+",当前在线人数为:" + getOnlineCount());
+    }
+
+    /**
+     * 收到客户端消息后调用的方法
+     *
+     * @param message 客户端发送过来的消息*/
+    @OnMessage
+    public void onMessage(String message, Session session) {
+        log.info("用户消息:"+userId+",报文:"+message);
+        //可以群发消息
+        //消息保存到数据库、redis
+        if(StringUtils.isNotBlank(message)){
+            try {
+                //解析发送的报文
+                JSONObject jsonObject = JSON.parseObject(message);
+                //追加发送人(防止串改)
+                jsonObject.put("fromUserId",this.userId);
+                String toUserId=jsonObject.getString("toUserId");
+                //传送给对应toUserId用户的websocket
+                if(StringUtils.isNotBlank(toUserId)&&webSocketMap.containsKey(toUserId)){
+                    webSocketMap.get(toUserId).sendMessage(jsonObject.toJSONString());
+                }else{
+                    log.error("请求的userId:"+toUserId+"不在该服务器上");
+                    //否则不在这个服务器上,发送到mysql或者redis
+                }
+            }catch (Exception e){
+                e.printStackTrace();
+            }
+        }
+    }
+
+    /**
+     *
+     * @param session
+     * @param error
+     */
+    @OnError
+    public void onError(Session session, Throwable error) {
+        log.error("用户错误:"+this.userId+",原因:"+error.getMessage());
+        error.printStackTrace();
+    }
+    /**
+     * 实现服务器主动推送
+     */
+    public void sendMessage(String message) throws IOException {
+        this.session.getBasicRemote().sendText(message);
+    }
+
+
+    /**
+     * 发送自定义消息
+     * */
+    public static void sendInfo(String message,@PathParam("userId") String userId) throws IOException {
+        log.info("发送消息到:"+userId+",报文:"+message);
+        if(StringUtils.isNotBlank(userId)&&webSocketMap.containsKey(userId)){
+            webSocketMap.get(userId).sendMessage(message);
+        }else{
+            log.error("用户"+userId+",不在线!");
+        }
+    }
+
+    public static synchronized int getOnlineCount() {
+        return onlineCount;
+    }
+
+    public static synchronized void addOnlineCount() {
+        WebSocketServer.onlineCount++;
+    }
+
+    public static synchronized void subOnlineCount() {
+        WebSocketServer.onlineCount--;
+    }
+}

+ 0 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/dao/AppVersionInfoDao.java → edu-user/edu-user-biz/java/com/keao/edu/user/dao/AppVersionInfoDao.java


+ 0 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/dao/EmployeeDao.java → edu-user/edu-user-biz/java/com/keao/edu/user/dao/EmployeeDao.java


+ 0 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/dao/ExamCertificationDao.java → edu-user/edu-user-biz/java/com/keao/edu/user/dao/ExamCertificationDao.java


+ 0 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/dao/ExamLifecycleLogDao.java → edu-user/edu-user-biz/java/com/keao/edu/user/dao/ExamLifecycleLogDao.java


+ 0 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/dao/ExamLocationDao.java → edu-user/edu-user-biz/java/com/keao/edu/user/dao/ExamLocationDao.java


+ 0 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/dao/ExamManualLedgerDao.java → edu-user/edu-user-biz/java/com/keao/edu/user/dao/ExamManualLedgerDao.java


+ 0 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/dao/ExamMusicTheoryDao.java → edu-user/edu-user-biz/java/com/keao/edu/user/dao/ExamMusicTheoryDao.java


+ 0 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/dao/ExamOrganizationRelationDao.java → edu-user/edu-user-biz/java/com/keao/edu/user/dao/ExamOrganizationRelationDao.java


+ 0 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/dao/ExamRegistrationDao.java → edu-user/edu-user-biz/java/com/keao/edu/user/dao/ExamRegistrationDao.java


+ 0 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/dao/ExamRegistrationPaymentDao.java → edu-user/edu-user-biz/java/com/keao/edu/user/dao/ExamRegistrationPaymentDao.java


+ 0 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/dao/ExamReviewDao.java → edu-user/edu-user-biz/java/com/keao/edu/user/dao/ExamReviewDao.java


+ 0 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/dao/ExamRoomDao.java → edu-user/edu-user-biz/java/com/keao/edu/user/dao/ExamRoomDao.java


+ 0 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/dao/ExamRoomStudentRelationDao.java → edu-user/edu-user-biz/java/com/keao/edu/user/dao/ExamRoomStudentRelationDao.java


+ 0 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/dao/ExamSongDao.java → edu-user/edu-user-biz/java/com/keao/edu/user/dao/ExamSongDao.java


+ 0 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/dao/ExamSubjectDao.java → edu-user/edu-user-biz/java/com/keao/edu/user/dao/ExamSubjectDao.java


+ 0 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/dao/ExamSubjectSongDao.java → edu-user/edu-user-biz/java/com/keao/edu/user/dao/ExamSubjectSongDao.java


+ 0 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/dao/ExamTeacherSalaryDao.java → edu-user/edu-user-biz/java/com/keao/edu/user/dao/ExamTeacherSalaryDao.java


+ 0 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/dao/ExaminationBasicDao.java → edu-user/edu-user-biz/java/com/keao/edu/user/dao/ExaminationBasicDao.java


+ 0 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/dao/MusicTheoryDao.java → edu-user/edu-user-biz/java/com/keao/edu/user/dao/MusicTheoryDao.java


+ 0 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/dao/OrganizationDao.java → edu-user/edu-user-biz/java/com/keao/edu/user/dao/OrganizationDao.java


+ 0 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/dao/ShortUrlDao.java → edu-user/edu-user-biz/java/com/keao/edu/user/dao/ShortUrlDao.java


+ 0 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/dao/StudentDao.java → edu-user/edu-user-biz/java/com/keao/edu/user/dao/StudentDao.java


+ 0 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/dao/StudentExamResultDao.java → edu-user/edu-user-biz/java/com/keao/edu/user/dao/StudentExamResultDao.java


+ 0 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/dao/SubjectDao.java → edu-user/edu-user-biz/java/com/keao/edu/user/dao/SubjectDao.java


+ 0 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/dao/SysConfigDao.java → edu-user/edu-user-biz/java/com/keao/edu/user/dao/SysConfigDao.java


+ 0 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/dao/SysSuggestionDao.java → edu-user/edu-user-biz/java/com/keao/edu/user/dao/SysSuggestionDao.java


+ 0 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/dao/SysUserDao.java → edu-user/edu-user-biz/java/com/keao/edu/user/dao/SysUserDao.java


+ 0 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/dao/TeacherDao.java → edu-user/edu-user-biz/java/com/keao/edu/user/dao/TeacherDao.java


+ 0 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/dao/TenantInfoDao.java → edu-user/edu-user-biz/java/com/keao/edu/user/dao/TenantInfoDao.java


+ 0 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/dto/BaseUserInfoDto.java → edu-user/edu-user-biz/java/com/keao/edu/user/dto/BaseUserInfoDto.java


+ 0 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/dto/ExamCertificationDto.java → edu-user/edu-user-biz/java/com/keao/edu/user/dto/ExamCertificationDto.java


+ 0 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/dto/ExamLifecycleLogDto.java → edu-user/edu-user-biz/java/com/keao/edu/user/dto/ExamLifecycleLogDto.java


+ 0 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/dto/ExamManualLedgerStatisticsDto.java → edu-user/edu-user-biz/java/com/keao/edu/user/dto/ExamManualLedgerStatisticsDto.java


+ 0 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/dto/ExamOrganRegistDto.java → edu-user/edu-user-biz/java/com/keao/edu/user/dto/ExamOrganRegistDto.java


+ 0 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/dto/ExamOrganStatisticsDto.java → edu-user/edu-user-biz/java/com/keao/edu/user/dto/ExamOrganStatisticsDto.java


+ 0 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/dto/ExamOrganizationRelationExtraDto.java → edu-user/edu-user-biz/java/com/keao/edu/user/dto/ExamOrganizationRelationExtraDto.java


+ 0 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/dto/ExamPaymentInfo.java → edu-user/edu-user-biz/java/com/keao/edu/user/dto/ExamPaymentInfo.java


+ 0 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/dto/ExamRecordDto.java → edu-user/edu-user-biz/java/com/keao/edu/user/dto/ExamRecordDto.java


+ 0 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/dto/ExamRegistrationDto.java → edu-user/edu-user-biz/java/com/keao/edu/user/dto/ExamRegistrationDto.java


+ 0 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/dto/ExamRegistrationPaymentDto.java → edu-user/edu-user-biz/java/com/keao/edu/user/dto/ExamRegistrationPaymentDto.java


+ 0 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/dto/ExamRegistrationRoomDto.java → edu-user/edu-user-biz/java/com/keao/edu/user/dto/ExamRegistrationRoomDto.java


+ 0 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/dto/ExamRegistrationStatisticsDto.java → edu-user/edu-user-biz/java/com/keao/edu/user/dto/ExamRegistrationStatisticsDto.java


+ 0 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/dto/ExamReviewDto.java → edu-user/edu-user-biz/java/com/keao/edu/user/dto/ExamReviewDto.java


+ 0 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/dto/ExamReviewRecordDto.java → edu-user/edu-user-biz/java/com/keao/edu/user/dto/ExamReviewRecordDto.java


+ 0 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/dto/ExamRoomDto.java → edu-user/edu-user-biz/java/com/keao/edu/user/dto/ExamRoomDto.java


+ 0 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/dto/ExamRoomExamTimeDto.java → edu-user/edu-user-biz/java/com/keao/edu/user/dto/ExamRoomExamTimeDto.java


+ 0 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/dto/ExamRoomListDto.java → edu-user/edu-user-biz/java/com/keao/edu/user/dto/ExamRoomListDto.java


+ 0 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/dto/ExamRoomStatisticsDto.java → edu-user/edu-user-biz/java/com/keao/edu/user/dto/ExamRoomStatisticsDto.java


+ 0 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/dto/ExamRoomStudentRelationDto.java → edu-user/edu-user-biz/java/com/keao/edu/user/dto/ExamRoomStudentRelationDto.java


+ 0 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/dto/ExamSubjectDto.java → edu-user/edu-user-biz/java/com/keao/edu/user/dto/ExamSubjectDto.java


+ 0 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/dto/ExamSubjectSongDto.java → edu-user/edu-user-biz/java/com/keao/edu/user/dto/ExamSubjectSongDto.java


+ 0 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/dto/ExamTeacherSalaryDto.java → edu-user/edu-user-biz/java/com/keao/edu/user/dto/ExamTeacherSalaryDto.java


+ 0 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/dto/ExamTeacherSalaryStaticsInfo.java → edu-user/edu-user-biz/java/com/keao/edu/user/dto/ExamTeacherSalaryStaticsInfo.java


+ 0 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/dto/ExaminationBasicDto.java → edu-user/edu-user-biz/java/com/keao/edu/user/dto/ExaminationBasicDto.java


+ 0 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/dto/NeedCheckingDetailDto.java → edu-user/edu-user-biz/java/com/keao/edu/user/dto/NeedCheckingDetailDto.java


+ 0 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/dto/RecordNotify.java → edu-user/edu-user-biz/java/com/keao/edu/user/dto/RecordNotify.java


+ 0 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/dto/RoomStudentListDto.java → edu-user/edu-user-biz/java/com/keao/edu/user/dto/RoomStudentListDto.java


+ 0 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/dto/StuRecordDetailDto.java → edu-user/edu-user-biz/java/com/keao/edu/user/dto/StuRecordDetailDto.java


+ 0 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/dto/StudentBaseExamsDto.java → edu-user/edu-user-biz/java/com/keao/edu/user/dto/StudentBaseExamsDto.java


+ 0 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/dto/StudentExamListDto.java → edu-user/edu-user-biz/java/com/keao/edu/user/dto/StudentExamListDto.java


+ 0 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/dto/StudentExamPaymentDto.java → edu-user/edu-user-biz/java/com/keao/edu/user/dto/StudentExamPaymentDto.java


+ 0 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/dto/StudentExamResultStatisticsDto.java → edu-user/edu-user-biz/java/com/keao/edu/user/dto/StudentExamResultStatisticsDto.java


+ 0 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/dto/TeacherDto.java → edu-user/edu-user-biz/java/com/keao/edu/user/dto/TeacherDto.java


+ 0 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/dto/TenantInfoDto.java → edu-user/edu-user-biz/java/com/keao/edu/user/dto/TenantInfoDto.java


+ 0 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/entity/AppVersionInfo.java → edu-user/edu-user-biz/java/com/keao/edu/user/entity/AppVersionInfo.java


Some files were not shown because too many files changed in this diff