Browse Source

Merge remote-tracking branch 'origin/master'

周箭河 5 years ago
parent
commit
4860e4ecf5
43 changed files with 783 additions and 79 deletions
  1. 5 5
      edu-auth/edu-auth-server/src/main/java/com/keao/edu/auth/core/provider/PhoneAuthenticationProvider.java
  2. 1 1
      edu-im/edu-im-api/src/main/java/com/keao/edu/im/api/entity/ImUserModel.java
  3. 1 1
      edu-task/src/main/resources/application.yml
  4. 2 2
      edu-task/src/main/resources/config/properties/quartz.properties
  5. 6 0
      edu-thirdparty/pom.xml
  6. 145 0
      edu-thirdparty/src/main/java/com/keao/edu/thirdparty/storage/provider/KS3StoragePlugin.java
  7. 1 1
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/controller/EmployeeController.java
  8. 1 1
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/controller/ExamOrganizationRelationController.java
  9. 3 3
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/controller/ExamRegistrationController.java
  10. 12 0
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/controller/ExamRoomController.java
  11. 18 1
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/controller/ExaminationBasicController.java
  12. 10 0
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/controller/SubjectController.java
  13. 46 0
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/controller/SysSuggestionController.java
  14. 7 4
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/controller/TenantInfoController.java
  15. 10 0
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/dao/SysSuggestionDao.java
  16. 12 0
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/dao/SysUserDao.java
  17. 10 0
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/dao/TenantInfoDao.java
  18. 13 0
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/dto/ExamReviewDto.java
  19. 30 8
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/entity/ExamReview.java
  20. 108 0
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/entity/SysSuggestion.java
  21. 38 0
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/enums/ExamRoomTeaherTypeEnum.java
  22. 23 0
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/page/ExamReviewQueryInfo.java
  23. 1 1
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/ExamOrganizationRelationService.java
  24. 12 1
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/ExaminationBasicService.java
  25. 9 0
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/SysSuggestionService.java
  26. 2 4
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/UploadFileService.java
  27. 20 4
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/impl/EmployeeServiceImpl.java
  28. 20 8
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/impl/ExamOrganizationRelationServiceImpl.java
  29. 8 1
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/impl/ExamReviewServiceImpl.java
  30. 1 0
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/impl/ExamRoomServiceImpl.java
  31. 42 6
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/impl/ExaminationBasicServiceImpl.java
  32. 9 8
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/impl/OrganizationServiceImpl.java
  33. 0 4
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/impl/StudentServiceImpl.java
  34. 1 1
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/impl/SubjectServiceImpl.java
  35. 23 0
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/impl/SysSuggestionServiceImpl.java
  36. 0 3
      edu-user/edu-user-server/src/main/resources/config/mybatis/ExamOrganizationRelationMapper.xml
  37. 1 7
      edu-user/edu-user-server/src/main/resources/config/mybatis/ExamRegistrationMapper.xml
  38. 27 4
      edu-user/edu-user-server/src/main/resources/config/mybatis/ExamReviewMapper.xml
  39. 3 0
      edu-user/edu-user-server/src/main/resources/config/mybatis/OrganizationMapper.xml
  40. 1 0
      edu-user/edu-user-server/src/main/resources/config/mybatis/StudentExamResultMapper.xml
  41. 77 0
      edu-user/edu-user-server/src/main/resources/config/mybatis/SysSuggestionMapper.xml
  42. 14 0
      edu-user/edu-user-server/src/main/resources/config/mybatis/SysUserMapper.xml
  43. 10 0
      edu-user/edu-user-server/src/main/resources/config/mybatis/TenantInfoMapper.xml

+ 5 - 5
edu-auth/edu-auth-server/src/main/java/com/keao/edu/auth/core/provider/PhoneAuthenticationProvider.java

@@ -44,17 +44,17 @@ public class PhoneAuthenticationProvider extends AbstractAuthenticationProvider
 
 		String smsCode = loginEntity.getSmsCode();
 
-		SysUserInfo userInfo = sysUserService.queryUserInfoByPhone(loginEntity.getPhone());
-		if (userInfo == null && StringUtils.isNotEmpty(loginEntity.getRegisterFlag())) {
-			sysUserService.initUser(loginEntity);
-		}
-
 		// 验证码验证
 		boolean b = smsCodeService.verifyValidCode(StringUtils.substringAfter(phone, SecurityConstants.PHONE_PRINCIPAL_PREFIX), smsCode);
 		if (!b) {
 			throw new BadCredentialsException("验证码校验失败");
 		}
 
