فهرست منبع

Merge branch 'master' of http://git.dayaedu.com/yonge/edu-saas

# Conflicts:
#	edu-user/edu-user-server/src/main/java/com/keao/edu/user/dao/ExamSongDao.java
#	edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/ExamSongService.java
#	edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/impl/ExamRegistrationServiceImpl.java
#	edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/impl/ExamSongServiceImpl.java
#	edu-user/edu-user-server/src/main/resources/config/mybatis/ExamSongMapper.xml
zouxuan 5 سال پیش
والد
کامیت
37a75cfc6c
41فایلهای تغییر یافته به همراه568 افزوده شده و 88 حذف شده
  1. 4 2
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/controller/ExamMusicTheoryController.java
  2. 125 0
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/controller/ExamOrderController.java
  3. 7 0
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/controller/ExamOrganizationRelationController.java
  4. 9 0
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/controller/ExamSongController.java
  5. 11 3
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/controller/ExamSubjectController.java
  6. 2 2
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/controller/ExamSubjectSongController.java
  7. 1 1
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/controller/ExaminationBasicController.java
  8. 41 32
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/controller/StudentController.java
  9. 0 1
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/controller/UploadFileController.java
  10. 2 0
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/dao/ExamMusicTheoryDao.java
  11. 12 0
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/dao/ExamOrganizationRelationDao.java
  12. 16 1
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/dao/ExamRegistrationPaymentDao.java
  13. 24 0
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/dao/ExamSongDao.java
  14. 10 0
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/dao/ExamSubjectDao.java
  15. 5 0
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/dao/MusicTheoryDao.java
  16. 8 8
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/entity/ExamMusicTheory.java
  17. 1 1
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/entity/ExamRegistration.java
  18. 11 1
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/entity/ExamRegistrationPayment.java
  19. 1 0
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/enums/StudentRegistrationStatusEnum.java
  20. 12 0
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/ExamOrganizationRelationService.java
  21. 14 0
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/ExamRegistrationPaymentService.java
  22. 15 0
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/ExamSongService.java
  23. 11 0
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/ExamSubjectService.java
  24. 7 0
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/StudentService.java
  25. 10 0
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/impl/ExamMusicTheoryServiceImpl.java
  26. 22 1
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/impl/ExamOrganizationRelationServiceImpl.java
  27. 10 1
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/impl/ExamRegistrationPaymentServiceImpl.java
  28. 5 16
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/impl/ExamRegistrationServiceImpl.java
  29. 27 4
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/impl/ExamSongServiceImpl.java
  30. 5 0
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/impl/ExamSubjectServiceImpl.java
  31. 3 2
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/impl/ExamSubjectSongServiceImpl.java
  32. 34 2
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/impl/ExaminationBasicServiceImpl.java
  33. 1 1
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/impl/ShortUrlServiceImpl.java
  34. 17 7
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/impl/StudentServiceImpl.java
  35. 8 0
      edu-user/edu-user-server/src/main/resources/config/mybatis/ExamMusicTheoryMapper.xml
  36. 33 0
      edu-user/edu-user-server/src/main/resources/config/mybatis/ExamOrganizationRelationMapper.xml
  37. 17 2
      edu-user/edu-user-server/src/main/resources/config/mybatis/ExamRegistrationPaymentMapper.xml
  38. 10 0
      edu-user/edu-user-server/src/main/resources/config/mybatis/ExamSongMapper.xml
  39. 12 0
      edu-user/edu-user-server/src/main/resources/config/mybatis/ExamSubjectMapper.xml
  40. 1 0
      edu-user/edu-user-server/src/main/resources/config/mybatis/ExaminationBasicMapper.xml
  41. 4 0
      edu-user/edu-user-server/src/main/resources/config/mybatis/MusicTheoryMapper.xml

+ 4 - 2
edu-user/edu-user-server/src/main/java/com/keao/edu/user/controller/ExamMusicTheoryController.java

@@ -3,6 +3,7 @@ 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;
@@ -35,6 +36,7 @@ public class ExamMusicTheoryController extends BaseController {
     @ApiOperation("新增")
     @PostMapping(value = "/add")
     public HttpResponseResult add(ExamMusicTheory examMusicTheory) {
+        examMusicTheory.setTenantId(TenantContextHolder.getTenantId().toString());
         examMusicTheoryService.insert(examMusicTheory);
         return succeed();
     }
@@ -56,8 +58,8 @@ public class ExamMusicTheoryController extends BaseController {
 
     @ApiOperation("获取项目乐理级别列表")
     @GetMapping(value = "/getTheoryLevelList")
-    public HttpResponseResult<List<ExamMusicTheory>> getTheoryLevelList(Integer examinationBasicId) {
-        return succeed(examMusicTheoryService.getTheoryLevelList(examinationBasicId));
+    public HttpResponseResult<List<ExamMusicTheory>> getTheoryLevelList(Integer examId) {
+        return succeed(examMusicTheoryService.getTheoryLevelList(examId));
     }
 
 }

+ 125 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/controller/ExamOrderController.java

@@ -0,0 +1,125 @@
+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.thirdparty.adapay.ConfigInit;
+import com.keao.edu.thirdparty.adapay.Payment;
+import com.keao.edu.user.entity.ExamRegistrationPayment;
+import com.keao.edu.user.entity.ExamSong;
+import com.keao.edu.user.service.ExamRegistrationPaymentService;
+import com.keao.edu.user.service.ExamRegistrationService;
+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.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;
+
+    @ApiOperation("获取用户项目未支付的订单")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "examinationBasicId", value = "项目id", required = true, dataType = "Integer")})
+    @GetMapping(value = "/getExamIngOrder")
+    public HttpResponseResult<ExamRegistrationPayment> getExamIngOrder(Integer 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);
+    }
+
+
+}

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

@@ -8,6 +8,7 @@ import com.keao.edu.common.page.PageInfo;
 import com.keao.edu.user.dao.EmployeeDao;
 import com.keao.edu.user.entity.Employee;
 import com.keao.edu.user.entity.ExamOrganizationRelation;
+import com.keao.edu.user.entity.Organization;
 import com.keao.edu.user.page.ExamOrganizationRelationQueryInfo;
 import com.keao.edu.user.service.EmployeeService;
 import com.keao.edu.user.service.ExamOrganizationRelationService;
@@ -65,4 +66,10 @@ public class ExamOrganizationRelationController extends BaseController {
         return succeed();
     }
 
+    @ApiOperation("获取未关联到考级项目的合作单位")
+    @GetMapping(value = "/queryUnRelatedOrgans")
+    public HttpResponseResult<PageInfo<Organization>> queryUnRelatedOrgans(ExamOrganizationRelationQueryInfo queryInfo){
+        return succeed(examOrganizationRelationService.queryUnRelatedOrgans(queryInfo));
+    }
+
 }

+ 9 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/controller/ExamSongController.java

@@ -2,6 +2,7 @@ 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.exception.BizException;
 import com.keao.edu.common.page.PageInfo;
 import com.keao.edu.common.page.QueryInfo;
 import com.keao.edu.common.tenant.TenantContextHolder;
@@ -11,6 +12,7 @@ import com.keao.edu.user.service.ExamSongService;
 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.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -18,6 +20,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 import java.util.Date;
+import java.util.List;
 
 /**
  * @Author Joburgess
@@ -71,4 +74,10 @@ public class ExamSongController extends BaseController {
     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));
+    }
 }

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

@@ -2,6 +2,7 @@ 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;
@@ -9,6 +10,7 @@ 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.*;
 
@@ -16,7 +18,7 @@ import java.util.List;
 
 @RestController
 @RequestMapping("examSubject")
-@Api(tags = "考级专业服务")
+@Api(tags = "考级内容服务")
 public class ExamSubjectController extends BaseController {
 
     @Autowired
@@ -25,7 +27,13 @@ public class ExamSubjectController extends BaseController {
     @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));
+    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().toString()), examId));
     }
 }

+ 2 - 2
edu-user/edu-user-server/src/main/java/com/keao/edu/user/controller/ExamSubjectSongController.java

@@ -50,7 +50,7 @@ public class ExamSubjectSongController extends BaseController {
         return succeed();
     }
 
-    @ApiOperation("获取考级专业相应级别列表")
+    @ApiOperation("获取考级专业相应级别列表-报名")
     @ApiImplicitParams({
             @ApiImplicitParam(name = "examinationBasicId", value = "项目id", required = true, dataType = "Integer"),
             @ApiImplicitParam(name = "examSubjectId", value = "考试项目专业id", required = true, dataType = "Integer")})
@@ -59,7 +59,7 @@ public class ExamSubjectSongController extends BaseController {
         return succeed(examSubjectSongService.getExamSubjectLevels(examinationBasicId, examSubjectId));
     }
 
-    @ApiOperation("获取考级专业相应级别的曲目")
+    @ApiOperation("获取考级专业相应级别的曲目-报名")
     @ApiImplicitParams({
             @ApiImplicitParam(name = "examinationBasicId", value = "项目id", required = true, dataType = "Integer"),
             @ApiImplicitParam(name = "examSubjectId", value = "考试项目专业id", required = true, dataType = "Integer"),

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

@@ -49,7 +49,7 @@ public class ExaminationBasicController extends BaseController {
         return succeed();
     }
 
-    @ApiOperation("获取考级姓名信息")
+    @ApiOperation("获取考级项目信息")
     @PostMapping(value = "/getInfo")
     public HttpResponseResult<ExaminationBasic> getInfo(Integer examId){
         return succeed(examinationBasicService.getInfo(examId));

+ 41 - 32
edu-user/edu-user-server/src/main/java/com/keao/edu/user/controller/StudentController.java

@@ -29,44 +29,53 @@ import org.springframework.web.bind.annotation.RestController;
 @RequestMapping(value = "student")
 public class StudentController extends BaseController {
 
-	@Autowired
-	private StudentService studentService;
-	@Autowired
-	private SysUserFeignService sysUserFeignService;
+    @Autowired
+    private StudentService studentService;
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
 
-	@ApiOperation(value = "学员列表")
-	@GetMapping(value = "list")
+    @ApiOperation(value = "学员列表")
+    @GetMapping(value = "list")
     @PreAuthorize("@pcs.hasPermissions('student/list')")
-	public HttpResponseResult<PageInfo<Student>> list(QueryInfo queryInfo) {
-		return succeed(studentService.queryStudentPage(queryInfo));
-	}
+    public HttpResponseResult<PageInfo<Student>> list(QueryInfo queryInfo) {
+        return succeed(studentService.queryStudentPage(queryInfo));
+    }
 
-	@ApiOperation(value = "学员报考列表")
-	@PostMapping(value = "applyList")
+    @ApiOperation(value = "学员报考列表")
+    @PostMapping(value = "applyList")
     @PreAuthorize("@pcs.hasPermissions('student/applyList')")
-	public HttpResponseResult<PageInfo<StudentExamPaymentDto>> applyList(StudentApplyQueryInfo queryInfo) {
-		return succeed(studentService.queryApplyList(queryInfo));
-	}
+    public HttpResponseResult<PageInfo<StudentExamPaymentDto>> applyList(StudentApplyQueryInfo queryInfo) {
+        return succeed(studentService.queryApplyList(queryInfo));
+    }
 
-	@ApiOperation(value = "查询学员")
-	@GetMapping(value = "get")
+    @ApiOperation(value = "查询学员")
+    @GetMapping(value = "get")
     @PreAuthorize("@pcs.hasPermissions('student/get')")
-	public HttpResponseResult<Student> get(Integer id) {
-		return succeed(studentService.get(id));
-	}
+    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 = "学员报名")
+    @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));
+    }
 
-	@ApiOperation(value = "获取学生信息")
-	@GetMapping(value = "getStudent")
-	public HttpResponseResult<Student> getStudent() {
-		SysUser user = sysUserFeignService.queryUserInfo();
-		return succeed(studentService.getStudent(user.getId()));
-	}
 }

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

@@ -29,7 +29,6 @@ public class UploadFileController extends BaseController {
 	private UploadFileService uploadFileService;
 
 	@PostMapping(value = "uploadFile")
-	@PreAuthorize("@pcs.hasPermissions('uploadFile','system')")
 	public Object uploadFile(@ApiParam(value = "上传的文件", required = true) @RequestParam("file") MultipartFile file) {
 		try {
 			if (file != null && StringUtils.isNotBlank(file.getOriginalFilename())) {

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

@@ -8,6 +8,8 @@ import java.util.List;
 
 public interface ExamMusicTheoryDao extends BaseDAO<Integer, ExamMusicTheory> {
 
+    int batchInsert(@Param("emts") List<ExamMusicTheory> examMusicTheories);
+
     /**
      * 获取项目乐理级别列表
      * @param examinationBasicId

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

@@ -3,10 +3,12 @@ package com.keao.edu.user.dao;
 import com.keao.edu.common.dal.BaseDAO;
 import com.keao.edu.user.dto.ExamOrganRegistDto;
 import com.keao.edu.user.entity.ExamOrganizationRelation;
+import com.keao.edu.user.entity.Organization;
 import com.keao.edu.user.enums.YesOrNoEnum;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 public interface ExamOrganizationRelationDao extends BaseDAO<Long, ExamOrganizationRelation> {
@@ -79,4 +81,14 @@ public interface ExamOrganizationRelationDao extends BaseDAO<Long, ExamOrganizat
      * @return
      */
     Integer findByOrganId(@Param("organId") Integer organId);