+		SysUserInfo userInfo = sysUserService.queryUserInfoByPhone(loginEntity.getPhone());
+		if (userInfo == null && StringUtils.isNotEmpty(loginEntity.getRegisterFlag())) {
+			sysUserService.initUser(loginEntity);
+		}
+
 		UserDetails loadedUser;
 		try {
 			loadedUser = userDetailsService.loadUserByUsername(phone);

+ 1 - 1
edu-im/edu-im-api/src/main/java/com/keao/edu/im/api/entity/ImUserModel.java

@@ -19,7 +19,7 @@ public class ImUserModel {
         this.id = id;
         this.name = name;
         if(StringUtils.isEmpty(portrait)){
-            this.portrait = "https://daya-online.oss-cn-beijing.aliyuncs.com/201912/RkoZBNq.jpeg";
+            this.portrait = "https://daya-online.oss-cn-beijing.aliyuncs.com/202007/S4bb4ZQ.png";
         }else {
             this.portrait = portrait;
         }

+ 1 - 1
edu-task/src/main/resources/application.yml

@@ -48,7 +48,7 @@ spring:
     maxOpenPreparedStatements: 20
 
   redis:
-    host: 47.114.1.200
+    host: 47.114.176.40
     port: 6379
     password: dyym
     database: 0

+ 2 - 2
edu-task/src/main/resources/config/properties/quartz.properties

@@ -2,7 +2,7 @@
 # Configure Main Scheduler Properties  
 #============================================================================
 
-org.quartz.scheduler.instanceName = p2p
+org.quartz.scheduler.instanceName = edu_saas
 org.quartz.scheduler.instanceId = AUTO
 
 #============================================================================
@@ -23,7 +23,7 @@ org.quartz.jobStore.class = org.springframework.scheduling.quartz.LocalDataSourc
 org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate
 #org.quartz.jobStore.useProperties = false
 #org.quartz.jobStore.dataSource = myDS
-org.quartz.jobStore.tablePrefix = QRTZ_
+org.quartz.jobStore.tablePrefix = qrtz_
 
 org.quartz.jobStore.isClustered = true
 org.quartz.jobStore.clusterCheckinInterval = 20000

+ 6 - 0
edu-thirdparty/pom.xml

@@ -120,5 +120,11 @@
             <artifactId>java-sdk</artifactId>
             <version>4.12.0</version>
         </dependency>
+        
+		<dependency>
+			<groupId>com.ksyun</groupId>
+			<artifactId>ks3-kss-java-sdk</artifactId>
+			<version>0.8.14</version>
+		</dependency>
     </dependencies>
 </project>

+ 145 - 0
edu-thirdparty/src/main/java/com/keao/edu/thirdparty/storage/provider/KS3StoragePlugin.java

@@ -0,0 +1,145 @@
+package com.keao.edu.thirdparty.storage.provider;
+
+import java.io.File;
+import java.io.IOException;
+
+import org.apache.poi.util.IOUtils;
+import org.springframework.beans.factory.DisposableBean;
+import org.springframework.beans.factory.InitializingBean;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+import com.keao.edu.thirdparty.exception.ThirdpartyException;
+import com.keao.edu.thirdparty.storage.StoragePlugin;
+import com.keao.edu.thirdparty.storage.StoragePluginContext;
+import com.ksyun.ks3.dto.CannedAccessControlList;
+import com.ksyun.ks3.dto.GetObjectResult;
+import com.ksyun.ks3.dto.Ks3Object;
+import com.ksyun.ks3.http.HttpClientConfig;
+import com.ksyun.ks3.service.Ks3;
+import com.ksyun.ks3.service.Ks3Client;
+import com.ksyun.ks3.service.Ks3ClientConfig;
+import com.ksyun.ks3.service.Ks3ClientConfig.PROTOCOL;
+import com.ksyun.ks3.service.request.GetObjectRequest;
+import com.ksyun.ks3.service.request.PutObjectRequest;
+
+@Component
+public class KS3StoragePlugin implements StoragePlugin, InitializingBean, DisposableBean {
+
+	public final static String PLUGIN_NAME = "Ksyun";
+
+	@Value("${storage.oss.endpoint:ks3-cn-beijing.ksyun.com}")
+	private String endpoint;
+
+	@Value("${storage.oss.accessKeyId:AKLTtTeIbadpRG-pil4S0Q4m-Q}")
+	private String accessKeyId;
+
+	@Value("${storage.oss.accessKeySecret:OB1HmNOfDNW95wHoxMkP6IPFZXormk2ngA800TkvKAw7ozhiJGRqrMnnV8ZrAU3WRQ==}")
+	private String accessKeySecret;
+
+	@Value("${storage.oss.bucketName:daya}")
+	private String bucketName;
+
+	private Ks3 client;
+
+	public String getName() {
+		return PLUGIN_NAME;
+	}
+
+	@Override
+	public void afterPropertiesSet() throws Exception {
+		Ks3ClientConfig config = new Ks3ClientConfig();
+		config.setEndpoint(endpoint);// 如果使用自定义域名,设置endpoint为自定义域名,同时设置domainMode为true
+		/**
+		 * true:表示以自定义域名访问 
+		 * false:表示以KS3的外网域名或内网域名访问
+		 * 默认为false
+		 */
+		config.setDomainMode(false);
+		config.setProtocol(PROTOCOL.http);
+
+		/**
+		 * true表示以   endpoint/{bucket}/{key}的方式访问
+		 * false表示以  {bucket}.endpoint/{key}的方式访问
+		 * 如果domainMode设置为true,pathStyleAccess可忽略设置
+		 */
+		config.setPathStyleAccess(false);
+		HttpClientConfig hconfig = new HttpClientConfig();
+		// 在HttpClientConfig中可以设置httpclient的相关属性,比如代理,超时,重试等。
+		config.setHttpClientConfig(hconfig);
+		client = new Ks3Client(accessKeyId, accessKeySecret, config);
+
+		StoragePluginContext.addStoragePlugin(this);
+	}
+
+	@Override
+	public String uploadFile(String folderName, File file) {
+		if (!file.exists()) {
+			throw new ThirdpartyException("需要上传的文件[{}]不存在", file.getAbsolutePath());
+		}
+
+		if (folderName.endsWith("/")) {
+			folderName = folderName.substring(0, folderName.length() - 1);
+		}
+
+		PutObjectRequest request = new PutObjectRequest(bucketName, folderName + "/" + file.getName(), file);
+
+		// 上传一个公开文件
+		request.setCannedAcl(CannedAccessControlList.PublicRead);
+
+		client.putObject(request);
+
+		return "https://" + bucketName + "." + endpoint + "/" + folderName + "/" + file.getName();
+	}
+
+	@Override
+	public byte[] getFile(String folderName, String fileName) throws IOException {
+		GetObjectRequest request = new GetObjectRequest(bucketName, folderName + "/" + fileName);
+		GetObjectResult result = client.getObject(request);
+
+		Ks3Object object = result.getObject();
+		try {
+			return IOUtils.toByteArray(object.getObjectContent());
+		} finally {
+			if (object != null) {
+				object.close();
+			}
+		}
+	}
+
+	@Override
+	public void destroy() throws Exception {
+	}
+
+	public void setEndpoint(String endpoint) {
+		this.endpoint = endpoint;
+	}
+
+	public void setAccessKeyId(String accessKeyId) {
+		this.accessKeyId = accessKeyId;
+	}
+
+	public void setAccessKeySecret(String accessKeySecret) {
+		this.accessKeySecret = accessKeySecret;
+	}
+
+	public void setBucketName(String bucketName) {
+		this.bucketName = bucketName;
+	}
+
+	public static void main(String[] args) throws Exception {
+		KS3StoragePlugin aliyunOssStorageService = new KS3StoragePlugin();
+		aliyunOssStorageService.setAccessKeyId("LTAIwZW9XqrfsZ4r");
+		aliyunOssStorageService.setAccessKeySecret("5uDsNZmHMxcnxav8w9byII4zcPpu5G");
+		aliyunOssStorageService.setBucketName("yooma-test");
+		aliyunOssStorageService.setEndpoint("oss-cn-beijing.aliyuncs.com");
+		aliyunOssStorageService.afterPropertiesSet();
+
+		File file = new File("e:/var/2.jpg");
+		System.out.println(aliyunOssStorageService.uploadFile("aaa", file));
+
+		System.err.println("***********" + aliyunOssStorageService.getFile("aaa", file.getName()).length);
+
+		aliyunOssStorageService.destroy();
+	}
+}

+ 1 - 1
edu-user/edu-user-server/src/main/java/com/keao/edu/user/controller/EmployeeController.java

@@ -59,7 +59,7 @@ public class EmployeeController extends BaseController {
 
 	@ApiOperation("更新员工")
 	@PostMapping(value = "/update")
-	public HttpResponseResult update(Employee employee) {
+	public HttpResponseResult update(@RequestBody Employee employee) {
 		employeeService.updateEmployee(employee);
 		return succeed();
 	}

+ 1 - 1
edu-user/edu-user-server/src/main/java/com/keao/edu/user/controller/ExamOrganizationRelationController.java

@@ -54,7 +54,7 @@ public class ExamOrganizationRelationController extends BaseController {
 
     @ApiOperation("添加合作单位")
     @PostMapping(value = "/addExamOrganizations")
-    public HttpResponseResult addExamOrganizations(Integer examId, String organIds){
+    public HttpResponseResult addExamOrganizations(Long examId, String organIds){
         examOrganizationRelationService.addExamOrganizations(examId, organIds);
         return succeed();
     }

+ 3 - 3
edu-user/edu-user-server/src/main/java/com/keao/edu/user/controller/ExamRegistrationController.java

@@ -54,9 +54,9 @@ public class ExamRegistrationController extends BaseController {
             }
             queryInfo.setOrganId(employee.getOrganId());
         }*/
-        if(queryInfo.getOrganId() != null){
-            queryInfo.setOrganIds(organizationService.getChildOrganIds(queryInfo.getOrganId(),true));
-        }
+//        if(queryInfo.getOrganId() != null){
+//            queryInfo.setOrganIds(organizationService.getChildOrganIds(queryInfo.getOrganId(),true));
+//        }
         return succeed(examRegistrationService.queryExamRegistrationStudents(queryInfo));
     }
 

+ 12 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/controller/ExamRoomController.java

@@ -46,6 +46,18 @@ public class ExamRoomController extends BaseController {
         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);
+        return succeed();
+    }
+
     @ApiOperation("获取考级项目教室列表")
     @GetMapping(value = "/queryExamRooms")
     public HttpResponseResult<PageInfo<ExamRoomDto>> queryExamRooms(ExamRoomQueryInfo queryInfo) {

+ 18 - 1
edu-user/edu-user-server/src/main/java/com/keao/edu/user/controller/ExaminationBasicController.java

@@ -8,6 +8,7 @@ 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;
@@ -74,10 +75,26 @@ public class ExaminationBasicController extends BaseController {
         return succeed();
     }
 
+    @ApiOperation("更新考级项目状态")
+    @PostMapping(value = "/updateExamBasicStatus")
+    public HttpResponseResult updateExamBasicStatus(Long examId, ExamStatusEnum statusEnum){
+        examinationBasicService.updateExamBasicStatus(examId, statusEnum);
+        return succeed();
+    }
+
     @ApiOperation("关闭考级项目")
     @PostMapping(value = "/closeExam")
     public HttpResponseResult closeExam(Integer examId, String reason){
-        examinationBasicService.closeExam(examId, 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();
     }
 

+ 10 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/controller/SubjectController.java

@@ -34,6 +34,16 @@ public class SubjectController extends BaseController {
         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')")

+ 46 - 0
edu-user/edu-user-server/src/main/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));
+    }
+
+}

+ 7 - 4
edu-user/edu-user-server/src/main/java/com/keao/edu/user/controller/TenantInfoController.java

@@ -12,7 +12,6 @@ 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.ApiImplicitParam;
 import io.swagger.annotations.ApiOperation;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -57,10 +56,14 @@ public class TenantInfoController extends BaseController {
 	@ApiOperation("更新机构")
 	@PostMapping(value = "/update")
 	public HttpResponseResult update(@RequestBody TenantInfoDto tenantInfo) {
-		String tenantId = TenantContextHolder.getTenantId();
-		if(StringUtils.isNotEmpty(tenantId)){
-			tenantInfo.setId(Integer.parseInt(tenantId));
+		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();

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

@@ -0,0 +1,10 @@
+package com.keao.edu.user.dao;
+
+
+import com.keao.edu.common.dal.BaseDAO;
+import com.keao.edu.user.entity.SysSuggestion;
+
+public interface SysSuggestionDao extends BaseDAO<Long, SysSuggestion> {
+
+	
+}

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

@@ -47,11 +47,23 @@ public interface SysUserDao extends BaseDAO<Integer, SysUser> {
 	void delEmployeeRole(Integer userId);
 
 	/**
+	 * 删除用户角色
+	 * @param userIds
+	 */
+	void batchDelEmployeeRole(@Param("userIds") List<Integer> userIds);
+
+	/**
 	 * 批量新增用户角色
 	 * @param id
 	 * @param roles
 	 */
 	void batchAddEmployeeRole(@Param("userId") Integer id, @Param("roles") Set<Integer> roles);
+	/**
+	 * 批量新增用户角色
+	 * @param userIds
+	 * @param roles
+	 */
+	void batchAddEmployeeRoles(@Param("userIds") List<Integer> userIds, @Param("roles") Set<Integer> roles);
 
 	/**
 	 * 获取用户角色列表

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

@@ -3,6 +3,7 @@ package com.keao.edu.user.dao;
 import com.keao.edu.common.dal.BaseDAO;
 import com.keao.edu.user.dto.TenantInfoDto;
 import com.keao.edu.user.entity.TenantInfo;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 import java.util.Map;
@@ -11,4 +12,13 @@ public interface TenantInfoDao extends BaseDAO<Integer, TenantInfo> {
 
     List<TenantInfoDto> queryTenants(Map<String, Object> params);
     int countTenants(Map<String, Object> params);
+
+    /**
+     * @describe 获取指定分部的机构信息
+     * @author Joburgess
+     * @date 2020.07.13
+     * @param organId:
+     * @return com.keao.edu.user.entity.TenantInfo
+     */
+    TenantInfo getWithOrgan(@Param("organId") Integer organId);
 }

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

@@ -5,6 +5,8 @@ import com.keao.edu.user.entity.ExamRegistration;
 import com.keao.edu.user.entity.ExamReview;
 import io.swagger.annotations.ApiModelProperty;
 
+import java.util.Date;
+
 /**
  * @Author Joburgess
  * @Date 2020.06.24
@@ -17,6 +19,17 @@ public class ExamReviewDto extends ExamReview {
     @ApiModelProperty(value = "考生报名信息")
     private ExamRegistration examRegistration;
 
+    @ApiModelProperty(value = "考试时间")
+    private Date examStartTime;
+
+    public Date getExamStartTime() {
+        return examStartTime;
+    }
+
+    public void setExamStartTime(Date examStartTime) {
+        this.examStartTime = examStartTime;
+    }
+
     public SysUser getStudentInfo() {
         return studentInfo;
     }

+ 30 - 8
edu-user/edu-user-server/src/main/java/com/keao/edu/user/entity/ExamReview.java

@@ -1,6 +1,7 @@
 package com.keao.edu.user.entity;
 
 import com.keao.edu.auth.api.entity.SysUser;
+import com.keao.edu.user.enums.ExamRoomTeaherTypeEnum;
 import com.keao.edu.user.enums.YesOrNoEnum;
 import io.swagger.annotations.ApiModelProperty;
 import org.apache.commons.lang3.builder.ToStringBuilder;
@@ -17,7 +18,9 @@ public class ExamReview {
 	private Long examRegistrationId;
 
 	@ApiModelProperty(value = "考试编号")
-	private Integer examinationBasicId;
+	private Long examinationBasicId;
+
+	private Long examRoomId;
 	
 	/**  */
 	@ApiModelProperty(value = "教师编号")
@@ -32,6 +35,9 @@ public class ExamReview {
 	/** 评价 */
 	@ApiModelProperty(value = "评价")
 	private String evaluationContent;
+
+	@ApiModelProperty(value = "教师属性")
+	private ExamRoomTeaherTypeEnum teacherType;
 	
 	/** 结果 */
 	@ApiModelProperty(value = "结果")
@@ -65,6 +71,14 @@ public class ExamReview {
 		this.examinationBasic = examinationBasic;
 	}
 
+	public Long getExamRoomId() {
+		return examRoomId;
+	}
+
+	public void setExamRoomId(Long examRoomId) {
+		this.examRoomId = examRoomId;
+	}
+
 	public void setId(Long id){
 		this.id = id;
 	}
@@ -81,14 +95,14 @@ public class ExamReview {
 		this.teacher = teacher;
 	}
 
-	public void setExaminationBasicId(Integer examinationBasicId){
-		this.examinationBasicId = examinationBasicId;
+	public Long getExaminationBasicId() {
+		return examinationBasicId;
 	}
-	
-	public Integer getExaminationBasicId(){
-		return this.examinationBasicId;
+
+	public void setExaminationBasicId(Long examinationBasicId) {
+		this.examinationBasicId = examinationBasicId;
 	}
-			
+
 	public void setTeacherId(Integer teacherId){
 		this.teacherId = teacherId;
 	}
@@ -96,7 +110,15 @@ public class ExamReview {
 	public Integer getTeacherId(){
 		return this.teacherId;
 	}
-			
+
+	public ExamRoomTeaherTypeEnum getTeacherType() {
+		return teacherType;
+	}
+
+	public void setTeacherType(ExamRoomTeaherTypeEnum teacherType) {
+		this.teacherType = teacherType;
+	}
+
 	public void setStudentId(Integer studentId){
 		this.studentId = studentId;
 	}

+ 108 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/entity/SysSuggestion.java

@@ -0,0 +1,108 @@
+package com.keao.edu.user.entity;
+
+import io.swagger.annotations.ApiModelProperty;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+
+/**
+ * 对应数据库表(sys_suggestion):
+ */
+public class SysSuggestion {
+
+	/** 编号 */
+	private Long id;
+	
+	/** 联系方式 */
+	@ApiModelProperty(value = "联系方式",required = false)
+	private String mobileNo;
+	
+	/** 标题 */
+	@ApiModelProperty(value = "标题",required = false)
+	private String title;
+	
+	/** 内容 */
+	@ApiModelProperty(value = "内容",required = false)
+	private String content;
+	
+	/** 用户编号 */
+	@ApiModelProperty(value = "用户编号",required = false)
+	private Long userId;
+	
+	@ApiModelProperty(value = "客户端类型",required = false)
+	private String clientType;
+
+	@ApiModelProperty(value = "用户名",required = false)
+	private String username;
+	
+	/** 提交时间 */
+	private java.util.Date createTime;
+
+	public String getUsername() {
+		return username;
+	}
+
+	public void setUsername(String username) {
+		this.username = username;
+	}
+
+	public void setId(Long id){
+		this.id = id;
+	}
+	
+	public Long getId(){
+		return this.id;
+	}
+			
+	public void setMobileNo(String mobileNo){
+		this.mobileNo = mobileNo;
+	}
+	
+	public String getMobileNo(){
+		return this.mobileNo;
+	}
+			
+	public void setTitle(String title){
+		this.title = title;
+	}
+	
+	public String getTitle(){
+		return this.title;
+	}
+			
+	public void setContent(String content){
+		this.content = content;
+	}
+	
+	public String getContent(){
+		return this.content;
+	}
+			
+	public void setUserId(Long userId){
+		this.userId = userId;
+	}
+	
+	public Long getUserId(){
+		return this.userId;
+	}
+			
+	public String getClientType() {
+		return clientType;
+	}
+
+	public void setClientType(String clientType) {
+		this.clientType = clientType;
+	}
+
+	public void setCreateTime(java.util.Date createTime){
+		this.createTime = createTime;
+	}
+	
+	public java.util.Date getCreateTime(){
+		return this.createTime;
+	}
+			
+	@Override
+	public String toString() {
+		return ToStringBuilder.reflectionToString(this);
+	}
+
+}

+ 38 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/enums/ExamRoomTeaherTypeEnum.java

@@ -0,0 +1,38 @@
+package com.keao.edu.user.enums;
+
+import com.keao.edu.common.enums.BaseEnum;
+
+/**
+ * @Author Joburgess
+ * @Date 2020.07.13
+ **/
+public enum ExamRoomTeaherTypeEnum implements BaseEnum<String, ExamRoomTeaherTypeEnum> {
+
+    MAIN("MAIN", "主考"),
+    ASSISTANT("ASSISTANT", "监考");
+
+    private String code;
+
+    private String msg;
+
+    ExamRoomTeaherTypeEnum(String code, String msg) {
+        this.code = code;
+        this.msg = msg;
+    }
+
+    @Override
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+
+    public void setMsg(String msg) {
+        this.msg = msg;
+    }}

+ 23 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/page/ExamReviewQueryInfo.java

@@ -1,6 +1,7 @@
 package com.keao.edu.user.page;
 
 import com.keao.edu.common.page.QueryInfo;
+import com.keao.edu.user.enums.ExamRoomTeaherTypeEnum;
 import com.keao.edu.user.enums.StudentRegistrationStatusEnum;
 import io.swagger.annotations.ApiModelProperty;
 
@@ -42,6 +43,12 @@ public class ExamReviewQueryInfo extends QueryInfo {
     @ApiModelProperty(value = "评审时间")
     private String endTime;
 
+    @ApiModelProperty(value = "教师属性")
+    private ExamRoomTeaherTypeEnum teacherType;
+
+    @ApiModelProperty(value = "考试时间")
+    private String examStartTime;
+
     public Long getRegistId() {
         return registId;
     }
@@ -50,6 +57,22 @@ public class ExamReviewQueryInfo extends QueryInfo {
         this.registId = registId;
     }
 
+    public ExamRoomTeaherTypeEnum getTeacherType() {
+        return teacherType;
+    }
+
+    public void setTeacherType(ExamRoomTeaherTypeEnum teacherType) {
+        this.teacherType = teacherType;
+    }
+
+    public String getExamStartTime() {
+        return examStartTime;
+    }
+
+    public void setExamStartTime(String examStartTime) {
+        this.examStartTime = examStartTime;
+    }
+
     public String getStartTime() {
         return startTime;
     }

+ 1 - 1
edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/ExamOrganizationRelationService.java

@@ -26,7 +26,7 @@ public interface ExamOrganizationRelationService extends BaseService<Long, ExamO
      * @param orgainIdsStr:
      * @return void
      */
-    void addExamOrganizations(Integer examId, String orgainIdsStr);
+    void addExamOrganizations(Long examId, String orgainIdsStr);
 
     /**
      * @describe 更新考级项目与合作单位关联信息

+ 12 - 1
edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/ExaminationBasicService.java

@@ -4,6 +4,7 @@ import com.keao.edu.common.page.PageInfo;
 import com.keao.edu.common.service.BaseService;
 import com.keao.edu.user.dto.ExaminationBasicDto;
 import com.keao.edu.user.entity.ExaminationBasic;
+import com.keao.edu.user.enums.ExamStatusEnum;
 import com.keao.edu.user.page.ExaminationQueryInfo;
 
 public interface ExaminationBasicService extends BaseService<Long, ExaminationBasic> {
@@ -26,6 +27,16 @@ public interface ExaminationBasicService extends BaseService<Long, ExaminationBa
     void updateExamStatus();
 
     /**
+     * @describe
+     * @author Joburgess
+     * @date 2020.07.13
+     * @param examId:
+     * @param statusEnum:
+     * @return
+     */
+    void updateExamBasicStatus(Long examId, ExamStatusEnum statusEnum);
+
+    /**
      * @describe 获取考级项目
      * @author Joburgess
      * @date 2020.06.27
@@ -51,7 +62,7 @@ public interface ExaminationBasicService extends BaseService<Long, ExaminationBa
      * @param reason: 关闭原因
      * @return void
      */
-    void closeExam(Integer examId, String reason);
+    void closeExam(Integer organId, Integer examId, String reason);
 
     /**
      * 获取考级项目信息

+ 9 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/SysSuggestionService.java

@@ -0,0 +1,9 @@
+package com.keao.edu.user.service;
+
+
+import com.keao.edu.common.service.BaseService;
+import com.keao.edu.user.entity.SysSuggestion;
+
+public interface SysSuggestionService extends BaseService<Long, SysSuggestion> {
+
+}

+ 2 - 4
edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/UploadFileService.java

@@ -3,10 +3,8 @@ package com.keao.edu.user.service;
 import com.keao.edu.common.entity.UploadReturnBean;
 import com.keao.edu.common.exception.BizException;
 import com.keao.edu.thirdparty.storage.StoragePluginContext;
-import com.keao.edu.thirdparty.storage.provider.AliyunOssStoragePlugin;
-import com.keao.edu.thirdparty.storage.provider.QiniuKodoStoragePlugin;
+import com.keao.edu.thirdparty.storage.provider.KS3StoragePlugin;
 import com.keao.edu.util.upload.UploadUtil;
-import com.keao.edu.thirdparty.storage.StoragePlugin;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang3.StringUtils;
@@ -68,7 +66,7 @@ public class UploadFileService {
 			return uploadReturn;
 		}
 
-		String url = storagePluginContext.uploadFile(AliyunOssStoragePlugin.PLUGIN_NAME,staticFloder + folder, file);
+		String url = storagePluginContext.uploadFile(KS3StoragePlugin.PLUGIN_NAME,staticFloder + folder, file);
 
 		FileUtils.deleteQuietly(file);
 

+ 20 - 4
edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/impl/EmployeeServiceImpl.java

@@ -10,8 +10,10 @@ import com.keao.edu.im.api.client.ImFeignService;
 import com.keao.edu.im.api.entity.ImResult;
 import com.keao.edu.im.api.entity.ImUserModel;
 import com.keao.edu.user.dao.EmployeeDao;
+import com.keao.edu.user.dao.OrganizationDao;
 import com.keao.edu.user.dao.SysUserDao;
 import com.keao.edu.user.entity.Employee;
+import com.keao.edu.user.entity.Organization;
 import com.keao.edu.user.service.EmployeeService;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -19,7 +21,9 @@ import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.List;
 import java.util.Set;
+import java.util.stream.Collectors;
 
 @Service
 public class EmployeeServiceImpl extends BaseServiceImpl<Integer, Employee> implements EmployeeService {
@@ -27,6 +31,8 @@ public class EmployeeServiceImpl extends BaseServiceImpl<Integer, Employee> impl
 	@Autowired
 	private EmployeeDao employeeDao;
 	@Autowired
+	private OrganizationDao organizationDao;
+	@Autowired
 	private ImFeignService imFeignService;
 	@Autowired
 	private SysUserDao sysUserDao;
@@ -118,10 +124,20 @@ public class EmployeeServiceImpl extends BaseServiceImpl<Integer, Employee> impl
 			}
 		}
 		employeeDao.update(employee);
-		//删除当前用户角色
-		sysUserDao.delEmployeeRole(sysUser.getId());
-		//新增用户角色
-		sysUserDao.batchAddEmployeeRole(sysUser.getId(),sysUser.getRoles());
+
+		Organization organization = organizationDao.findByUserId(employee.getUserId());
+		if(organization != null){
+			List<Organization> childOrgans = organizationDao.getChildOrgans(organization.getParentOrganIdTag());
+			List<Integer> userIds = childOrgans.stream().map(e -> e.getUserId()).collect(Collectors.toList());
+
+			sysUserDao.batchDelEmployeeRole(userIds);
+			if(sysUser.getRoles() != null && sysUser.getRoles().size() > 0){
+				sysUserDao.batchAddEmployeeRoles(userIds,sysUser.getRoles());
+			}
+		}else {
+			sysUserDao.delEmployeeRole(sysUser.getId());
+			sysUserDao.batchAddEmployeeRole(sysUser.getId(),sysUser.getRoles());
+		}
 		sysUserDao.update(sysUser);
 		imFeignService.update(new ImUserModel(sysUser.getId().toString(),sysUser.getRealName(),sysUser.getAvatar()));
 	}

+ 20 - 8
edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/impl/ExamOrganizationRelationServiceImpl.java

@@ -13,14 +13,12 @@ import com.keao.edu.common.page.QueryInfo;
 import com.keao.edu.common.service.impl.BaseServiceImpl;
 import com.keao.edu.common.tenant.TenantContextHolder;
 import com.keao.edu.thirdparty.message.MessageSenderPluginContext;
-import com.keao.edu.user.dao.ExamOrganizationRelationDao;
-import com.keao.edu.user.dao.ExaminationBasicDao;
-import com.keao.edu.user.dao.OrganizationDao;
-import com.keao.edu.user.dao.TeacherDao;
+import com.keao.edu.user.dao.*;
 import com.keao.edu.user.dto.ExamOrganizationRelationExtraDto;
 import com.keao.edu.user.entity.ExamOrganizationRelation;
 import com.keao.edu.user.entity.ExaminationBasic;
 import com.keao.edu.user.entity.Organization;
+import com.keao.edu.user.entity.TenantInfo;
 import com.keao.edu.user.enums.ExamStatusEnum;
 import com.keao.edu.user.enums.YesOrNoEnum;
 import com.keao.edu.user.page.ExamOrganizationRelationQueryInfo;
@@ -29,6 +27,8 @@ import com.keao.edu.user.service.OrganizationService;
 import com.keao.edu.user.service.ShortUrlService;
 import com.keao.edu.user.service.SysConfigService;
 import com.keao.edu.util.collection.MapUtil;
+import com.keao.edu.util.date.DateUtil;
+import org.apache.commons.lang.time.DateUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.poi.ss.formula.functions.T;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -61,6 +61,8 @@ public class ExamOrganizationRelationServiceImpl extends BaseServiceImpl<Long, E
 	private SysMessageFeignService sysMessageFeignService;
 	@Autowired
 	private SysConfigService sysConfigService;
+	@Autowired
+	private TenantInfoDao tenantInfoDao;
 
 	public static final Set<ExamStatusEnum> EDIT_ABLE_EXAM_STATUS=new HashSet<>(Arrays.asList(ExamStatusEnum.SETTING,ExamStatusEnum.NOT_START,ExamStatusEnum.APPLYING,ExamStatusEnum.APPLIED));
 
@@ -104,7 +106,7 @@ public class ExamOrganizationRelationServiceImpl extends BaseServiceImpl<Long, E
 
 	@Override
 	@Transactional(rollbackFor = Exception.class)
-	public void addExamOrganizations(Integer examId, String orgainIdsStr) {
+	public void addExamOrganizations(Long examId, String orgainIdsStr) {
 		if(Objects.isNull(examId)){
 			throw new BizException("请指定考级项目");
 		}
@@ -119,7 +121,7 @@ public class ExamOrganizationRelationServiceImpl extends BaseServiceImpl<Long, E
 			throw new BizException("当前状态暂不可添加合作单位");
 		}
 
-		Set<Integer> organIdsWithExam = examOrganizationRelationDao.getOrganIdsWithExam(examId);
+		Set<Integer> organIdsWithExam = examOrganizationRelationDao.getOrganIdsWithExam(examId.intValue());
 		List<Integer> organIds = Arrays.stream(orgainIdsStr.split(",")).map(e -> Integer.valueOf(e)).collect(Collectors.toList());
 		List<Organization> organs = organizationDao.getOrgans(organIds);
 		if(organs.size()!=organIds.size()){
@@ -141,7 +143,7 @@ public class ExamOrganizationRelationServiceImpl extends BaseServiceImpl<Long, E
 			}
 			ExamOrganizationRelation og = new ExamOrganizationRelation();
 			og.setTenantId(TenantContextHolder.getTenantId());
-			og.setExaminationBasicId(examId);
+			og.setExaminationBasicId(examId.intValue());
 			og.setOrganId(organId);
 			Organization organization = idOrganMap.get(organId);
 			if(Objects.isNull(organization)){
@@ -189,6 +191,15 @@ public class ExamOrganizationRelationServiceImpl extends BaseServiceImpl<Long, E
 			throw new BizException("考级项目已关闭");
 		}
 
+		StringBuffer expectRegistTime = new StringBuffer(DateUtil.dateToString(examinationBasic.getEnrollStartTime(), "yyyy年MM月dd日"));
+		expectRegistTime.append("-");
+		expectRegistTime.append(DateUtil.dateToString(examinationBasic.getEnrollStartTime(), "yyyy年MM月dd日"));
+
+		TenantInfo tenantInfo = tenantInfoDao.getWithOrgan(examinationBasic.getOrganId());
+		if(Objects.isNull(tenantInfo)){
+			throw new BizException("考级信息错误");
+		}
+
 		List<ExamOrganizationRelation> needUpdate=new ArrayList<>();
 		for (ExamOrganizationRelation examOrgan : examOrgans) {
 			if(YesOrNoEnum.YES.equals(examOrgan.getSendUrlFlag())){
@@ -203,7 +214,8 @@ public class ExamOrganizationRelationServiceImpl extends BaseServiceImpl<Long, E
 			userPhoneMap.put(examOrgan.getOrganId(), student.getPhone());
 
 			SysMessageParams sysMessageParams=new SysMessageParams(MessageSenderPluginContext.MessageSender.YIMEI, MessageTypeEnum.EXAM_REGISTRATION_URL_PUSH,
-					userPhoneMap, null, 0, null, null, examOrgan.getUrl());
+					userPhoneMap, null, 0, null, null,
+					tenantInfo.getName(), examinationBasic.getName(), expectRegistTime.toString(), examOrgan.getUrl());
 			sysMessageFeignService.batchSendMessage(sysMessageParams);
 		}
 

+ 8 - 1
edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/impl/ExamReviewServiceImpl.java

@@ -9,6 +9,7 @@ import com.keao.edu.common.service.impl.BaseServiceImpl;
 import com.keao.edu.user.dao.ExamReviewDao;
 import com.keao.edu.user.dto.ExamReviewDto;
 import com.keao.edu.user.entity.ExamReview;
+import com.keao.edu.user.entity.ExaminationBasic;
 import com.keao.edu.user.entity.Subject;
 import com.keao.edu.user.enums.YesOrNoEnum;
 import com.keao.edu.user.page.ExamReviewQueryInfo;
@@ -53,12 +54,18 @@ public class ExamReviewServiceImpl extends BaseServiceImpl<Long, ExamReview> imp
 			params.put("offset", pageInfo.getOffset());
 			dataList = examReviewDao.findExamResult(params);
 			List<Integer> teacherIds = dataList.stream().map(ExamReviewDto::getTeacherId).collect(Collectors.toList());
+			List<Integer> studentIds = dataList.stream().map(ExamReviewDto::getStudentId).collect(Collectors.toList());
+			List<Long> examIds = dataList.stream().map(ExamReviewDto::getExaminationBasicId).collect(Collectors.toList());
 			List<Integer> subjectIds = dataList.stream().map(e->e.getExamRegistration().getSubjectId()).collect(Collectors.toList());
 			Map<Integer, String> teacherIdNameMap = this.getMap("sys_user", "id_", "real_name_", teacherIds, Integer.class, String.class);
+			Map<Integer, String> studentIdNameMap = this.getMap("sys_user", "id_", "real_name_", studentIds, Integer.class, String.class);
 			Map<Integer, String> subjectIdNameMap = this.getMap("subject", "id_", "name_", subjectIds, Integer.class, String.class);
+			Map<Long, String> examIdNameMap = this.getMap("examination_basic", "id_", "name_", examIds, Long.class, String.class);
 			for (ExamReviewDto e : dataList) {
-				e.setTeacher(new SysUser(e.getStudentId(),teacherIdNameMap.get(e.getStudentId())));
+				e.setTeacher(new SysUser(e.getTeacherId(),teacherIdNameMap.get(e.getTeacherId())));
 				e.getExamRegistration().setSubject(new Subject(e.getExamRegistration().getSubjectId(), subjectIdNameMap.get(e.getExamRegistration().getSubjectId())));
+				e.setStudentInfo(new SysUser(e.getStudentId(), studentIdNameMap.get(e.getStudentId())));
+				e.setExaminationBasic(new ExaminationBasic(e.getExaminationBasicId(), examIdNameMap.get(e.getExaminationBasicId())));
 			}
 		}
 		pageInfo.setRows(dataList);

+ 1 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/impl/ExamRoomServiceImpl.java

@@ -237,6 +237,7 @@ public class ExamRoomServiceImpl extends BaseServiceImpl<Long, ExamRoom> impleme
 		if(withoutExamRoomStudentNum>0){
 			throw new BizException("存在未安排教室的学员");
 		}
+
 	}
 
 	@Override

+ 42 - 6
edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/impl/ExaminationBasicServiceImpl.java

@@ -12,10 +12,12 @@ import com.keao.edu.user.dto.ExaminationBasicDto;
 import com.keao.edu.user.entity.*;
 import com.keao.edu.user.enums.ExamStatusEnum;
 import com.keao.edu.user.page.ExaminationQueryInfo;
+import com.keao.edu.user.service.ExamOrganizationRelationService;
 import com.keao.edu.user.service.ExaminationBasicService;
 import com.keao.edu.user.service.OrganizationService;
 import com.keao.edu.util.collection.MapUtil;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.time.DateUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -31,6 +33,8 @@ public class ExaminationBasicServiceImpl extends BaseServiceImpl<Long, Examinati
     @Autowired
     private ExaminationBasicDao examinationBasicDao;
     @Autowired
+    private ExamOrganizationRelationService examOrganizationRelationService;
+    @Autowired
     private ExamOrganizationRelationDao examOrganizationRelationDao;
     @Autowired
     private MusicTheoryDao musicTheoryDao;
@@ -49,6 +53,7 @@ public class ExaminationBasicServiceImpl extends BaseServiceImpl<Long, Examinati
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public ExaminationBasic addExaminationBasic(ExaminationBasic examinationBasic) {
         if (StringUtils.isBlank(examinationBasic.getName())) {
             throw new BizException("请填写项目名称");
@@ -73,6 +78,10 @@ public class ExaminationBasicServiceImpl extends BaseServiceImpl<Long, Examinati
         }
 
         examinationBasic.setTenantId(TenantContextHolder.getTenantId());
+        examinationBasic.setEnrollStartTime(DateUtils.setSeconds(examinationBasic.getEnrollStartTime(), 0));
+        examinationBasic.setEnrollEndTime(DateUtils.setSeconds(examinationBasic.getEnrollEndTime(), 0));
+        examinationBasic.setExpectExamStartTime(DateUtils.setSeconds(examinationBasic.getExpectExamStartTime(), 0));
+        examinationBasic.setExpectExamEndTime(DateUtils.setSeconds(examinationBasic.getExpectExamEndTime(), 0));
 
         List<MusicTheory> musicTheories = musicTheoryDao.getWithTenant(Integer.valueOf(examinationBasic.getTenantId()));
         if (CollectionUtils.isEmpty(musicTheories)) {
@@ -93,7 +102,6 @@ public class ExaminationBasicServiceImpl extends BaseServiceImpl<Long, Examinati
         }
 
         examMusicTheoryDao.batchInsert(examMusicTheories);
-
         return examinationBasic;
     }
 
@@ -120,6 +128,25 @@ public class ExaminationBasicServiceImpl extends BaseServiceImpl<Long, Examinati
     }
 
     @Override
+    public void updateExamBasicStatus(Long examId, ExamStatusEnum statusEnum) {
+        if(Objects.isNull(examId)){
+            throw new BizException("请指定考级项目");
+        }
+        ExaminationBasic existsExam = examinationBasicDao.get(examId);
+        if(Objects.isNull(existsExam)){
+            throw new BizException("考级项目不存在");
+        }
+        if(ExamStatusEnum.RESULT_CONFIRM.equals(existsExam.getStatus())){
+            throw new BizException("考级项目结果已确认");
+        }
+        if(ExamStatusEnum.SETTING.equals(existsExam.getStatus())&&ExamStatusEnum.NOT_START.equals(statusEnum)){
+            examOrganizationRelationService.addExamOrganizations(existsExam.getId(),existsExam.getOrganId().toString());
+        }
+        existsExam.setStatus(statusEnum);
+        examinationBasicDao.update(existsExam);
+    }
+
+    @Override
     public PageInfo<ExaminationBasicDto> findExaminationBasics(ExaminationQueryInfo queryInfo) {
         PageInfo<ExaminationBasicDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
         Map<String, Object> params = new HashMap<String, Object>();
@@ -169,10 +196,10 @@ public class ExaminationBasicServiceImpl extends BaseServiceImpl<Long, Examinati
         }
         List<ExamOrganizationRelation> examOrganizationRelations = examOrganizationRelationDao.getWithExam(examId);
         if (!CollectionUtils.isEmpty(examOrganizationRelations)) {
-            long totalRegistrationStudentNum = examOrganizationRelations.stream().map(ExamOrganizationRelation::getTotalRegistrationStudentNum).count();
-            long totalPaymentAmount = examOrganizationRelations.stream().map(ExamOrganizationRelation::getTotalPaymentAmount).count();
-            examinationBasic.setTotalRegistrationStudentNum((int) totalRegistrationStudentNum);
-            examinationBasic.setTotalPaymentAmount(new BigDecimal(totalPaymentAmount));
+            Integer totalRegistrationStudentNum = examOrganizationRelations.stream().mapToInt(ExamOrganizationRelation::getTotalRegistrationStudentNum).sum();
+            BigDecimal totalPaymentAmount = examOrganizationRelations.stream().map(ExamOrganizationRelation::getTotalPaymentAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+            examinationBasic.setTotalRegistrationStudentNum(totalRegistrationStudentNum);
+            examinationBasic.setTotalPaymentAmount(totalPaymentAmount);
             examinationBasic.setOrganNum(examOrganizationRelations.size());
         }
         if(Objects.nonNull(examinationBasic.getCreatorId())){
@@ -192,11 +219,17 @@ public class ExaminationBasicServiceImpl extends BaseServiceImpl<Long, Examinati
         if(Objects.isNull(existsExam)){
             throw new BizException("考级项目不存在");
         }
+        if(ExamStatusEnum.RESULT_CONFIRM.equals(existsExam.getStatus())){
+            throw new BizException("考级项目结果已确认");
+        }
+        if(ExamStatusEnum.CLOSE.equals(existsExam.getStatus())){
+            throw new BizException("考级项目已关闭");
+        }
         return examinationBasicDao.update(examinationBasic);
     }
 
     @Override
-    public void closeExam(Integer examId, String reason) {
+    public void closeExam(Integer organId, Integer examId, String reason) {
         if (Objects.isNull(examId)) {
             throw new BizException("请指定考级项目");
         }
@@ -204,6 +237,9 @@ public class ExaminationBasicServiceImpl extends BaseServiceImpl<Long, Examinati
         if (Objects.isNull(examinationBasic)) {
             throw new BizException("考级项目不存在");
         }
+
+        List<Integer> childOrganIds = organizationService.getChildOrganIds(organId, true);
+
         if (StringUtils.isBlank(reason)) {
             reason = "后台手动关闭";
         }

+ 9 - 8
edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/impl/OrganizationServiceImpl.java

@@ -28,6 +28,7 @@ import java.util.Collections;
 import java.util.List;
 import java.util.Objects;
 import java.util.Set;
+import java.util.stream.Collectors;
 
 @Service
 public class OrganizationServiceImpl extends BaseServiceImpl<Integer, Organization> implements OrganizationService {
@@ -162,17 +163,17 @@ public class OrganizationServiceImpl extends BaseServiceImpl<Integer, Organizati
 		}
 		sysUser.setRealName(organization.getName());
 		sysUser.setPhone(organization.getContactPhone());
+		organization.setUserId(organization1.getUserId());
 		organDao.update(organization);
 
-		organDao.getChildOrgans(organization.getParentOrganIdTag());
-		//删除当前用户角色
-		sysUserDao.delEmployeeRole(sysUser.getId());
-		//新增用户角色
+		List<Organization> childOrgans = organDao.getChildOrgans(organization1.getParentOrganIdTag());
+		List<Integer> userIds = childOrgans.stream().map(e -> e.getUserId()).collect(Collectors.toList());
+
+		sysUserDao.batchDelEmployeeRole(userIds);
 		if(sysUser.getRoles() != null && sysUser.getRoles().size() > 0){
-			sysUserDao.batchAddEmployeeRole(sysUser.getId(),sysUser.getRoles());
-			//删除当前用户以及子集用户角色
-			//新增当前用户和子集用户角色
+			sysUserDao.batchAddEmployeeRoles(userIds,sysUser.getRoles());
 		}
+
 		sysUserDao.update(sysUser);
 		imFeignService.update(new ImUserModel(sysUser.getId().toString(),sysUser.getRealName(),sysUser.getAvatar()));
 	}
@@ -203,7 +204,7 @@ public class OrganizationServiceImpl extends BaseServiceImpl<Integer, Organizati
 	public List<Organization> getChildOrgans(Integer organId) {
 		Organization organization = organDao.get(organId);
 		if(Objects.isNull(organization)){
-			throw new BizException("当前声部不存在");
+			throw new BizException("合作单位不存在");
 		}
 		List<Organization> selfAndChildOrgans = organDao.getChildOrgans(organization.getParentOrganIdTag());
 		if(null == selfAndChildOrgans){

+ 0 - 4
edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/impl/StudentServiceImpl.java

@@ -14,9 +14,7 @@ import com.keao.edu.user.dao.StudentDao;
 import com.keao.edu.user.dao.StudentExamResultDao;
 import com.keao.edu.user.dao.SysUserDao;
 import com.keao.edu.user.dto.StudentExamPaymentDto;
-import com.keao.edu.user.entity.Organization;
 import com.keao.edu.user.page.StudentApplyQueryInfo;
-import com.keao.edu.user.service.OrganizationService;
 import com.keao.edu.user.service.StudentService;
 import com.keao.edu.util.collection.MapUtil;
 import org.apache.commons.lang3.StringUtils;
@@ -44,8 +42,6 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
     @Autowired
     private StudentExamResultDao studentExamResultDao;
     @Autowired
-    private OrganizationService organizationService;
-    @Autowired
     private ImFeignService imFeignService;
 
     @Override

+ 1 - 1
edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/impl/SubjectServiceImpl.java

@@ -43,7 +43,7 @@ public class SubjectServiceImpl extends BaseServiceImpl<Integer, Subject> implem
             Subject subject1 = subjectDao.get(subject.getId());
             if(subject1.getParentSubjectId() == 0){
                 //是否有子类
-                List<Subject> byParentId = subjectDao.findByParentId(subject1.getParentSubjectId(), YesOrNoEnum.NO, subject.getTenantId());
+                List<Subject> byParentId = subjectDao.findByParentId(subject.getId(), YesOrNoEnum.NO, subject.getTenantId());
                 if(byParentId != null && byParentId.size() > 0){
                     throw new BizException("操作失败:有未删除的专业");
                 }

+ 23 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/impl/SysSuggestionServiceImpl.java

@@ -0,0 +1,23 @@
+package com.keao.edu.user.service.impl;
+
+
+import com.keao.edu.common.dal.BaseDAO;
+import com.keao.edu.common.service.impl.BaseServiceImpl;
+import com.keao.edu.user.dao.SysSuggestionDao;
+import com.keao.edu.user.entity.SysSuggestion;
+import com.keao.edu.user.service.SysSuggestionService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+public class SysSuggestionServiceImpl extends BaseServiceImpl<Long, SysSuggestion> implements SysSuggestionService {
+	
+	@Autowired
+	private SysSuggestionDao sysSuggestionDao;
+
+	@Override
+	public BaseDAO<Long, SysSuggestion> getDAO() {
+		return sysSuggestionDao;
+	}
+	
+}

+ 0 - 3
edu-user/edu-user-server/src/main/resources/config/mybatis/ExamOrganizationRelationMapper.xml

@@ -173,9 +173,6 @@
 					#{organId}
 				</foreach>
 			</if>
-			<if test="tenantId != null and tenantId != 0">
-				AND ear.tenant_id_ = #{tenantId}
-			</if>
 			<if test="settlementType!=null">
 				AND ear.settlement_type_=#{settlementType,typeHandler=com.keao.edu.common.dal.CustomEnumTypeHandler}
 			</if>

+ 1 - 7
edu-user/edu-user-server/src/main/resources/config/mybatis/ExamRegistrationMapper.xml

@@ -138,12 +138,6 @@
 
 	<sql id="queryCondition">
 		<where>
-			<if test="organIds!=null">
-				AND er.organ_id_ IN
-				<foreach collection="organIds" item="organId" separator="," open="(" close=")">
-					#{organId}
-				</foreach>
-			</if>
 			<if test="examId!=null">
 				AND er.examination_basic_id_ = #{examId}
 			</if>
@@ -277,7 +271,7 @@
 		LEFT JOIN exam_room_student_relation ersr ON ersr.student_id_ = er.student_id_
 		WHERE 1=1
 		<if test="organIds!=null">
-			AND ersr.organ_id_ IN
+			AND er.organ_id_ IN
 			<foreach collection="organIds" item="organI" separator="," open="(" close=")">
 				#{organI}
 			</foreach>

+ 27 - 4
edu-user/edu-user-server/src/main/resources/config/mybatis/ExamReviewMapper.xml

@@ -10,7 +10,9 @@
 		<result column="id_" property="id" />
 		<result column="examination_basic_id_" property="examinationBasicId" />
 		<result column="exam_registration_id_" property="examRegistrationId" />
+		<result column="exam_room_id_" property="examRoomId" />
 		<result column="teacher_id_" property="teacherId" />
+		<result column="teacher_type_" property="teacherType"/>
 		<result column="student_id_" property="studentId" />
 		<result column="evaluation_content_" property="evaluationContent" />
 		<result column="evaluation_result_" property="evaluationResult"/>
@@ -18,10 +20,11 @@
 		<result column="update_time_" property="updateTime" />
 		<result column="tenant_id_" property="tenantId" />
 		<result column="enable_edit_" property="enableEdit" typeHandler="com.keao.edu.common.dal.CustomEnumTypeHandler"/>
-		<association property="examinationBasic" javaType="com.keao.edu.user.entity.ExaminationBasic"/>
+		<association property="examinationBasic" column="exam_" resultMap="com.keao.edu.user.dao.ExaminationBasicDao.ExaminationBasic"/>
 	</resultMap>
 
 	<resultMap id="ExamReviewDto" type="com.keao.edu.user.dto.ExamReviewDto" extends="ExamReview">
+		<result column="exam_start_time_" property="examStartTime"/>
 		<association property="examRegistration" columnPrefix="regist_" resultMap="com.keao.edu.user.dao.ExamRegistrationDao.ExamRegistration"/>
 	</resultMap>
 	
@@ -37,9 +40,9 @@
 	
 	<!-- 向数据库增加一条记录 -->
 	<insert id="insert" parameterType="com.keao.edu.user.entity.ExamReview" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
-		INSERT INTO exam_review (id_,examination_basic_id_,teacher_id_,student_id_,evaluation_content_,
+		INSERT INTO exam_review (id_,examination_basic_id_,exam_room_id_,teacher_id_,teacher_type_,student_id_,evaluation_content_,
 		evaluation_result_,create_time_,update_time_,tenant_id_,enable_edit_,exam_registration_id_)
-		VALUES(#{id},#{examinationBasicId},#{teacherId},#{studentId},#{evaluationContent},
+		VALUES(#{id},#{examinationBasicId},#{examRoomId},#{teacherId},#{teacherType},#{studentId},#{evaluationContent},
 		#{evaluationResult},NOW(),NOW(),
 		#{tenantId},#{enableEdit,typeHandler=com.keao.edu.common.dal.CustomEnumTypeHandler},#{examRegistrationId})
 	</insert>
@@ -54,9 +57,15 @@
 			<if test="examRegistrationId != null">
 				exam_registration_id_ = #{examRegistrationId},
 			</if>
+			<if test="examRoomId != null">
+				exam_room_id_ = #{examRoomId},
+			</if>
 			<if test="teacherId != null">
 				teacher_id_ = #{teacherId},
 			</if>
+			<if test="teacherType != null">
+				teacher_type_ = #{teacherType},
+			</if>
 			<if test="evaluationResult != null">
 				evaluation_result_ = #{evaluationResult},
 			</if>
@@ -122,6 +131,15 @@
 			<if test="studentStatus!=null">
 				AND ere.status_=#{studentStatus,typeHandler=com.keao.edu.common.dal.CustomEnumTypeHandler}
 			</if>
+			<if test="teacherType!=null">
+				AND er.teacher_type_=#{teacherType}
+			</if>
+			<if test="examStartTime!=null">
+				AND DATE_FORMAT( ero.exam_start_time_, '%Y-%m-%d' ) = #{examStartTime}
+			</if>
+			<if test="search!=null and search!=''">
+				AND er.real_name_ LIKE CONCAT(#{search}, '%')
+			</if>
 		</where>
 	</sql>
 	<select id="findExamResult" resultMap="ExamReviewDto">
@@ -132,10 +150,14 @@
 			ere.organ_id_ regist_organ_id_,
 			ere.subject_id_ regist_subject_id_,
 			ere.level_ regist_level_,
-			ere.status_ regist_status_
+			ere.status_ regist_status_,
+			ere.card_no_ regist_card_no_,
+			ero.exam_start_time_
 		FROM
 			exam_review er
 			LEFT JOIN exam_registration ere ON ere.id_=er.exam_registration_id_
+			LEFT JOIN exam_room ero ON ero.id_=er.exam_room_id_
+			LEFT JOIN sys_user su ON su.id_=er.teacher_id_
 		<include refid="findExamResultCondition"/>
 		ORDER BY ere.id_ DESC
 		<include refid="global.limit"/>
@@ -146,6 +168,7 @@
 		FROM
 			exam_review er
 			LEFT JOIN exam_registration ere ON ere.id_=er.exam_registration_id_
+			LEFT JOIN sys_user su ON su.id_=er.teacher_id_
 		<include refid="findExamResultCondition"/>
 	</select>
 </mapper>

+ 3 - 0
edu-user/edu-user-server/src/main/resources/config/mybatis/OrganizationMapper.xml

@@ -109,6 +109,9 @@
 			<if test="tenantId != null and tenantId != 0">
 				AND tenant_id_ = #{tenantId}
 			</if>
+			<if test="organId != null">
+				AND id_ != #{organId}
+			</if>
 			<if test="organIds != null">
 				AND id_ IN
 				<foreach collection="organIds" item="organId" separator="," open="(" close=")">

+ 1 - 0
edu-user/edu-user-server/src/main/resources/config/mybatis/StudentExamResultMapper.xml

@@ -158,6 +158,7 @@
 	<select id="queryStudentExamResult" resultMap="StudentExamResult" parameterType="map">
 		SELECT
 			ser.*,
+			er.id_ regist_id_,
 			er.card_no_ regist_card_no_,
 			er.student_id_ regist_student_id_,
 			er.organ_id_ regist_organ_id_,

+ 77 - 0
edu-user/edu-user-server/src/main/resources/config/mybatis/SysSuggestionMapper.xml

@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<!--
+这个文件是自动生成的。
+不要修改此文件。所有改动将在下次重新自动生成时丢失。
+-->
+<mapper namespace="com.keao.edu.user.dao.SysSuggestionDao">
+
+    <resultMap type="com.keao.edu.user.entity.SysSuggestion" id="SysSuggestion">
+        <result column="id_" property="id"/>
+        <result column="mobile_no_" property="mobileNo"/>
+        <result column="title_" property="title"/>
+        <result column="content_" property="content"/>
+        <result column="user_id_" property="userId"/>
+        <result column="username_" property="username"/>
+        <result column="create_time_" property="createTime"/>
+        <result column="client_type_" property="clientType"/>
+    </resultMap>
+
+    <!-- 根据主键查询一条记录 -->
+    <select id="get" resultMap="SysSuggestion">
+		SELECT * FROM sys_suggestion WHERE id_ = #{id} 
+	</select>
+
+    <!-- 全查询 -->
+    <select id="findAll" resultMap="SysSuggestion">
+		SELECT * FROM sys_suggestion ORDER BY id_
+	</select>
+
+    <!-- 向数据库增加一条记录 -->
+    <insert id="insert" parameterType="com.keao.edu.user.entity.SysSuggestion" useGeneratedKeys="true" keyColumn="id"
+            keyProperty="id">
+        INSERT INTO sys_suggestion (id_,mobile_no_,title_,content_,user_id_,create_time_,client_type_)
+        VALUES(#{id},#{mobileNo},#{title},#{content},#{userId},now(),#{clientType})
+    </insert>
+
+    <!-- 根据主键查询一条记录 -->
+    <update id="update" parameterType="com.keao.edu.user.entity.SysSuggestion">
+        UPDATE sys_suggestion
+        <set>
+            <if test="clientType != null">
+                client_type_ = #{clientType},
+            </if>
+            <if test="userId != null">
+                user_id_ = #{userId},
+            </if>
+            <if test="title != null">
+                title_ = #{title},
+            </if>
+            <if test="content != null">
+                content_ = #{content},
+            </if>
+            <if test="mobileNo != null">
+                mobile_no_ = #{mobileNo},
+            </if>
+        </set>
+        WHERE id_ = #{id}
+    </update>
+
+    <!-- 根据主键删除一条记录 -->
+    <delete id="delete">
+		DELETE FROM sys_suggestion WHERE id_ = #{id} 
+	</delete>
+
+    <!-- 分页查询 -->
+    <select id="queryPage" resultMap="SysSuggestion" parameterType="map">
+        SELECT ss.*,CASE WHEN su.real_name_ IS NULL THEN su.username_ ELSE su.real_name_ END username_ FROM sys_suggestion ss
+        LEFT JOIN sys_user su ON su.id_ = ss.user_id_
+        ORDER BY ss.id_ DESC
+        <include refid="global.limit"/>
+    </select>
+
+    <!-- 查询当前表的总记录数 -->
+    <select id="queryCount" resultType="int">
+		SELECT COUNT(*) FROM sys_suggestion
+	</select>
+</mapper>

+ 14 - 0
edu-user/edu-user-server/src/main/resources/config/mybatis/SysUserMapper.xml

@@ -198,9 +198,23 @@
             (#{userId},#{item})
         </foreach>
     </insert>
+    <insert id="batchAddEmployeeRoles">
+        <foreach collection="userIds" item="userId" separator=";">
+            INSERT INTO sys_user_role(user_id_,role_id_) values
+            <foreach collection="roles" item="item" index="index" separator=",">
+                (#{userId},#{item})
+            </foreach>
+        </foreach>
+    </insert>
 
     <delete id="delEmployeeRole">
         DELETE FROM sys_user_role WHERE user_id_ = #{userId}
     </delete>
+    <delete id="batchDelEmployeeRole">
+        DELETE FROM sys_user_role WHERE user_id_ IN
+        <foreach collection="userIds" item="userId" separator="," open="(" close=")">
+            #{userId}
+        </foreach>
+    </delete>
 
 </mapper>

+ 10 - 0
edu-user/edu-user-server/src/main/resources/config/mybatis/TenantInfoMapper.xml

@@ -119,4 +119,14 @@
 		SELECT COUNT(*) FROM tenant_info ti
 		<include refid="queryPageCondition"/>
 	</select>
+
+    <select id="getWithOrgan" resultMap="TenantInfo">
+		SELECT
+			ti.*
+		FROM
+			tenant_info ti
+			LEFT JOIN organization o ON o.tenant_id_ = ti.id_
+		WHERE
+			o.id_=#{organId}
+	</select>
 </mapper>