+
+    /**
+     * @describe 获取未关联到考级项目的合作单位
+     * @author Joburgess
+     * @date 2020.07.03
+     * @param params:
+     * @return java.util.List<com.keao.edu.user.entity.Organization>
+     */
+    List<Organization> queryUnRelatedOrgans(Map<String, Object> params);
+    int countUnRelatedOrgans(Map<String, Object> params);
 }

+ 16 - 1
edu-user/edu-user-server/src/main/java/com/keao/edu/user/dao/ExamRegistrationPaymentDao.java

@@ -2,8 +2,23 @@ package com.keao.edu.user.dao;
 
 import com.keao.edu.common.dal.BaseDAO;
 import com.keao.edu.user.entity.ExamRegistrationPayment;
+import org.apache.ibatis.annotations.Param;
 
 public interface ExamRegistrationPaymentDao extends BaseDAO<Long, ExamRegistrationPayment> {
 
-	
+    /**
+     * 获取用户项目未支付的订单
+     *
+     * @param examinationBasicId
+     * @param userId
+     * @return
+     */
+    ExamRegistrationPayment getExamIngOrder(@Param("examinationBasicId") Integer examinationBasicId, @Param("userId") Integer userId);
+
+    /**
+     * 根据订单号获取订单
+     * @param orderNo
+     * @return
+     */
+    ExamRegistrationPayment getByOrderNo(@Param("orderNo") String orderNo);
 }

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

@@ -2,7 +2,9 @@ package com.keao.edu.user.dao;
 
 import com.keao.edu.common.dal.BaseDAO;
 import com.keao.edu.user.entity.ExamSong;
+import com.keao.edu.user.enums.SongTypeEnum;
 import org.apache.ibatis.annotations.Param;
+import org.springframework.security.core.parameters.P;
 
 import java.util.List;
 import java.util.Map;
@@ -18,6 +20,27 @@ public interface ExamSongDao extends BaseDAO<Integer, ExamSong> {
     List<ExamSong> getExamSongs(@Param("ids") String ids);
 
     /**
+     * @describe 根据专业获取曲目
+     * @author Joburgess
+     * @date 2020.07.03
+     * @param subjectId:
+     * @return java.util.List<com.keao.edu.user.entity.ExamSong>
+     */
+    List<ExamSong> getWithSubject(@Param("subjectId") Integer subjectId);
+
+    /**
+     * @describe 根据级别和类型获取曲库
+     * @author Joburgess
+     * @date 2020.07.03
+     * @param level:
+     * @param songType:
+     * @return java.util.List<com.keao.edu.user.entity.ExamSong>
+     */
+    List<ExamSong> getWithLevelAndType(@Param("tenantId") String tenantId,
+                                       @Param("level") String level,
+                                       @Param("songType")SongTypeEnum songType);
+
+    /**
      * COUNT学生端考级曲库
      * @param params
      * @return
@@ -30,4 +53,5 @@ public interface ExamSongDao extends BaseDAO<Integer, ExamSong> {
      * @return
      */
     List<ExamSong> querySongPage(Map<String, Object> params);
+
 }

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

@@ -29,5 +29,15 @@ public interface ExamSubjectDao extends BaseDAO<Long, ExamSubject> {
      */
     List<ExamSubjectDto> getSubjectWithExamId(@Param("examId") Integer examId);
 
+    /**
+     * @describe 获取与考级项目无关的专业
+     * @author Joburgess
+     * @date 2020.07.03
+     * @param tenantId:
+     * @param examId:
+     * @return java.util.List<com.keao.edu.user.entity.Subject>
+     */
+    List<Subject> getUnRelatedWithExamSubjects(@Param("tenantId") Integer tenantId,
+                                               @Param("examId") Integer examId);
 
 }

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

@@ -2,6 +2,9 @@ package com.keao.edu.user.dao;
 
 import com.keao.edu.common.dal.BaseDAO;
 import com.keao.edu.user.entity.MusicTheory;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * @author: wangyp
@@ -10,4 +13,6 @@ import com.keao.edu.user.entity.MusicTheory;
  */
 public interface MusicTheoryDao extends BaseDAO<Integer, MusicTheory> {
 
+    List<MusicTheory> getWithTenant(@Param("tenantId") Integer tenantId);
+
 }

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

@@ -20,7 +20,7 @@ public class ExamMusicTheory {
 	private java.math.BigDecimal fee;
 	
 	/**  */
-	private Integer tenantId;
+	private String tenantId;
 	
 	/**  */
 	private java.util.Date createTime;
@@ -59,15 +59,15 @@ public class ExamMusicTheory {
 	public java.math.BigDecimal getFee(){
 		return this.fee;
 	}
-			
-	public void setTenantId(Integer tenantId){
-		this.tenantId = tenantId;
+
+	public String getTenantId() {
+		return tenantId;
 	}
-	
-	public Integer getTenantId(){
-		return this.tenantId;
+
+	public void setTenantId(String tenantId) {
+		this.tenantId = tenantId;
 	}
-			
+
 	public void setCreateTime(java.util.Date createTime){
 		this.createTime = createTime;
 	}

+ 1 - 1
edu-user/edu-user-server/src/main/java/com/keao/edu/user/entity/ExamRegistration.java

@@ -9,7 +9,7 @@ import org.apache.commons.lang3.builder.ToStringBuilder;
 /**
  * 对应数据库表(exam_registration):
  */
-public class ExamRegistration extends Student {
+public class ExamRegistration {
 
 	private Integer id;
 	

+ 11 - 1
edu-user/edu-user-server/src/main/java/com/keao/edu/user/entity/ExamRegistrationPayment.java

@@ -25,6 +25,9 @@ public class ExamRegistrationPayment {
 	@ApiModelProperty(value = "交易流水号(由第三方返回)")
 	private String transNo;
 
+	@ApiModelProperty(value = "渠道收款账户号")
+	private String merNo;
+
 	@ApiModelProperty(value = "交易金额")
 	private java.math.BigDecimal transAmount;
 
@@ -87,6 +90,14 @@ public class ExamRegistrationPayment {
 	public String getTransNo(){
 		return this.transNo;
 	}
+
+	public String getMerNo() {
+		return merNo;
+	}
+
+	public void setMerNo(String merNo) {
+		this.merNo = merNo;
+	}
 			
 	public void setTransAmount(java.math.BigDecimal transAmount){
 		this.transAmount = transAmount;
@@ -140,5 +151,4 @@ public class ExamRegistrationPayment {
 	public String toString() {
 		return ToStringBuilder.reflectionToString(this);
 	}
-
 }

+ 1 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/enums/StudentRegistrationStatusEnum.java

@@ -7,6 +7,7 @@ import com.keao.edu.common.enums.BaseEnum;
  * @Date 2020.06.23
  */
 public enum  StudentRegistrationStatusEnum implements BaseEnum<String, StudentRegistrationStatusEnum> {
+    PAY_WAIT("PAY_WAIT", "等待缴费"),
     AUDIT_WAIT("AUDIT_WAIT", "等待审核"),
     AUDIT_PASS("AUDIT_PASS","通过"),
     AUDIT_REJECT("AUDIT_REJECT", "拒绝"),

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

@@ -3,7 +3,10 @@ package com.keao.edu.user.service;
 import com.keao.edu.common.page.PageInfo;
 import com.keao.edu.common.service.BaseService;
 import com.keao.edu.user.entity.ExamOrganizationRelation;
+import com.keao.edu.user.entity.Organization;
 import com.keao.edu.user.page.ExamOrganizationRelationQueryInfo;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.data.domain.Page;
 
 public interface ExamOrganizationRelationService extends BaseService<Long, ExamOrganizationRelation> {
 
@@ -35,4 +38,13 @@ public interface ExamOrganizationRelationService extends BaseService<Long, ExamO
      */
     void sendUrl(Integer examId, String organIds);
 
+    /**
+     * @describe 获取未关联到考级项目的合作单位
+     * @author Joburgess
+     * @date 2020.07.03
+     * @param queryInfo:
+     * @return org.springframework.data.domain.Page<com.keao.edu.user.entity.Organization>
+     */
+    PageInfo<Organization> queryUnRelatedOrgans(ExamOrganizationRelationQueryInfo queryInfo);
+
 }

+ 14 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/ExamRegistrationPaymentService.java

@@ -5,4 +5,18 @@ import com.keao.edu.user.entity.ExamRegistrationPayment;
 
 public interface ExamRegistrationPaymentService extends BaseService<Long, ExamRegistrationPayment> {
 
+    /**
+     * 获取用户未支付的订单
+     * @param examinationBasicId
+     * @param userId
+     * @return
+     */
+    ExamRegistrationPayment getExamIngOrder(Integer examinationBasicId,Integer userId);
+
+    /**
+     * 根据订单号获取订单
+     * @param OrderNo
+     * @return
+     */
+    ExamRegistrationPayment getByOrderNo(String OrderNo);
 }

+ 15 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/ExamSongService.java

@@ -4,13 +4,28 @@ import com.keao.edu.common.page.PageInfo;
 import com.keao.edu.common.service.BaseService;
 import com.keao.edu.user.entity.ExamSong;
 import com.keao.edu.user.page.ExamSongQueryInfo;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 public interface ExamSongService extends BaseService<Integer, ExamSong> {
 
     /**
+     * @describe 根据专业获取曲目
+     * @author Joburgess
+     * @date 2020.07.03
+     * @param subjectId:
+     * @return java.util.List<com.keao.edu.user.entity.ExamSong>
+     */
+    List<ExamSong> getWithSubject(Integer subjectId);
+
+
+    /**
      * 获取考级曲库
      * @param queryInfo
      * @return
      */
     PageInfo<ExamSong> querySongPage(ExamSongQueryInfo queryInfo);
+
+
 }

+ 11 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/ExamSubjectService.java

@@ -5,6 +5,7 @@ import com.keao.edu.common.service.BaseService;
 import com.keao.edu.user.dto.ExamSubjectDto;
 import com.keao.edu.user.entity.ExamSubject;
 import com.keao.edu.user.entity.Subject;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
@@ -17,4 +18,14 @@ public interface ExamSubjectService extends BaseService<Long, ExamSubject> {
      * @return
      */
     List<ExamSubjectDto> getExamSubjects(Integer ExamId);
+
+    /**
+     * @describe 获取与考级项目无关的专业
+     * @author Joburgess
+     * @date 2020.07.03
+     * @param tenantId:
+     * @param examId:
+     * @return java.util.List<com.keao.edu.user.entity.Subject>
+     */
+    List<Subject> getUnRelatedWithExamSubjects(Integer tenantId,Integer examId);
 }

+ 7 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/StudentService.java

@@ -51,4 +51,11 @@ public interface StudentService extends BaseService<Integer, Student> {
      * @return
      */
     Student getStudent(Integer userId);
+
+    /**
+     * 更新学员基本信息
+     * @param student
+     * @return
+     */
+    Student updateInfo(Student student);
 }

+ 10 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/impl/ExamMusicTheoryServiceImpl.java

@@ -1,6 +1,7 @@
 package com.keao.edu.user.service.impl;
 
 import com.keao.edu.common.dal.BaseDAO;
+import com.keao.edu.common.exception.BizException;
 import com.keao.edu.common.service.impl.BaseServiceImpl;
 import com.keao.edu.user.dao.ExamMusicTheoryDao;
 import com.keao.edu.user.entity.ExamMusicTheory;
@@ -9,6 +10,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
+import java.util.Objects;
 
 @Service
 public class ExamMusicTheoryServiceImpl extends BaseServiceImpl<Integer, ExamMusicTheory> implements ExamMusicTheoryService {
@@ -25,4 +27,12 @@ public class ExamMusicTheoryServiceImpl extends BaseServiceImpl<Integer, ExamMus
     public List<ExamMusicTheory> getTheoryLevelList(Integer examinationBasicId) {
         return examMusicTheoryDao.getTheoryLevelList(examinationBasicId);
     }
+
+    @Override
+    public long insert(ExamMusicTheory examMusicTheory) {
+        if(Objects.isNull(examMusicTheory.getExaminationBasicId())){
+            throw new BizException("请指定考级项目");
+        }
+        return super.insert(examMusicTheory);
+    }
 }

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

@@ -30,6 +30,7 @@ import com.keao.edu.util.collection.MapUtil;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.poi.ss.formula.functions.T;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Isolation;
 import org.springframework.transaction.annotation.Transactional;
@@ -156,7 +157,7 @@ public class ExamOrganizationRelationServiceImpl extends BaseServiceImpl<Long, E
 			if(YesOrNoEnum.YES.equals(examOrgan.getSendUrlFlag())){
 				continue;
 			}
-			String registrationUrl = baseUrl + "organId=" + examOrgan.getOrganId();
+			String registrationUrl = baseUrl + "examId=" + examOrgan.getExaminationBasicId();
 			String registShortUrl = shortUrlService.createShortUrl(registrationUrl);
 
 			examOrgan.setUrl(registShortUrl);
@@ -178,4 +179,24 @@ public class ExamOrganizationRelationServiceImpl extends BaseServiceImpl<Long, E
 			examinationBasicDao.update(examinationBasic);
 		}
 	}
+
+	@Override
+	public PageInfo<Organization> queryUnRelatedOrgans(ExamOrganizationRelationQueryInfo queryInfo) {
+		PageInfo<Organization> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
+		Map<String, Object> params = new HashMap<String, Object>();
+		MapUtil.populateMap(params, queryInfo);
+
+		List<Integer> nextLevelOrganIds = organizationService.getChildOrganIds(queryInfo.getOrganId(), true);
+		params.put("organIds", nextLevelOrganIds);
+
+		List<Organization> dataList = new ArrayList<>();
+		int count = examOrganizationRelationDao.countUnRelatedOrgans(params);
+		if (count > 0) {
+			pageInfo.setTotal(count);
+			params.put("offset", pageInfo.getOffset());
+			dataList = examOrganizationRelationDao.queryUnRelatedOrgans(params);
+		}
+		pageInfo.setRows(dataList);
+		return pageInfo;
+	}
 }

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

@@ -18,5 +18,14 @@ public class ExamRegistrationPaymentServiceImpl extends BaseServiceImpl<Long, Ex
 	public BaseDAO<Long, ExamRegistrationPayment> getDAO() {
 		return examRegistrationPaymentDao;
 	}
-	
+
+	@Override
+	public ExamRegistrationPayment getExamIngOrder(Integer examinationBasicId, Integer userId) {
+		return examRegistrationPaymentDao.getExamIngOrder(examinationBasicId,userId);
+	}
+
+	@Override
+	public ExamRegistrationPayment getByOrderNo(String OrderNo) {
+		return examRegistrationPaymentDao.getByOrderNo(OrderNo);
+	}
 }

+ 5 - 16
edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/impl/ExamRegistrationServiceImpl.java

@@ -1,7 +1,6 @@
 package com.keao.edu.user.service.impl;
 
 
-import com.keao.edu.auth.api.entity.SysUser;
 import com.keao.edu.common.dal.BaseDAO;
 import com.keao.edu.common.exception.BizException;
 import com.keao.edu.common.page.PageInfo;
@@ -13,6 +12,7 @@ import com.keao.edu.user.dto.ExamRegistrationDto;
 import com.keao.edu.user.dto.ExamRegistrationStatisticsDto;
 import com.keao.edu.user.entity.*;
 import com.keao.edu.user.enums.ExamStatusEnum;
+import com.keao.edu.user.enums.StudentRegistrationStatusEnum;
 import com.keao.edu.user.page.ExamRecordQueryInfo;
 import com.keao.edu.user.page.ExamRegistrationQueryInfo;
 import com.keao.edu.user.service.ExamRegistrationPaymentService;
@@ -38,8 +38,6 @@ public class ExamRegistrationServiceImpl extends BaseServiceImpl<Long, ExamRegis
     @Autowired
     private ExaminationBasicDao examinationBasicDao;
     @Autowired
-    private SysUserDao sysUserDao;
-    @Autowired
     private OrganizationService organizationService;
     @Autowired
     private PayService payService;
@@ -62,18 +60,10 @@ public class ExamRegistrationServiceImpl extends BaseServiceImpl<Long, ExamRegis
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Map<String, Object> addRegistration(ExamRegistration examRegistration) throws Exception {
-        SysUser sysUser = examRegistration.getSysUser();
         ExaminationBasic examinationBasic = examinationBasicDao.get(examRegistration.getExaminationBasicId().longValue());
         if (examinationBasic == null || !examinationBasic.getStatus().equals(ExamStatusEnum.APPLYING)) {
             throw new BizException("项目不在报名中,请核对");
         }
-        SysUser user = sysUserDao.get(examRegistration.getUserId());
-        user.setBirthdate(sysUser.getBirthdate());
-        user.setGender(sysUser.getGender());
-        user.setIdCardNo(examRegistration.getCardNo());
-        user.setRealName(sysUser.getRealName());
-        user.setNation(sysUser.getNation());
-        sysUserDao.update(user);
 
         //考试级别信息
         ExamSubjectSong examSubjectSong = examSubjectSongDao.get(examRegistration.getExamSubjectSongId());
@@ -95,14 +85,13 @@ public class ExamRegistrationServiceImpl extends BaseServiceImpl<Long, ExamRegis
             amount.add(examMusicTheory.getFee());
         }
 
-        examRegistration.setUserId(examRegistration.getStudentId());
-        studentDao.insert(examRegistration);
+        examRegistration.setStatus(StudentRegistrationStatusEnum.PAY_WAIT);
         examRegistrationDao.insert(examRegistration);
 
         ExamRegistrationPayment examRegistrationPayment = new ExamRegistrationPayment();
         examRegistrationPayment.setTenantId(examRegistration.getTenantId());
         examRegistrationPayment.setExamRegistrationId(examRegistration.getId().longValue());
-        examRegistrationPayment.setStudentId(examRegistration.getUserId());
+        examRegistrationPayment.setStudentId(examRegistration.getStudentId());
         examRegistrationPayment.setExaminationBasicId(examRegistration.getExaminationBasicId());
         examRegistrationPayment.setOrderNo(orderNo);
         examRegistrationPayment.setTransAmount(amount);
@@ -115,8 +104,8 @@ public class ExamRegistrationServiceImpl extends BaseServiceImpl<Long, ExamRegis
         Map<String, Object> payMap = payService.getPayMap(
                 amount,
                 orderNo,
-                baseApiUrl + "/api-student/studentOrder/notify",
-                baseApiUrl + "/api-student/studentOrder/paymentResult?orderNo=" + orderNo,
+                baseApiUrl + "/api-user/examOrder/notify",
+                baseApiUrl + "/api-user/examOrder/paymentResult?orderNo=" + orderNo,
                 examinationBasic.getName(),
                 examinationBasic.getName()
         );

+ 27 - 4
edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/impl/ExamSongServiceImpl.java

@@ -1,6 +1,7 @@
 package com.keao.edu.user.service.impl;
 
 import com.keao.edu.common.dal.BaseDAO;
+import com.keao.edu.common.exception.BizException;
 import com.keao.edu.common.page.PageInfo;
 import com.keao.edu.common.page.QueryInfo;
 import com.keao.edu.common.service.impl.BaseServiceImpl;
@@ -9,14 +10,13 @@ import com.keao.edu.user.entity.ExamSong;
 import com.keao.edu.user.page.ExamSongQueryInfo;
 import com.keao.edu.user.service.ExamSongService;
 import com.keao.edu.util.collection.MapUtil;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.poi.ss.formula.functions.T;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
 
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 @Service
 public class ExamSongServiceImpl extends BaseServiceImpl<Integer, ExamSong> implements ExamSongService {
@@ -30,6 +30,21 @@ public class ExamSongServiceImpl extends BaseServiceImpl<Integer, ExamSong> impl
 	}
 
     @Override
+    public long insert(ExamSong examSong) {
+        if(StringUtils.isBlank(examSong.getSubjectList())){
+            throw new BizException("请选择专业");
+        }
+	    if(Objects.isNull(examSong.getType())){
+	        throw new BizException("请选择曲库类别");
+        }
+        List<ExamSong> existsExamSongs = examSongDao.getWithLevelAndType(examSong.getTenantId(), examSong.getLevelList(), examSong.getType());
+	    if(!CollectionUtils.isEmpty(existsExamSongs)){
+	        throw new BizException("{}级别的{}已存在",examSong.getLevelList(), examSong.getType().getMsg());
+        }
+        return super.insert(examSong);
+    }
+
+    @Override
     public PageInfo<ExamSong> queryPage(QueryInfo queryInfo) {
         PageInfo<ExamSong> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
         Map<String, Object> params = new HashMap<String, Object>();
@@ -47,6 +62,14 @@ public class ExamSongServiceImpl extends BaseServiceImpl<Integer, ExamSong> impl
     }
 
     @Override
+    public List<ExamSong> getWithSubject(Integer subjectId) {
+	    if(Objects.isNull(subjectId)){
+	        throw new BizException("请选择专业");
+        }
+        return examSongDao.getWithSubject(subjectId);
+    }
+
+    @Override
     public PageInfo<ExamSong> querySongPage(ExamSongQueryInfo queryInfo) {
         PageInfo<ExamSong> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
         Map<String, Object> params = new HashMap<String, Object>();

+ 5 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/impl/ExamSubjectServiceImpl.java

@@ -27,4 +27,9 @@ public class ExamSubjectServiceImpl extends BaseServiceImpl<Long, ExamSubject> i
     public List<ExamSubjectDto> getExamSubjects(Integer ExamId) {
 		return examSubjectDao.getSubjectWithExamId(ExamId);
     }
+
+	@Override
+	public List<Subject> getUnRelatedWithExamSubjects(Integer tenantId, Integer examId) {
+		return examSubjectDao.getUnRelatedWithExamSubjects(tenantId, examId);
+	}
 }

+ 3 - 2
edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/impl/ExamSubjectSongServiceImpl.java

@@ -82,12 +82,13 @@ public class ExamSubjectSongServiceImpl extends BaseServiceImpl<Long, ExamSubjec
 			if(Objects.isNull(examSubjectSong.getRegistrationFee())){
 				throw new BizException("请指定报名费用");
 			}
+
+			examSubjectSong.setTenantId(TenantContextHolder.getTenantId().toString());
+
 			if(existSubjectIds.contains(examSubjectSong.getExamSubjectId().longValue())){
 				continue;
 			}
 
-			examSubjectSong.setTenantId(TenantContextHolder.getTenantId().toString());
-
 			ExamSubject newExamSubject=new ExamSubject();
 			newExamSubject.setExaminationBasicId(examSubjectSong.getExaminationBasicId());
 			newExamSubject.setTenantId(examSubjectSong.getTenantId());

+ 34 - 2
edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/impl/ExaminationBasicServiceImpl.java

@@ -5,16 +5,21 @@ import com.keao.edu.common.exception.BizException;
 import com.keao.edu.common.page.PageInfo;
 import com.keao.edu.common.service.impl.BaseServiceImpl;
 import com.keao.edu.common.tenant.TenantContextHolder;
+import com.keao.edu.user.dao.ExamMusicTheoryDao;
 import com.keao.edu.user.dao.ExamOrganizationRelationDao;
 import com.keao.edu.user.dao.ExaminationBasicDao;
+import com.keao.edu.user.dao.MusicTheoryDao;
 import com.keao.edu.user.dto.ExaminationBasicDto;
+import com.keao.edu.user.entity.ExamMusicTheory;
 import com.keao.edu.user.entity.ExamOrganizationRelation;
 import com.keao.edu.user.entity.ExaminationBasic;
 import com.keao.edu.user.api.enums.ExamModeEnum;
+import com.keao.edu.user.entity.MusicTheory;
 import com.keao.edu.user.enums.ExamStatusEnum;
 import com.keao.edu.user.page.ExaminationQueryInfo;
 import com.keao.edu.user.service.ExaminationBasicService;
 import com.keao.edu.util.collection.MapUtil;
+import org.apache.commons.beanutils.BeanUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -31,6 +36,10 @@ public class ExaminationBasicServiceImpl extends BaseServiceImpl<Long, Examinati
 	private ExaminationBasicDao examinationBasicDao;
 	@Autowired
 	private ExamOrganizationRelationDao examOrganizationRelationDao;
+	@Autowired
+	private MusicTheoryDao musicTheoryDao;
+	@Autowired
+	private ExamMusicTheoryDao examMusicTheoryDao;
 
 	@Override
 	public BaseDAO<Long, ExaminationBasic> getDAO() {
@@ -51,9 +60,29 @@ public class ExaminationBasicServiceImpl extends BaseServiceImpl<Long, Examinati
 		if(Objects.isNull(examinationBasic.getEnrollStartTime())||Objects.isNull(examinationBasic.getEnrollEndTime())){
 			throw new BizException("请指定考试开始与结束时间");
 		}
-		examinationBasic.setStatus(ExamStatusEnum.SETTING);
+
 		examinationBasic.setTenantId(TenantContextHolder.getTenantId().toString());
+
+		List<MusicTheory> musicTheories = musicTheoryDao.getWithTenant(Integer.valueOf(examinationBasic.getTenantId()));
+		if(CollectionUtils.isEmpty(musicTheories)){
+			throw new BizException("请设置乐理");
+		}
+
+		examinationBasic.setStatus(ExamStatusEnum.SETTING);
 		examinationBasicDao.insert(examinationBasic);
+
+		List<ExamMusicTheory> examMusicTheories=new ArrayList<>();
+		for (MusicTheory musicTheory : musicTheories) {
+			ExamMusicTheory emt=new ExamMusicTheory();
+			emt.setExaminationBasicId(examinationBasic.getId());
+			emt.setTenantId(examinationBasic.getTenantId());
+			emt.setLevel(musicTheory.getLevel());
+			emt.setFee(musicTheory.getFee());
+			examMusicTheories.add(emt);
+		}
+
+		examMusicTheoryDao.batchInsert(examMusicTheories);
+
 		return examinationBasic;
 	}
 
@@ -91,7 +120,10 @@ public class ExaminationBasicServiceImpl extends BaseServiceImpl<Long, Examinati
 			params.put("offset", pageInfo.getOffset());
 			dataList = examinationBasicDao.findExaminationBasics(params);
 			List<Integer> examIds = dataList.stream().map(ExaminationBasicDto::getId).collect(Collectors.toList());
-			List<ExamOrganizationRelation> examOrgans = examOrganizationRelationDao.getWithExams(examIds);
+			List<ExamOrganizationRelation> examOrgans = new ArrayList<>();
+			if(!CollectionUtils.isEmpty(examIds)){
+				examOrganizationRelationDao.getWithExams(examIds);
+			}
 			Map<Integer, List<ExamOrganizationRelation>> examOrgansMap = new HashMap<>();
 			if(!CollectionUtils.isEmpty(examOrgans)){
 				examOrgansMap = examOrgans.stream().collect(Collectors.groupingBy(ExamOrganizationRelation::getExaminationBasicId));

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

@@ -37,7 +37,7 @@ public class ShortUrlServiceImpl extends BaseServiceImpl<Long, ShortUrl> impleme
 		SysConfig baseUrlConfig = sysConfigService.findByParamName(SysConfigService.BASE_API_URL);
 
 		StringBuffer returnUrl=new StringBuffer(baseUrlConfig.getParanValue());
-		returnUrl.append(":8000/api-user/su/");
+		returnUrl.append("/api-user/su/");
 		returnUrl.append(shortUrl.getId());
 
 		return returnUrl.toString();

+ 17 - 7
edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/impl/StudentServiceImpl.java

@@ -65,14 +65,14 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
         SysUser user = sysUserDao.queryByPhone(sysUser.getPhone());
         if (user != null && user.getId() != null) {
             Student stu = studentDao.get(user.getId());
-            if(stu == null){
+            if (stu == null) {
                 student.setUserId(user.getId());
                 student.setTenantId(user.getTenantId());
                 studentDao.insert(student);
                 sysUser.setId(user.getId());
                 sysUser.setUserType(user.getUserType() + ",STUDENT");
                 sysUserDao.update(sysUser);
-            }else{
+            } else {
                 throw new BizException("用户已存在");
             }
             return;
@@ -82,7 +82,7 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
         sysUser.setTenantId(organization.getTenantId());
         sysUser.setUserType("STUDENT");
         sysUserDao.insert(sysUser);
-        ImResult imResult = imFeignService.register(new ImUserModel(sysUser.getId().toString(), sysUser.getRealName(),null));
+        ImResult imResult = imFeignService.register(new ImUserModel(sysUser.getId().toString(), sysUser.getRealName(), null));
         sysUser.setImToken(imResult.getToken());
         sysUserDao.update(sysUser);
         student.setUserId(sysUser.getId());
@@ -108,11 +108,11 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
     public PageInfo<Student> queryStudentPage(QueryInfo queryInfo) {
         PageInfo<Student> studentPageInfo = queryPage(queryInfo);
         List<Student> rows = studentPageInfo.getRows();
-        if(rows != null && rows.size() > 0){
+        if (rows != null && rows.size() > 0) {
             List<Integer> studentIds = rows.stream().map(e -> e.getUserId()).collect(Collectors.toList());
             //获取考试次数
-            Map<Integer,Integer> examNumMap = MapUtil.convertIntegerMap(studentExamResultDao.countExamNum(studentIds, queryInfo.getTenantId()));
-            rows.forEach(e->{
+            Map<Integer, Integer> examNumMap = MapUtil.convertIntegerMap(studentExamResultDao.countExamNum(studentIds, queryInfo.getTenantId()));
+            rows.forEach(e -> {
                 e.setExamNum(examNumMap.get(e.getUserId()));
             });
         }
@@ -135,7 +135,7 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
             Map<Integer, String> basicNameMap = this.getMap("examination_basic", "id_", "name_", basicIds, Integer.class, String.class);
             Map<Integer, String> organNameMap = this.getMap("organization", "id_", "name_", basicIds, Integer.class, String.class);
             Map<Integer, String> subjectNameMap = this.getMap("subject", "id_", "name_", basicIds, Integer.class, String.class);
-            dataList.forEach(e->{
+            dataList.forEach(e -> {
                 e.setExamBaseName(basicNameMap.get(e.getExamRegistration().getExaminationBasicId()));
                 e.setOrganName(organNameMap.get(e.getExamRegistration().getOrganId()));
                 e.setOrganName(subjectNameMap.get(e.getExamRegistration().getSubjectId()));
@@ -152,4 +152,14 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
     public Student getStudent(Integer userId) {
         return studentDao.getStudent(userId);
     }
+
+    @Override
+    @Transactional
+    public Student updateInfo(Student student) {
+        student.setId(student.getUserId());
+        if (sysUserDao.update(student) <= 0 || studentDao.update(student) <= 0) {
+            throw new BizException("学生信息更新失败,请重试");
+        }
+        return student;
+    }
 }

+ 8 - 0
edu-user/edu-user-server/src/main/resources/config/mybatis/ExamMusicTheoryMapper.xml

@@ -36,6 +36,14 @@
 		INSERT INTO exam_music_theory (id_,examination_basic_id_,level_,fee_,tenant_id_,create_time_,update_time_)
 		VALUES(#{id},#{examinationBasicId},#{level},#{fee},#{tenantId},NOW(),NOW())
 	</insert>
+
+	<insert id="batchInsert" parameterType="com.keao.edu.user.entity.ExamMusicTheory" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
+		INSERT INTO exam_music_theory (examination_basic_id_,level_,fee_,tenant_id_,create_time_,update_time_)
+		VALUES
+		<foreach collection="emts" item="emt" separator=",">
+			(#{emt.examinationBasicId},#{emt.level},#{emt.fee},#{emt.tenantId},NOW(),NOW())
+		</foreach>
+	</insert>
 	
 	<!-- 根据主键查询一条记录 -->
 	<update id="update" parameterType="com.keao.edu.user.entity.ExamMusicTheory">

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

@@ -225,7 +225,40 @@
 		</if>
 		GROUP BY o.id_
 	</select>
+
     <select id="findByOrganId" resultType="java.lang.Integer">
 		SELECT COUNT(DISTINCT id_) FROM exam_organization_relation WHERE organ_id_ = #{organId}
 	</select>
+
+	<sql id="queryUnRelatedOrgansCondition">
+		<where>
+			o.tenant_id_ = #{tenantId}
+			<if test="organIds!=null">
+				o.id_ IN
+				<foreach collection="organIds" item="organId" separator="," open="(" close=")">
+					#{organId}
+				</foreach>
+			</if>
+			AND NOT EXISTS ( SELECT organ_id_ FROM exam_organization_relation WHERE examination_basic_id_ = #{examId} AND organ_id_ = o.id_ )
+		</where>
+	</sql>
+
+    <select id="queryUnRelatedOrgans" resultMap="com.keao.edu.user.dao.OrganizationDao.Organization">
+		SELECT
+			*
+		FROM
+			organization o
+		<include refid="queryUnRelatedOrgansCondition"/>
+		ORDER BY o.id_
+		<include refid="global.limit"/>
+    </select>
+
+	<select id="countUnRelatedOrgans" resultType="int">
+		SELECT
+			COUNT(o.id_)
+		FROM
+			organization o
+		<include refid="queryUnRelatedOrgansCondition"/>
+    </select>
+
 </mapper>

+ 17 - 2
edu-user/edu-user-server/src/main/resources/config/mybatis/ExamRegistrationPaymentMapper.xml

@@ -13,6 +13,7 @@
 		<result column="examination_basic_id_" property="examinationBasicId" />
 		<result column="order_no_" property="orderNo" />
 		<result column="trans_no_" property="transNo" />
+		<result column="mer_no_" property="merNo" />
 		<result column="trans_amount_" property="transAmount" />
 		<result column="trans_status_" property="transStatus" />
 		<result column="trans_successed_time_" property="transSuccessedTime" />
@@ -38,8 +39,8 @@
 		SELECT SEQ_WSDEFINITION_ID.nextval AS ID FROM DUAL 
 		</selectKey>
 		-->
-		INSERT INTO exam_registration_payment (id_,exam_registration_id_,student_id_,examination_basic_id_,order_no_,trans_no_,trans_amount_,trans_status_,trans_successed_time_,create_time_,update_time_,tenant_id_)
-		VALUES(#{id},#{examRegistrationId},#{studentId},#{examinationBasicId},#{orderNo},#{transNo},#{transAmount},#{transStatus},#{transSuccessedTime},NOW(),NOW(),#{tenantId})
+		INSERT INTO exam_registration_payment (id_,exam_registration_id_,student_id_,examination_basic_id_,order_no_,trans_no_,mer_no_,trans_amount_,trans_status_,trans_successed_time_,create_time_,update_time_,tenant_id_)
+		VALUES(#{id},#{examRegistrationId},#{studentId},#{examinationBasicId},#{orderNo},#{transNo},#{transAmount},#{transStatus},#{merNo},#{transSuccessedTime},NOW(),NOW(),#{tenantId})
 	</insert>
 	
 	<!-- 根据主键查询一条记录 -->
@@ -70,6 +71,9 @@
 			<if test="transNo != null">
 			trans_no_ = #{transNo},
 			</if>
+			<if test="merNo != null">
+				mer_no_ = #{merNo},
+			</if>
 			<if test="transStatus != null">
 			trans_status_ = #{transStatus},
 			</if>
@@ -94,4 +98,15 @@
 	<select id="queryCount" resultType="int">
 		SELECT COUNT(*) FROM exam_registration_payment
 	</select>
+
+	<!-- 获取项目用户未支付的订单 -->
+    <select id="getExamIngOrder" resultMap="ExamRegistrationPayment">
+		SELECT * FROM exam_registration_payment WHERE student_id_=#{userId}
+		AND examination_basic_id_ = #{examinationBasicId} AND trans_status_ = 'ING'
+	</select>
+
+	<!-- 根据订单号获取订单 -->
+	<select id="getByOrderNo" resultMap="ExamRegistrationPayment">
+		SELECT * FROM exam_registration_payment WHERE order_no_ = #{orderNo}
+	</select>
 </mapper>

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

@@ -103,6 +103,16 @@
     <select id="getExamSongs" resultMap="ExamSong">
 		SELECT * FROM exam_song WHERE FIND_IN_SET(id_,#{ids})
 	</select>
+	<select id="getWithSubject" resultMap="ExamSong">
+		SELECT * FROM exam_song WHERE FIND_IN_SET(#{subjectId}, subject_list_)
+	</select>
+
+    <select id="getWithLevelAndType" resultMap="ExamSong">
+		SELECT * FROM exam_song
+		WHERE tenant_id_=#{tenantId}
+		AND level_list_=#{level}
+		AND type_=#{songType, typeHandler=com.keao.edu.common.dal.CustomEnumTypeHandler}
+    </select>
 	<select id="countSongPage" resultType="java.lang.Integer">
 
 	</select>

+ 12 - 0
edu-user/edu-user-server/src/main/resources/config/mybatis/ExamSubjectMapper.xml

@@ -84,4 +84,16 @@
 		SELECT es.id_ exam_subject_id_ ,s.* FROM exam_subject es
 		LEFT JOIN subject s on es.subject_id_ = s.id_ WHERE examination_basic_id_ = #{examId}
 	</select>
+
+    <select id="getUnRelatedWithExamSubjects" resultMap="com.keao.edu.user.dao.SubjectDao.Subject">
+		SELECT
+			*
+		FROM
+			`subject` s
+		WHERE
+			s.parent_subject_id_ != 0
+			AND s.del_flag_ = 0
+			AND s.tenant_id_ = #{tenantId}
+			AND NOT EXISTS (SELECT subject_id_ FROM exam_subject WHERE examination_basic_id_=#{examId} AND subject_id_=s.id_)
+    </select>
 </mapper>

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

@@ -175,6 +175,7 @@
 	<select id="findExaminationBasics" resultMap="ExaminationBasicDto" parameterType="map">
 		SELECT * FROM examination_basic
 		<include refid="queryCondition"/>
+		ORDER BY id_ DESC
 		<include refid="global.limit"/>
 	</select>
 

+ 4 - 0
edu-user/edu-user-server/src/main/resources/config/mybatis/MusicTheoryMapper.xml

@@ -88,4 +88,8 @@
 		SELECT COUNT(*) FROM music_theory
 		<include refid="queryCondition"/>
 	</select>
+
+	<select id="getWithTenant" resultMap="MusicTheory">
+		SELECT * FROM music_theory WHERE tenant_id_=#{tenantId}
+	</select>
 </mapper>