周箭河 il y a 5 ans
Parent
commit
0f4578b8d6
100 fichiers modifiés avec 3891 ajouts et 405 suppressions
  1. 7 5
      mec-auth/mec-auth-api/src/main/java/com/ym/mec/auth/api/client/SysUserFeignService.java
  2. 4 6
      mec-auth/mec-auth-api/src/main/java/com/ym/mec/auth/api/client/fallback/SysUserFeignServiceFallback.java
  3. 0 11
      mec-auth/mec-auth-api/src/main/java/com/ym/mec/auth/api/entity/SysUser.java
  4. 2 2
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/web/controller/TokenController.java
  5. 31 26
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/web/controller/UserController.java
  6. 2 6
      mec-auth/mec-auth-server/src/main/resources/config/mybatis/SysUserMapper.xml
  7. 5 0
      mec-biz/pom.xml
  8. 9 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ClassGroupDao.java
  9. 9 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleComplaintsDao.java
  10. 27 3
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleDao.java
  11. 2 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/DemoGroupCoursesPlanDao.java
  12. 10 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/DemoGroupDao.java
  13. 20 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentPaymentOrderDao.java
  14. 10 2
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentRegistrationDao.java
  15. 9 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentVipGroupPaymentDao.java
  16. 9 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SysUserContractsDao.java
  17. 9 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SysUserTsignDao.java
  18. 17 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TeacherDefaultVipGroupSalaryDao.java
  19. 9 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/VipGroupActivityDao.java
  20. 7 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/VipGroupClassGroupMapperDao.java
  21. 40 17
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/VipGroupDao.java
  22. 7 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/VipGroupDefaultClassesUnitPriceDao.java
  23. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentCourseHomeworkCommentDto.java
  24. 59 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentInfo.java
  25. 5 5
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentVipGroupShowListDto.java
  26. 20 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/VipGroupActivityAddDto.java
  27. 12 2
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/VipGroupApplyBaseInfoDto.java
  28. 3 2
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/VipGroupApplyDto.java
  29. 43 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/VipGroupBuyParamsDto.java
  30. 42 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/VipGroupCostCountDto.java
  31. 65 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/VipGroupCostCountParamsDto.java
  32. 34 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/VipGroupSalarySettlementDto.java
  33. 47 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/VipGroupSalarySettlementTypeDto.java
  34. 0 10
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CourseSchedule.java
  35. 115 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CourseScheduleComplaints.java
  36. 35 11
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/DemoGroupCoursesPlan.java
  37. 16 9
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentApplyRefunds.java
  38. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentCourseHomeworkReply.java
  39. 150 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentCourseScheduleRecordDto.java
  40. 81 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentVipGroupPayment.java
  41. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/SysUserCashAccountDetail.java
  42. 114 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/SysUserContracts.java
  43. 67 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/SysUserTsign.java
  44. 92 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/TeacherDefaultVipGroupSalary.java
  45. 51 8
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/VipGroup.java
  46. 9 8
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/VipGroupActivity.java
  47. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/OrderDetailTypeEnum.java
  48. 40 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/SalarySettlementTypeEnum.java
  49. 42 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/VipGroupActivityTypeEnum.java
  50. 38 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/VipGroupStatusEnum.java
  51. 80 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/StudentCourseScheduleRecordQueryInfo.java
  52. 22 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/StudentRegistrationQueryInfo.java
  53. 20 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/VipGroupActivityQueryInfo.java
  54. 57 0
      mec-biz/src/main/java/com/ym/mec/biz/service/ContractService.java
  55. 8 0
      mec-biz/src/main/java/com/ym/mec/biz/service/CourseScheduleComplaintsService.java
  56. 29 1
      mec-biz/src/main/java/com/ym/mec/biz/service/CourseScheduleService.java
  57. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/service/StudentPaymentOrderService.java
  58. 10 6
      mec-biz/src/main/java/com/ym/mec/biz/service/StudentRegistrationService.java
  59. 8 0
      mec-biz/src/main/java/com/ym/mec/biz/service/StudentVipGroupPaymentService.java
  60. 8 0
      mec-biz/src/main/java/com/ym/mec/biz/service/SysUserContractsService.java
  61. 8 0
      mec-biz/src/main/java/com/ym/mec/biz/service/SysUserTsignService.java
  62. 8 0
      mec-biz/src/main/java/com/ym/mec/biz/service/TeacherDefaultVipGroupSalaryService.java
  63. 1 2
      mec-biz/src/main/java/com/ym/mec/biz/service/UploadFileService.java
  64. 24 0
      mec-biz/src/main/java/com/ym/mec/biz/service/VipGroupActivityService.java
  65. 67 14
      mec-biz/src/main/java/com/ym/mec/biz/service/VipGroupService.java
  66. 361 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ContractServiceImpl.java
  67. 23 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleComplaintsServiceImpl.java
  68. 65 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java
  69. 18 7
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/DemoGroupServiceImpl.java
  70. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/EmployeeServiceImpl.java
  71. 8 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java
  72. 9 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentOrderServiceImpl.java
  73. 11 4
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRegistrationServiceImpl.java
  74. 23 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentVipGroupPaymentServiceImpl.java
  75. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysMessageServiceImpl.java
  76. 23 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysUserContractsServiceImpl.java
  77. 23 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysUserTsignServiceImpl.java
  78. 23 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherDefaultVipGroupSalaryServiceImpl.java
  79. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherServiceImpl.java
  80. 23 4
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupActivityServiceImpl.java
  81. 211 5
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java
  82. 165 0
      mec-biz/src/main/resources/config/contracts/courses.ftl
  83. 147 0
      mec-biz/src/main/resources/config/contracts/goods.ftl
  84. 222 0
      mec-biz/src/main/resources/config/contracts/register.ftl
  85. BIN
      mec-biz/src/main/resources/config/fonts/simsun.ttc
  86. 3 0
      mec-biz/src/main/resources/config/mybatis/ClassGroupMapper.xml
  87. 86 0
      mec-biz/src/main/resources/config/mybatis/CourseScheduleComplaintsMapper.xml
  88. 84 2
      mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  89. 29 20
      mec-biz/src/main/resources/config/mybatis/DemoGroupCoursesPlanMapper.xml
  90. 186 178
      mec-biz/src/main/resources/config/mybatis/DemoGroupMapper.xml
  91. 3 2
      mec-biz/src/main/resources/config/mybatis/GoodsMapper.xml
  92. 6 2
      mec-biz/src/main/resources/config/mybatis/StudentApplyRefundsMapper.xml
  93. 8 2
      mec-biz/src/main/resources/config/mybatis/StudentCourseHomeworkMapper.xml
  94. 4 2
      mec-biz/src/main/resources/config/mybatis/StudentCourseHomeworkReplyMapper.xml
  95. 37 0
      mec-biz/src/main/resources/config/mybatis/StudentPaymentOrderMapper.xml
  96. 42 6
      mec-biz/src/main/resources/config/mybatis/StudentRegistrationMapper.xml
  97. 76 0
      mec-biz/src/main/resources/config/mybatis/StudentVipGroupPaymentMapper.xml
  98. 6 2
      mec-biz/src/main/resources/config/mybatis/SysUserCashAccountDetailMapper.xml
  99. 86 0
      mec-biz/src/main/resources/config/mybatis/SysUserContractsMapper.xml
  100. 68 0
      mec-biz/src/main/resources/config/mybatis/SysUserTsignMapper.xml

+ 7 - 5
mec-auth/mec-auth-api/src/main/java/com/ym/mec/auth/api/client/SysUserFeignService.java

@@ -2,21 +2,23 @@ package com.ym.mec.auth.api.client;
 
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.http.MediaType;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestParam;
 
 import com.ym.mec.auth.api.client.fallback.SysUserFeignServiceFallback;
-import com.ym.mec.auth.api.dto.SysUserInfo;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.common.config.FeignConfiguration;
 
 @FeignClient(name = "auth-server", configuration = { FeignConfiguration.class }, fallback = SysUserFeignServiceFallback.class)
 public interface SysUserFeignService {
 
-	@GetMapping(value = "query/{username}")
-	public SysUserInfo getUser(@PathVariable("username") String username);
+	@GetMapping(value = "user/queryUserById/{userId}")
+	public SysUser queryUserById(@PathVariable("userId") Integer userId);
 
 	@GetMapping(value = "user/queryUserByPhone")
-	public SysUser getUserByMobile(@RequestParam("mobile") String mobile);
+	public SysUser queryUserByMobile(@RequestParam("mobile") String mobile);
 
 	@PostMapping(value = "user/add", consumes = MediaType.APPLICATION_JSON_VALUE)
 	public Object addUser(SysUser user);

+ 4 - 6
mec-auth/mec-auth-api/src/main/java/com/ym/mec/auth/api/client/fallback/SysUserFeignServiceFallback.java

@@ -3,15 +3,14 @@ package com.ym.mec.auth.api.client.fallback;
 import org.springframework.stereotype.Component;
 
 import com.ym.mec.auth.api.client.SysUserFeignService;
-import com.ym.mec.auth.api.dto.SysUserInfo;
 import com.ym.mec.auth.api.entity.SysUser;
 
 @Component
 public class SysUserFeignServiceFallback implements SysUserFeignService {
 
 	@Override
-	public SysUserInfo getUser(String username) {
-		return new SysUserInfo();
+	public SysUser queryUserById(Integer userId) {
+		return null;
 	}
 
 	@Override
@@ -22,13 +21,12 @@ public class SysUserFeignServiceFallback implements SysUserFeignService {
 
 	@Override
 	public SysUser queryUserInfo() {
-		System.out.println("********************************");
 		return null;
 	}
 
 	@Override
-	public SysUser getUserByMobile(String mobile) {
-		return new SysUser();
+	public SysUser queryUserByMobile(String mobile) {
+		return null;
 	}
 
 	public Object addUser(SysUser user){

+ 0 - 11
mec-auth/mec-auth-api/src/main/java/com/ym/mec/auth/api/entity/SysUser.java

@@ -95,9 +95,6 @@ public class SysUser implements Serializable{
 	@ApiModelProperty(value = "真实姓名",required = false)
 	private String realName;
 
-	@ApiModelProperty(value = "e签宝唯一编号",required = false)
-	private String esignId;
-
 	@ApiModelProperty(value = "微信号",required = false)
 	private String wechatId;
 
@@ -269,14 +266,6 @@ public class SysUser implements Serializable{
 		this.idCardNo = idCardNo;
 	}
 
-	public String getEsignId() {
-		return esignId;
-	}
-
-	public void setEsignId(String esignId) {
-		this.esignId = esignId;
-	}
-
 	public String getWechatId() {
 		return wechatId;
 	}

+ 2 - 2
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/web/controller/TokenController.java

@@ -106,13 +106,13 @@ public class TokenController extends BaseController {
 	}
 
 	@PostMapping(value = "exit",consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
-	@ApiOperation(value = "出登录")
+	@ApiOperation(value = "退出登录")
 	public HttpResponseResult logout(@RequestHeader(value = HttpHeaders.AUTHORIZATION) String authHeader) {
 		if (StringUtils.isBlank(authHeader)) {
 			return failed("退出失败,token 为空");
 		}
 
-		String tokenValue = authHeader.replace(OAuth2AccessToken.BEARER_TYPE, StringUtils.EMPTY).trim();
+		String tokenValue = authHeader.toLowerCase().replace(OAuth2AccessToken.BEARER_TYPE.toLowerCase(), StringUtils.EMPTY).trim();
 
 		tokenService.revokeToken(tokenValue);
 

+ 31 - 26
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/web/controller/UserController.java

@@ -46,7 +46,7 @@ public class UserController extends BaseController {
 	@GetMapping("/query")
 	public Object query() {
 		AuthUser user = SecurityUtils.getUser();
-		if(user != null){
+		if (user != null) {
 			return succeed(sysUserService.get(user.getUserId()));
 		}
 		return failed();
@@ -55,7 +55,7 @@ public class UserController extends BaseController {
 	@ApiOperation(value = "根据用户编号获取用户基本信息")
 	@GetMapping("/getBasic")
 	public Object getBasic(Integer userId) {
-		if(userId == null){
+		if (userId == null) {
 			return failed("参数校验异常");
 		}
 		return succeed(sysUserService.getBasic(userId));
@@ -66,6 +66,11 @@ public class UserController extends BaseController {
 		return sysUserService.queryByPhone(mobile);
 	}
 
+	@GetMapping(value = "/queryUserById/{userId}")
+	public SysUser queryUserById(@PathVariable("userId") Integer userId) {
+		return sysUserService.get(userId);
+	}
+
 	@ApiOperation(value = "新增用户")
 	@PostMapping(value = "/add", consumes = MediaType.APPLICATION_JSON_VALUE)
 	public Object add(@RequestBody SysUser sysUser) {
@@ -73,48 +78,48 @@ public class UserController extends BaseController {
 	}
 
 	@ApiOperation(value = "设置密码")
-	@PostMapping(value = "/setPassword",consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
+	@PostMapping(value = "/setPassword", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
 	@ApiImplicitParams({ @ApiImplicitParam(name = "mobile", value = "手机号", required = true, dataType = "String"),
 			@ApiImplicitParam(name = "password", value = "密码", required = true, dataType = "String") })
-	public Object setPassword(String mobile,String password) {
-		if(StringUtils.isEmpty(mobile) || StringUtils.isEmpty(password)){
+	public Object setPassword(String mobile, String password) {
+		if (StringUtils.isEmpty(mobile) || StringUtils.isEmpty(password)) {
 			return failed();
 		}
 		SysUser sysUser = sysUserService.queryByPhone(mobile);
-		if(sysUser == null){
+		if (sysUser == null) {
 			return failed("用户不存在");
 		}
 		password = new BCryptPasswordEncoder().encode(password);
-		sysUserService.updatePassword(mobile,password);
+		sysUserService.updatePassword(mobile, password);
 		return succeed();
 	}
 
 	@ApiOperation(value = "修改密码")
-	@PostMapping(value = "/updatePassword",consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
+	@PostMapping(value = "/updatePassword", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
 	@ApiImplicitParams({ @ApiImplicitParam(name = "mobile", value = "手机号", required = true, dataType = "String"),
 			@ApiImplicitParam(name = "authCode", value = "验证码", required = true, dataType = "String"),
-			@ApiImplicitParam(name = "newPassword", value = "新密码", required = true, dataType = "String")})
-	public Object updatePassword(String mobile,String authCode,String newPassword) {
-		if(StringUtils.isEmpty(mobile) || StringUtils.isEmpty(authCode) || StringUtils.isEmpty(newPassword)){
+			@ApiImplicitParam(name = "newPassword", value = "新密码", required = true, dataType = "String") })
+	public Object updatePassword(String mobile, String authCode, String newPassword) {
+		if (StringUtils.isEmpty(mobile) || StringUtils.isEmpty(authCode) || StringUtils.isEmpty(newPassword)) {
 			return failed("参数校验异常");
 		}
 		SysUser sysUser = sysUserService.queryByPhone(mobile);
-		if(sysUser == null){
+		if (sysUser == null) {
 			return failed("用户不存在");
 		}
-		if(smsCodeService.verifyValidCode(mobile, authCode)){
-			sysUserService.updatePassword(mobile,new BCryptPasswordEncoder().encode(newPassword));
+		if (smsCodeService.verifyValidCode(mobile, authCode)) {
+			sysUserService.updatePassword(mobile, new BCryptPasswordEncoder().encode(newPassword));
 			return succeed();
-		}else {
+		} else {
 			return failed("验证码错误");
 		}
 	}
 
 	@ApiOperation(value = "修改用户")
-	@PostMapping(value = "/update",consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
+	@PostMapping(value = "/update", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
 	public Object update(SysUser sysUser) {
 		AuthUser user = SecurityUtils.getUser();
-		if(user != null){
+		if (user != null) {
 			Date date = new Date();
 			sysUser.setId(user.getUserId());
 			sysUser.setUpdateTime(date);
@@ -128,7 +133,7 @@ public class UserController extends BaseController {
 	@GetMapping("/getRole")
 	public Object getRole() {
 		AuthUser user = SecurityUtils.getUser();
-		if(user != null) {
+		if (user != null) {
 			return succeed(sysRoleService.findRoleByUserId(user.getUserId()));
 		}
 		return failed();
@@ -137,24 +142,24 @@ public class UserController extends BaseController {
 	@ApiOperation(value = "用户角色新增")
 	@ApiImplicitParams({ @ApiImplicitParam(name = "userId", value = "用户编号", required = true, dataType = "Integer"),
 			@ApiImplicitParam(name = "roleIds", value = "角色id,逗号分隔", required = true, dataType = "String") })
-	@PostMapping(value = "/addRole",consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
-	public Object getRole(String userId,String roleIds) {
-		if(StringUtils.isEmpty(userId) || StringUtils.isEmpty(roleIds)){
+	@PostMapping(value = "/addRole", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
+	public Object getRole(String userId, String roleIds) {
+		if (StringUtils.isEmpty(userId) || StringUtils.isEmpty(roleIds)) {
 			return failed(SecurityConstants.PARAM_VERIFY_EXCEPTION);
 		}
-		sysUserRoleService.batchInsert(Integer.parseInt(userId),roleIds);
+		sysUserRoleService.batchInsert(Integer.parseInt(userId), roleIds);
 		return succeed();
 	}
 
 	@ApiOperation(value = "用户角色删除")
 	@ApiImplicitParams({ @ApiImplicitParam(name = "userId", value = "用户编号", required = true, dataType = "Integer"),
 			@ApiImplicitParam(name = "roleIds", value = "角色id,逗号分隔", required = true, dataType = "String") })
-	@PostMapping(value = "/delRole",consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
-	public Object delRole(String userId,String roleIds) {
-		if(StringUtils.isEmpty(userId) || StringUtils.isEmpty(roleIds)){
+	@PostMapping(value = "/delRole", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
+	public Object delRole(String userId, String roleIds) {
+		if (StringUtils.isEmpty(userId) || StringUtils.isEmpty(roleIds)) {
 			return failed(SecurityConstants.PARAM_VERIFY_EXCEPTION);
 		}
-		sysUserRoleService.batchDel(Integer.parseInt(userId),roleIds);
+		sysUserRoleService.batchDel(Integer.parseInt(userId), roleIds);
 		return succeed();
 	}
 }

+ 2 - 6
mec-auth/mec-auth-server/src/main/resources/config/mybatis/SysUserMapper.xml

@@ -27,7 +27,6 @@
         <result column="email_" property="email"/>
         <result column="im_token_" property="imToken"/>
         <result column="id_card_no_" property="idCardNo"/>
-        <result column="esign_id_" property="esignId"/>
         <result column="wechat_id_" property="wechatId"/>
     </resultMap>
 
@@ -66,9 +65,9 @@
         </selectKey>
         -->
         INSERT INTO sys_user
-        (im_token_,id_,username_,salt_,phone_,avatar_,organ_id_,create_time_,update_time_,wx_openid_,qq_openid_,user_type_,gender_,nation_,birthdate_,email_,id_card_no_,esign_id_,wechat_id_,real_name_)
+        (im_token_,id_,username_,salt_,phone_,avatar_,organ_id_,create_time_,update_time_,wx_openid_,qq_openid_,user_type_,gender_,nation_,birthdate_,email_,id_card_no_,wechat_id_,real_name_)
         VALUES(#{imToken},#{id},#{username},#{salt},#{phone},#{avatar},#{organId},now(),now(),#{wxOpenid},#{qqOpenid},#{userType, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
-        #{gender},#{nation},#{birthdate},#{email},#{idCardNo},#{esignId},#{wechatId},#{realName})
+        #{gender},#{nation},#{birthdate},#{email},#{idCardNo},#{wechatId},#{realName})
     </insert>
 
     <!-- 根据主键查询一条记录 -->
@@ -126,9 +125,6 @@
             <if test="idCardNo != null">
                 id_card_no_ = #{idCardNo},
             </if>
-            <if test="esignId != null">
-                esign_id_ = #{esignId},
-            </if>
             <if test="wechatId != null">
                 wechat_id_ = #{wechatId},
             </if>

+ 5 - 0
mec-biz/pom.xml

@@ -34,5 +34,10 @@
 			<groupId>com.ym</groupId>
 			<artifactId>mec-thirdparty</artifactId>
 		</dependency>
+		
+		<dependency>
+			<groupId>com.ym</groupId>
+			<artifactId>snakerflowy</artifactId>
+		</dependency>
     </dependencies>
 </project>

+ 9 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ClassGroupDao.java

@@ -141,4 +141,13 @@ public interface ClassGroupDao extends BaseDAO<Integer, ClassGroup> {
      * @return
      */
     int countCoursePage(Map<String, Object> params);
+
+    /**
+     * @Author: Joburgess
+     * @Date: 2019/10/3
+     * @params [classGroupId]
+     * @return int
+     * @describe 统计班级人数
+     */
+    int countClassStudent(Long classGroupId);
 }

+ 9 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleComplaintsDao.java

@@ -0,0 +1,9 @@
+package com.ym.mec.biz.dal.dao;
+
+import com.ym.mec.biz.dal.entity.CourseScheduleComplaints;
+import com.ym.mec.common.dal.BaseDAO;
+
+public interface CourseScheduleComplaintsDao extends BaseDAO<Long, CourseScheduleComplaints> {
+
+	
+}

+ 27 - 3
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleDao.java

@@ -3,12 +3,13 @@ package com.ym.mec.biz.dal.dao;
 import com.ym.mec.biz.dal.dto.CourseScheduleDto;
 import com.ym.mec.biz.dal.dto.TeacherAttendanceDto;
 import com.ym.mec.biz.dal.entity.CourseSchedule;
+import com.ym.mec.biz.dal.entity.StudentCourseScheduleRecordDto;
 import com.ym.mec.common.dal.BaseDAO;
-
 import org.apache.ibatis.annotations.Param;
 
 import java.util.Date;
 import java.util.List;
+import java.util.Map;
 
 public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {
 
@@ -73,7 +74,8 @@ public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {
      * 获取学生有课日期
      */
     List<Date> getStudentCourseScheduleDate(@Param("studentId") Long studentId,
-                                            @Param("month") Date month);
+                                            @Param("month") Date month,
+                                            @Param("isAttend") Integer isAttend);
 
     /**
      * @Author: Joburgess
@@ -130,9 +132,31 @@ public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {
 
     /**
      * 获取班级的课程计划
-     *
      * @param classGroupList
      * @return
      */
     List<CourseSchedule> findClassGroupCourseSchedules(@Param("classGroupList") List classGroupList);
+
+    /**
+     * @Author: Joburgess
+     * @Date: 2019/9/30
+     * 获取学生上课记录
+     */
+    List<StudentCourseScheduleRecordDto> findStudentCourseScheduleRecords(Map<String,Object> params);
+
+    /**
+     * @Author: Joburgess
+     * @Date: 2019/9/30
+     * 统计学生上课记录
+     */
+    int countStudentCourseScheduleRecords(Map<String,Object> params);
+
+    /**
+     * @Author: Joburgess
+     * @Date: 2019/9/30
+     * 获取学生未上课记录
+     */
+    List<StudentCourseScheduleRecordDto> findStudentCourseScheduleNotStartRecords(@Param("userId") Long userId,
+                                                                                  @Param("date") Date date);
+
 }

+ 2 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/DemoGroupCoursesPlanDao.java

@@ -15,6 +15,7 @@ public interface DemoGroupCoursesPlanDao extends BaseDAO<Long, DemoGroupCoursesP
      * 根据上课时间批量记录临时上课计划
      */
     int batchInsertByDates(@Param("dates") List<Date> dates,
-                           @Param("demoGroupId") Long demoGroupId);
+                           @Param("demoGroupId") Long demoGroupId,
+                           @Param("classMinutes") Integer classMinutes);
 	
 }

+ 10 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/DemoGroupDao.java

@@ -33,13 +33,22 @@ public interface DemoGroupDao extends BaseDAO<Long, DemoGroup> {
      * @Date: 2019/9/25
      * 根据试听课信息构造课程计划
      */
-    List<CourseSchedule> createCourseScheduleByDemoGroup(@Param("demoGroup") DemoGroup demoGroup,
+    List<CourseSchedule> createCourseSchedulesByDemoGroup(@Param("demoGroup") DemoGroup demoGroup,
                                                          @Param("startTime") Date startTime,
                                                          @Param("classGroupId") Long classGroupId);
 
     /**
      * @Author: Joburgess
      * @Date: 2019/9/25
+     * 根据试听课信息构造课程计划
+     */
+    CourseSchedule createCourseScheduleByDemoGroupPlan(@Param("demoGroup") DemoGroup demoGroup,
+                                                         @Param("coursePlanId") Long coursePlanId,
+                                                         @Param("classGroupId") Long classGroupId);
+
+    /**
+     * @Author: Joburgess
+     * @Date: 2019/9/25
      * 统计乐团已报名人数
      */
     Integer countDemoGroupStudents(Long demoGroupId);

+ 20 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentPaymentOrderDao.java

@@ -1,9 +1,28 @@
 package com.ym.mec.biz.dal.dao;
 
+import com.ym.mec.biz.dal.entity.Goods;
 import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
+import com.ym.mec.biz.dal.enums.OrderDetailTypeEnum;
 import com.ym.mec.common.dal.BaseDAO;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 public interface StudentPaymentOrderDao extends BaseDAO<Long, StudentPaymentOrder> {
 
-	
+	/**
+	 * 查询商品列表
+	 * @param musicGroupId
+	 * @param type
+	 * @return
+	 */
+	List<Goods> queryApplyGoodsList(@Param("musicGroupId") Integer musicGroupId, @Param("type") OrderDetailTypeEnum type);
+
+	/**
+	 * @Author: Joburgess
+	 * @Date: 2019/10/3
+	 * 根据学生vip课获取缴费订单
+	 */
+	StudentPaymentOrder findByStudentVipGroup(@Param("vipGroupId") Long vipGroupId,
+											  @Param("userId") Long userId);
 }

+ 10 - 2
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentRegistrationDao.java

@@ -1,8 +1,8 @@
 package com.ym.mec.biz.dal.dao;
 
-import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dto.StudentApplyDetailDto;
 import com.ym.mec.biz.dal.dto.StudentFeeDto;
+import com.ym.mec.biz.dal.dto.StudentInfo;
 import com.ym.mec.biz.dal.entity.StudentRegistration;
 import com.ym.mec.common.dal.BaseDAO;
 
@@ -68,12 +68,12 @@ public interface StudentRegistrationDao extends BaseDAO<Long, StudentRegistratio
 
     /**
      * 根据乐团id和user_id 更新
-     *
      * @param studentRegistration
      * @return
      */
     Integer updateByUserIdAndMusicGroupId(@Param("studentRegistration") StudentRegistration studentRegistration);
 
+
     /**
      * 查询手机是否已注册
      *
@@ -89,4 +89,12 @@ public interface StudentRegistrationDao extends BaseDAO<Long, StudentRegistratio
      * @return
      */
     Map getSysUserByPhone(String phone);
+
+    /**
+     * 查询学生信息
+     * @param userId
+     * @return
+     */
+    StudentInfo queryStudentInfo(Integer userId);
+
 }

+ 9 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentVipGroupPaymentDao.java

@@ -0,0 +1,9 @@
+package com.ym.mec.biz.dal.dao;
+
+import com.ym.mec.biz.dal.entity.StudentVipGroupPayment;
+import com.ym.mec.common.dal.BaseDAO;
+
+public interface StudentVipGroupPaymentDao extends BaseDAO<Long, StudentVipGroupPayment> {
+
+	
+}

+ 9 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SysUserContractsDao.java

@@ -0,0 +1,9 @@
+package com.ym.mec.biz.dal.dao;
+
+import com.ym.mec.biz.dal.entity.SysUserContracts;
+import com.ym.mec.common.dal.BaseDAO;
+
+public interface SysUserContractsDao extends BaseDAO<Long, SysUserContracts> {
+
+	
+}

+ 9 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SysUserTsignDao.java

@@ -0,0 +1,9 @@
+package com.ym.mec.biz.dal.dao;
+
+import com.ym.mec.biz.dal.entity.SysUserTsign;
+import com.ym.mec.common.dal.BaseDAO;
+
+public interface SysUserTsignDao extends BaseDAO<Integer, SysUserTsign> {
+
+	
+}

+ 17 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TeacherDefaultVipGroupSalaryDao.java

@@ -0,0 +1,17 @@
+package com.ym.mec.biz.dal.dao;
+
+import com.ym.mec.biz.dal.entity.TeacherDefaultVipGroupSalary;
+import com.ym.mec.common.dal.BaseDAO;
+import org.apache.ibatis.annotations.Param;
+
+public interface TeacherDefaultVipGroupSalaryDao extends BaseDAO<Long, TeacherDefaultVipGroupSalary> {
+
+    /**
+     * @Author: Joburgess
+     * @Date: 2019/10/2
+     * 根据教师和课程类型获取老师vip课默认薪酬
+     */
+    TeacherDefaultVipGroupSalary findByTeacherAndCategory(@Param("userId") Long userId,
+                                                          @Param("categoryId") Long categoryId);
+
+}

+ 9 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/VipGroupActivityDao.java

@@ -3,7 +3,15 @@ package com.ym.mec.biz.dal.dao;
 import com.ym.mec.biz.dal.entity.VipGroupActivity;
 import com.ym.mec.common.dal.BaseDAO;
 
+import java.util.List;
+
 public interface VipGroupActivityDao extends BaseDAO<Integer, VipGroupActivity> {
 
-	
+    /**
+     * @Author: Joburgess
+     * @Date: 2019/10/2
+     * 根据课程类型获取vip课 活动方案
+     */
+    List<VipGroupActivity> findByCategory(Long categoryId);
+
 }

+ 7 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/VipGroupClassGroupMapperDao.java

@@ -5,5 +5,11 @@ import com.ym.mec.common.dal.BaseDAO;
 
 public interface VipGroupClassGroupMapperDao extends BaseDAO<Long, VipGroupClassGroupMapper> {
 
-	
+    /**
+     * @Author: Joburgess
+     * @Date: 2019/10/2
+     * 根据vip课获取对应班级
+     */
+	VipGroupClassGroupMapper findByVipGroupId(Long vipGroupId);
+
 }

+ 40 - 17
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/VipGroupDao.java

@@ -13,53 +13,76 @@ import java.util.Map;
 
 public interface VipGroupDao extends BaseDAO<Long, VipGroup> {
 
-    /**
-     * @Author: Joburgess
-     * @Date: 2019/9/20
-     * 获取对应学生vip课
-     */
+	/**
+	 * @Author: Joburgess
+	 * @Date: 2019/10/3
+	 * @params [userID]
+	 * @return java.util.List<com.ym.mec.biz.dal.dto.StudentManageVipGroupDto>
+	 * @describe 获取对应学生vip课
+	 */
 	List<StudentManageVipGroupDto> findStudentVipGroups(Long userID);
 
 	/**
 	 * @Author: Joburgess
-	 * @Date: 2019/9/23
-	 * 学生端获取vip课列表
+	 * @Date: 2019/10/3
+	 * @params [params]
+	 * @return java.util.List<com.ym.mec.biz.dal.dto.StudentVipGroupShowListDto>
+	 * @describe 学生端获取vip课列表
 	 */
 	List<StudentVipGroupShowListDto> findVipGroups(Map<String,Object> params);
 
 	/**
 	 * @Author: Joburgess
-	 * @Date: 2019/9/23
-	 * 统计vip数
+	 * @Date: 2019/10/3
+	 * @params [params]
+	 * @return int
+	 * @describe 统计vip数
 	 */
 	int countVipGorups(Map<String,Object> params);
 
 	/**
 	 * @Author: Joburgess
-	 * @Date: 2019/9/23
-	 * 获取小课详情
+	 * @Date: 2019/10/3
+	 * @params [vipGroupId]
+	 * @return com.ym.mec.biz.dal.dto.VipGroupManageDetailDto
+	 * @describe 获取小课详情
 	 */
 	VipGroupManageDetailDto getVipGroupBaseInfo(Long vipGroupId);
 
 	/**
 	 * @Author: Joburgess
-	 * @Date: 2019/9/23
-	 * 获取小课考勤记录
+	 * @Date: 2019/10/3
+	 * @params [params]
+	 * @return java.util.List<com.ym.mec.biz.dal.entity.CourseSchedule>
+	 * @describe 获取小课考勤记录
 	 */
     List<CourseSchedule> findVipGroupAttendances(Map<String,Object> params);
 
     /**
      * @Author: Joburgess
-     * @Date: 2019/9/23
-     * 统计小课考勤记录数
+     * @Date: 2019/10/3
+     * @params [params]
+     * @return int
+     * @describe 统计小课考勤记录数
      */
     int countVipGroupAttendance(Map<String,Object> params);
 
     /**
      * @Author: Joburgess
-     * @Date: 2019/9/23
-     * 获取vip课详情
+     * @Date: 2019/10/3
+     * @params [vipGroupId]
+     * @return com.ym.mec.biz.dal.dto.StudentVipGroupDetailDto
+     * @describe 获取vip课详情
      */
     StudentVipGroupDetailDto getVipGroupDetail(Long vipGroupId);
 
+    /**
+     * @Author: Joburgess
+     * @Date: 2019/10/3
+     * @params [vipGroupId]
+     * @return java.util.List<java.util.Map<java.lang.String,java.lang.Integer>>
+     * @describe 统计剩余课时数
+     */
+    List<Map<String,Integer>> countSurplusClassTimes(Long vipGroupId);
+
 }

+ 7 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/VipGroupDefaultClassesUnitPriceDao.java

@@ -5,5 +5,11 @@ import com.ym.mec.common.dal.BaseDAO;
 
 public interface VipGroupDefaultClassesUnitPriceDao extends BaseDAO<Integer, VipGroupDefaultClassesUnitPrice> {
 
-	
+    /**
+     * @Author: Joburgess
+     * @Date: 2019/10/2
+     * 根据vip课获取课时收费设置
+     */
+    VipGroupDefaultClassesUnitPrice getByVipGroup(Long vipGroupId);
+
 }

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentCourseHomeworkCommentDto.java

@@ -21,6 +21,9 @@ public class StudentCourseHomeworkCommentDto {
     @ApiModelProperty(value = "留言人姓名",required = false)
     private String userName;
 
+    @ApiModelProperty(value = "头像")
+    private String avatar;
+
     /** 留言内容 */
     @ApiModelProperty(value = "留言内容",required = true)
     private String content;
@@ -31,6 +34,14 @@ public class StudentCourseHomeworkCommentDto {
     @ApiModelProperty(value = "回复",required = false)
     private List<StudentCourseHomeworkCommentDto> replys;
 
+    public String getAvatar() {
+        return avatar;
+    }
+
+    public void setAvatar(String avatar) {
+        this.avatar = avatar;
+    }
+
     public Long getReplyId() {
         return replyId;
     }

+ 59 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentInfo.java

@@ -0,0 +1,59 @@
+package com.ym.mec.biz.dal.dto;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.entity.Subject;
+
+public class StudentInfo extends SysUser {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 9052387644105786621L;
+
+	private String name;
+	
+	private String grade;
+	
+	private String clazz;
+	
+	private Subject subject = new Subject();
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getGrade() {
+		return grade;
+	}
+
+	public void setGrade(String grade) {
+		this.grade = grade;
+	}
+
+	public String getClazz() {
+		return clazz;
+	}
+
+	public void setClazz(String clazz) {
+		this.clazz = clazz;
+	}
+
+	public Subject getSubject() {
+		return subject;
+	}
+
+	public void setSubject(Subject subject) {
+		this.subject = subject;
+	}
+	
+	@Override
+	public String toString() {
+		return ToStringBuilder.reflectionToString(this);
+	}
+}

+ 5 - 5
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentVipGroupShowListDto.java

@@ -30,7 +30,7 @@ public class StudentVipGroupShowListDto {
     private Integer offlineClassesNum;
 
     @ApiModelProperty(value = "学生购买价格",required = false)
-    private BigDecimal unitPrice;
+    private BigDecimal totalPrice;
 
     @ApiModelProperty(value = "预计招生人数",hidden = true)
     private Integer expectStudentNum;
@@ -111,12 +111,12 @@ public class StudentVipGroupShowListDto {
         this.offlineClassesNum = offlineClassesNum;
     }
 
-    public BigDecimal getUnitPrice() {
-        return unitPrice;
+    public BigDecimal getTotalPrice() {
+        return totalPrice;
     }
 
-    public void setUnitPrice(BigDecimal unitPrice) {
-        this.unitPrice = unitPrice;
+    public void setTotalPrice(BigDecimal totalPrice) {
+        this.totalPrice = totalPrice;
     }
 
     public Integer getExpectStudentNum() {

+ 20 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/VipGroupActivityAddDto.java

@@ -0,0 +1,20 @@
+package com.ym.mec.biz.dal.dto;
+
+import com.ym.mec.biz.dal.entity.VipGroupActivity;
+
+/**
+ * @Author Joburgess
+ * @Date 2019/10/1
+ */
+public class VipGroupActivityAddDto extends VipGroupActivity {
+
+    private VipGroupSalarySettlementDto vipGroupSalarySettlement;
+
+    public VipGroupSalarySettlementDto getVipGroupSalarySettlement() {
+        return vipGroupSalarySettlement;
+    }
+
+    public void setVipGroupSalarySettlement(VipGroupSalarySettlementDto vipGroupSalarySettlement) {
+        this.vipGroupSalarySettlement = vipGroupSalarySettlement;
+    }
+}

+ 12 - 2
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/VipGroupApplyBaseInfoDto.java

@@ -1,17 +1,19 @@
 package com.ym.mec.biz.dal.dto;
 
+import com.ym.mec.biz.dal.entity.VipGroup;
 import io.swagger.annotations.ApiModelProperty;
 
 import java.math.BigDecimal;
 
-import com.ym.mec.biz.dal.entity.VipGroup;
-
 /**
  * @Author Joburgess
  * @Date 2019/9/21
  */
 public class VipGroupApplyBaseInfoDto extends VipGroup {
 
+    @ApiModelProperty(value = "课时总数")
+    private Integer allCourseNum;
+
     @ApiModelProperty(value = "教师ID",required = false)
     private Long teacherId;
 
@@ -21,6 +23,14 @@ public class VipGroupApplyBaseInfoDto extends VipGroup {
     @ApiModelProperty(value = "预计招生人数",hidden = true)
     private Integer expectStudentNum;
 
+    public Integer getAllCourseNum() {
+        return allCourseNum;
+    }
+
+    public void setAllCourseNum(Integer allCourseNum) {
+        this.allCourseNum = allCourseNum;
+    }
+
     public Long getTeacherId() {
         return teacherId;
     }

+ 3 - 2
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/VipGroupApplyDto.java

@@ -1,11 +1,10 @@
 package com.ym.mec.biz.dal.dto;
 
+import com.ym.mec.biz.dal.entity.CourseSchedule;
 import io.swagger.annotations.ApiModelProperty;
 
 import java.util.List;
 
-import com.ym.mec.biz.dal.entity.CourseSchedule;
-
 /**
  * @Author Joburgess
  * @Date 2019/9/21
@@ -18,6 +17,8 @@ public class VipGroupApplyDto {
     @ApiModelProperty(value = "课程计划列表",required = false)
     private List<CourseSchedule> courseSchedules;
 
+
+
     public VipGroupApplyBaseInfoDto getVipGroupApplyBaseInfo() {
         return vipGroupApplyBaseInfo;
     }

+ 43 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/VipGroupBuyParamsDto.java

@@ -0,0 +1,43 @@
+package com.ym.mec.biz.dal.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @Author Joburgess
+ * @Date 2019/10/2
+ */
+public class VipGroupBuyParamsDto {
+
+    @ApiModelProperty(value = "vip课程ID")
+    private Long vipGroupId;
+
+    @ApiModelProperty(value = "付款渠道")
+    private String paymentChannel;
+
+    @ApiModelProperty(value = "业务渠道")
+    private String paymentBusinessChannel;
+
+    public Long getVipGroupId() {
+        return vipGroupId;
+    }
+
+    public void setVipGroupId(Long vipGroupId) {
+        this.vipGroupId = vipGroupId;
+    }
+
+    public String getPaymentChannel() {
+        return paymentChannel;
+    }
+
+    public void setPaymentChannel(String paymentChannel) {
+        this.paymentChannel = paymentChannel;
+    }
+
+    public String getPaymentBusinessChannel() {
+        return paymentBusinessChannel;
+    }
+
+    public void setPaymentBusinessChannel(String paymentBusinessChannel) {
+        this.paymentBusinessChannel = paymentBusinessChannel;
+    }
+}

+ 42 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/VipGroupCostCountDto.java

@@ -0,0 +1,42 @@
+package com.ym.mec.biz.dal.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+
+import java.math.BigDecimal;
+
+/**
+ * @Author Joburgess
+ * @Date 2019/10/2
+ */
+public class VipGroupCostCountDto {
+
+    @ApiModelProperty(value = "课程总费用")
+    private BigDecimal vipGroupCharge;
+
+    @ApiModelProperty(value = "老师总课酬")
+    private BigDecimal teacherSalary;
+
+    public VipGroupCostCountDto() {
+    }
+
+    public VipGroupCostCountDto(BigDecimal vipGroupCharge, BigDecimal teacherSalary) {
+        this.vipGroupCharge = vipGroupCharge;
+        this.teacherSalary = teacherSalary;
+    }
+
+    public BigDecimal getVipGroupCharge() {
+        return vipGroupCharge;
+    }
+
+    public void setVipGroupCharge(BigDecimal vipGroupCharge) {
+        this.vipGroupCharge = vipGroupCharge;
+    }
+
+    public BigDecimal getTeacherSalary() {
+        return teacherSalary;
+    }
+
+    public void setTeacherSalary(BigDecimal teacherSalary) {
+        this.teacherSalary = teacherSalary;
+    }
+}

+ 65 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/VipGroupCostCountParamsDto.java

@@ -0,0 +1,65 @@
+package com.ym.mec.biz.dal.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @Author Joburgess
+ * @Date 2019/10/1
+ */
+public class VipGroupCostCountParamsDto {
+
+    @ApiModelProperty("vip课程类型编号")
+    private Long vipGroupCategoryId;
+
+    @ApiModelProperty("vip课默认课程单价编号")
+    private Long vipGroupDefaultClassesUnitPriceId;
+
+    @ApiModelProperty("VIP课活动方案编号")
+    private Long vipGroupActivityId;
+
+    @ApiModelProperty(value = "线上课课时数", required = false)
+    private Integer onlineClassesNum;
+
+    @ApiModelProperty(value = "线下课课时数", required = false)
+    private Integer offlineClassesNum;
+
+    public Long getVipGroupCategoryId() {
+        return vipGroupCategoryId;
+    }
+
+    public void setVipGroupCategoryId(Long vipGroupCategoryId) {
+        this.vipGroupCategoryId = vipGroupCategoryId;
+    }
+
+    public Long getVipGroupDefaultClassesUnitPriceId() {
+        return vipGroupDefaultClassesUnitPriceId;
+    }
+
+    public void setVipGroupDefaultClassesUnitPriceId(Long vipGroupDefaultClassesUnitPriceId) {
+        this.vipGroupDefaultClassesUnitPriceId = vipGroupDefaultClassesUnitPriceId;
+    }
+
+    public Long getVipGroupActivityId() {
+        return vipGroupActivityId;
+    }
+
+    public void setVipGroupActivityId(Long vipGroupActivityId) {
+        this.vipGroupActivityId = vipGroupActivityId;
+    }
+
+    public Integer getOnlineClassesNum() {
+        return onlineClassesNum;
+    }
+
+    public void setOnlineClassesNum(Integer onlineClassesNum) {
+        this.onlineClassesNum = onlineClassesNum;
+    }
+
+    public Integer getOfflineClassesNum() {
+        return offlineClassesNum;
+    }
+
+    public void setOfflineClassesNum(Integer offlineClassesNum) {
+        this.offlineClassesNum = offlineClassesNum;
+    }
+}

+ 34 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/VipGroupSalarySettlementDto.java

@@ -0,0 +1,34 @@
+package com.ym.mec.biz.dal.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+
+/**
+ * @Author Joburgess
+ * @Date 2019/10/1
+ */
+public class VipGroupSalarySettlementDto implements Serializable {
+
+    @ApiModelProperty("先上课收费标准")
+    private VipGroupSalarySettlementTypeDto onlineSalarySettlement;
+
+    @ApiModelProperty("线下课收费标准")
+    private VipGroupSalarySettlementTypeDto offlineSalarySettlement;
+
+    public VipGroupSalarySettlementTypeDto getOnlineSalarySettlement() {
+        return onlineSalarySettlement;
+    }
+
+    public void setOnlineSalarySettlement(VipGroupSalarySettlementTypeDto onlineSalarySettlement) {
+        this.onlineSalarySettlement = onlineSalarySettlement;
+    }
+
+    public VipGroupSalarySettlementTypeDto getOfflineSalarySettlement() {
+        return offlineSalarySettlement;
+    }
+
+    public void setOfflineSalarySettlement(VipGroupSalarySettlementTypeDto offlineSalarySettlement) {
+        this.offlineSalarySettlement = offlineSalarySettlement;
+    }
+}

+ 47 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/VipGroupSalarySettlementTypeDto.java

@@ -0,0 +1,47 @@
+package com.ym.mec.biz.dal.dto;
+
+import com.ym.mec.biz.dal.enums.SalarySettlementTypeEnum;
+import com.ym.mec.biz.dal.enums.TeachModeEnum;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.math.BigDecimal;
+
+/**
+ * @Author Joburgess
+ * @Date 2019/10/1
+ */
+public class VipGroupSalarySettlementTypeDto {
+
+    @ApiModelProperty(value = "课程形式")
+    private TeachModeEnum teachMode;
+
+    @ApiModelProperty(value = "课酬结算方式")
+    private SalarySettlementTypeEnum salarySettlementType;
+
+    @ApiModelProperty(value = "课酬结算参数值")
+    private BigDecimal settlementValue;
+
+    public TeachModeEnum getTeachMode() {
+        return teachMode;
+    }
+
+    public void setTeachMode(TeachModeEnum teachMode) {
+        this.teachMode = teachMode;
+    }
+
+    public SalarySettlementTypeEnum getSalarySettlementType() {
+        return salarySettlementType;
+    }
+
+    public void setSalarySettlementType(SalarySettlementTypeEnum salarySettlementType) {
+        this.salarySettlementType = salarySettlementType;
+    }
+
+    public BigDecimal getSettlementValue() {
+        return settlementValue;
+    }
+
+    public void setSettlementValue(BigDecimal settlementValue) {
+        this.settlementValue = settlementValue;
+    }
+}

+ 0 - 10
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CourseSchedule.java

@@ -82,8 +82,6 @@ public class CourseSchedule {
 
 	private TeachModeEnum teachMode;
 
-	private boolean complaintStatus;
-	
 	private CourseScheduleType type;
 	
 	private String name;
@@ -184,14 +182,6 @@ public class CourseSchedule {
 		this.teachMode = teachMode;
 	}
 
-	public boolean isComplaintStatus() {
-		return complaintStatus;
-	}
-
-	public void setComplaintStatus(boolean complaintStatus) {
-		this.complaintStatus = complaintStatus;
-	}
-
 	public CourseScheduleType getType() {
 		return type;
 	}

+ 115 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CourseScheduleComplaints.java

@@ -0,0 +1,115 @@
+package com.ym.mec.biz.dal.entity;
+
+import com.ym.mec.biz.dal.enums.AuditStatusEnum;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+
+/**
+ * 对应数据库表(course_schedule_complaints):
+ */
+public class CourseScheduleComplaints {
+
+	/**  */
+	private Long id;
+	
+	/**  */
+	private Integer userId;
+	
+	/**  */
+	private Long courseScheduleId;
+	
+	/**  */
+	private String reason;
+	
+	/**  */
+	private AuditStatusEnum status;
+	
+	/**  */
+	private String wfProcessId;
+	
+	/**  */
+	private String wfOrderId;
+	
+	/**  */
+	private java.util.Date createTime;
+	
+	/**  */
+	private java.util.Date updateTime;
+	
+	public void setId(Long id){
+		this.id = id;
+	}
+	
+	public Long getId(){
+		return this.id;
+	}
+			
+	public void setUserId(Integer userId){
+		this.userId = userId;
+	}
+	
+	public Integer getUserId(){
+		return this.userId;
+	}
+			
+	public void setCourseScheduleId(Long courseScheduleId){
+		this.courseScheduleId = courseScheduleId;
+	}
+	
+	public Long getCourseScheduleId(){
+		return this.courseScheduleId;
+	}
+			
+	public void setReason(String reason){
+		this.reason = reason;
+	}
+	
+	public String getReason(){
+		return this.reason;
+	}
+
+	public AuditStatusEnum getStatus() {
+		return status;
+	}
+
+	public void setStatus(AuditStatusEnum status) {
+		this.status = status;
+	}
+
+	public void setWfProcessId(String wfProcessId){
+		this.wfProcessId = wfProcessId;
+	}
+	
+	public String getWfProcessId(){
+		return this.wfProcessId;
+	}
+			
+	public void setWfOrderId(String wfOrderId){
+		this.wfOrderId = wfOrderId;
+	}
+	
+	public String getWfOrderId(){
+		return this.wfOrderId;
+	}
+			
+	public void setCreateTime(java.util.Date createTime){
+		this.createTime = createTime;
+	}
+	
+	public java.util.Date getCreateTime(){
+		return this.createTime;
+	}
+			
+	public void setUpdateTime(java.util.Date updateTime){
+		this.updateTime = updateTime;
+	}
+	
+	public java.util.Date getUpdateTime(){
+		return this.updateTime;
+	}
+			
+	@Override
+	public String toString() {
+		return ToStringBuilder.reflectionToString(this);
+	}
+
+}

+ 35 - 11
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/DemoGroupCoursesPlan.java

@@ -4,6 +4,8 @@ import com.ym.mec.biz.dal.enums.YesOrNoEnum;
 import io.swagger.annotations.ApiModelProperty;
 import org.apache.commons.lang3.builder.ToStringBuilder;
 
+import java.util.Date;
+
 /**
  * 对应数据库表(demo_group_courses_plan):
  */
@@ -14,9 +16,15 @@ public class DemoGroupCoursesPlan {
 	
 	/**  */
 	private Long demoGroupId;
-	
-	/**  */
-	private java.util.Date coursesStartTime;
+
+	@ApiModelProperty(value = "上课日期")
+	private Date courseDate;
+
+	@ApiModelProperty(value = "上课时间")
+	private Date startTime;
+
+	@ApiModelProperty(value = "结束时间")
+	private Date endTime;
 	
 	/**  */
 	private java.util.Date createTime;
@@ -24,6 +32,30 @@ public class DemoGroupCoursesPlan {
 	@ApiModelProperty(value = "预约状态",required = false)
 	private YesOrNoEnum status;
 
+	public Date getCourseDate() {
+		return courseDate;
+	}
+
+	public void setCourseDate(Date courseDate) {
+		this.courseDate = courseDate;
+	}
+
+	public Date getStartTime() {
+		return startTime;
+	}
+
+	public void setStartTime(Date startTime) {
+		this.startTime = startTime;
+	}
+
+	public Date getEndTime() {
+		return endTime;
+	}
+
+	public void setEndTime(Date endTime) {
+		this.endTime = endTime;
+	}
+
 	public YesOrNoEnum getStatus() {
 		return status;
 	}
@@ -48,14 +80,6 @@ public class DemoGroupCoursesPlan {
 		return this.demoGroupId;
 	}
 			
-	public void setCoursesStartTime(java.util.Date coursesStartTime){
-		this.coursesStartTime = coursesStartTime;
-	}
-	
-	public java.util.Date getCoursesStartTime(){
-		return this.coursesStartTime;
-	}
-			
 	public void setCreateTime(java.util.Date createTime){
 		this.createTime = createTime;
 	}

+ 16 - 9
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentApplyRefunds.java

@@ -1,9 +1,7 @@
 package com.ym.mec.biz.dal.entity;
 
-import com.ym.mec.biz.dal.enums.DealStatusEnum;
-
+import com.ym.mec.biz.dal.enums.AuditStatusEnum;
 import io.swagger.annotations.ApiModelProperty;
-
 import org.apache.commons.lang3.builder.ToStringBuilder;
 
 import java.math.BigDecimal;
@@ -23,10 +21,9 @@ public class StudentApplyRefunds {
 	/** 订单号 */
 	@ApiModelProperty(value = "订单号",required = true)
 	private String orderNo;
-	
-	/** 状态(1,交易中;2,成功交易;-1,交易失败;) */
-	@ApiModelProperty(value = "状态",required = true)
-	private DealStatusEnum status;
+
+	@ApiModelProperty(value = "审核状态",required = true)
+	private AuditStatusEnum status;
 	
 	/** 预计退费金额 */
 	@ApiModelProperty(value = "预计退费金额",required = true)
@@ -42,6 +39,8 @@ public class StudentApplyRefunds {
 	/**  */
 	private java.util.Date updateTime;
 	
+	private String remark;
+	
 	/** 原订单编号 */
 	@ApiModelProperty(value = "原订单编号",required = true)
 	private Long origPaymentOrderId;
@@ -70,11 +69,11 @@ public class StudentApplyRefunds {
 		return this.orderNo;
 	}
 
-	public DealStatusEnum getStatus() {
+	public AuditStatusEnum getStatus() {
 		return status;
 	}
 
-	public void setStatus(DealStatusEnum status) {
+	public void setStatus(AuditStatusEnum status) {
 		this.status = status;
 	}
 
@@ -118,6 +117,14 @@ public class StudentApplyRefunds {
 		return this.origPaymentOrderId;
 	}
 			
+	public String getRemark() {
+		return remark;
+	}
+
+	public void setRemark(String remark) {
+		this.remark = remark;
+	}
+
 	@Override
 	public String toString() {
 		return ToStringBuilder.reflectionToString(this);

+ 1 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentCourseHomeworkReply.java

@@ -29,7 +29,7 @@ public class StudentCourseHomeworkReply {
 	/** 父级编号 */
 	@ApiModelProperty(value = "父级编号",required = true)
 	private Long parentId;
-	
+
 	public void setId(Long id){
 		this.id = id;
 	}

+ 150 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentCourseScheduleRecordDto.java

@@ -0,0 +1,150 @@
+package com.ym.mec.biz.dal.entity;
+
+import com.ym.mec.biz.dal.enums.StudentAttendanceStatusEnum;
+import com.ym.mec.biz.dal.enums.TeachModeEnum;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.Date;
+
+/**
+ * @Author Joburgess
+ * @Date 2019/9/30
+ */
+public class StudentCourseScheduleRecordDto {
+
+
+    @ApiModelProperty(value = "记录编号",required = false)
+    private Long id;
+
+    @ApiModelProperty(value = "课程ID")
+    private Long courseScheduleId;
+
+    @ApiModelProperty(value = "课程名称",required = false)
+    private String courseName;
+
+    /** 上课日期 */
+    @ApiModelProperty(value = "上课日期", required = false)
+    private java.util.Date classDate;
+
+    /** 上课时间 */
+    @ApiModelProperty(value = "上课时间", required = false)
+    private java.util.Date startClassTime;
+
+    /** 结束时间 */
+    @ApiModelProperty(value = "结束时间", required = false)
+    private java.util.Date endClassTime;
+
+    @ApiModelProperty(value = "课程类型",required = false)
+    private CourseSchedule.CourseScheduleType type;
+
+    @ApiModelProperty(value = "状态(正常、旷课、请假、休学)",required = false)
+    private StudentAttendanceStatusEnum status;
+
+    @ApiModelProperty(value = "教师ID")
+    private Long teacherId;
+
+    @ApiModelProperty(value = "教师名称",required = false)
+    private String teacherName;
+
+    @ApiModelProperty(value = "剩余课次",required = false)
+    private Integer restOfClass;
+
+    @ApiModelProperty(value = "教学形式")
+    private TeachModeEnum teachMode;
+
+    public TeachModeEnum getTeachMode() {
+        return teachMode;
+    }
+
+    public void setTeachMode(TeachModeEnum teachMode) {
+        this.teachMode = teachMode;
+    }
+
+    public Long getTeacherId() {
+        return teacherId;
+    }
+
+    public void setTeacherId(Long teacherId) {
+        this.teacherId = teacherId;
+    }
+
+    public Long getCourseScheduleId() {
+        return courseScheduleId;
+    }
+
+    public void setCourseScheduleId(Long courseScheduleId) {
+        this.courseScheduleId = courseScheduleId;
+    }
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getCourseName() {
+        return courseName;
+    }
+
+    public void setCourseName(String courseName) {
+        this.courseName = courseName;
+    }
+
+    public Date getClassDate() {
+        return classDate;
+    }
+
+    public void setClassDate(Date classDate) {
+        this.classDate = classDate;
+    }
+
+    public Date getStartClassTime() {
+        return startClassTime;
+    }
+
+    public void setStartClassTime(Date startClassTime) {
+        this.startClassTime = startClassTime;
+    }
+
+    public Date getEndClassTime() {
+        return endClassTime;
+    }
+
+    public void setEndClassTime(Date endClassTime) {
+        this.endClassTime = endClassTime;
+    }
+
+    public CourseSchedule.CourseScheduleType getType() {
+        return type;
+    }
+
+    public void setType(CourseSchedule.CourseScheduleType type) {
+        this.type = type;
+    }
+
+    public StudentAttendanceStatusEnum getStatus() {
+        return status;
+    }
+
+    public void setStatus(StudentAttendanceStatusEnum status) {
+        this.status = status;
+    }
+
+    public String getTeacherName() {
+        return teacherName;
+    }
+
+    public void setTeacherName(String teacherName) {
+        this.teacherName = teacherName;
+    }
+
+    public Integer getRestOfClass() {
+        return restOfClass;
+    }
+
+    public void setRestOfClass(Integer restOfClass) {
+        this.restOfClass = restOfClass;
+    }
+}

+ 81 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentVipGroupPayment.java

@@ -0,0 +1,81 @@
+package com.ym.mec.biz.dal.entity;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+
+/**
+ * 对应数据库表(student_vip_group_payment):
+ */
+public class StudentVipGroupPayment {
+
+	/**  */
+	private Long id;
+	
+	/**  */
+	private Integer userId;
+	
+	/**  */
+	private Long vipGroupId;
+	
+	/**  */
+	private Integer classGroupId;
+	
+	/**  */
+	private java.util.Date createTime;
+	
+	/**  */
+	private Long studentPaymentOrderId;
+	
+	public void setId(Long id){
+		this.id = id;
+	}
+	
+	public Long getId(){
+		return this.id;
+	}
+			
+	public void setUserId(Integer userId){
+		this.userId = userId;
+	}
+	
+	public Integer getUserId(){
+		return this.userId;
+	}
+			
+	public void setVipGroupId(Long vipGroupId){
+		this.vipGroupId = vipGroupId;
+	}
+	
+	public Long getVipGroupId(){
+		return this.vipGroupId;
+	}
+			
+	public void setClassGroupId(Integer classGroupId){
+		this.classGroupId = classGroupId;
+	}
+	
+	public Integer getClassGroupId(){
+		return this.classGroupId;
+	}
+			
+	public void setCreateTime(java.util.Date createTime){
+		this.createTime = createTime;
+	}
+	
+	public java.util.Date getCreateTime(){
+		return this.createTime;
+	}
+			
+	public void setStudentPaymentOrderId(Long studentPaymentOrderId){
+		this.studentPaymentOrderId = studentPaymentOrderId;
+	}
+	
+	public Long getStudentPaymentOrderId(){
+		return this.studentPaymentOrderId;
+	}
+			
+	@Override
+	public String toString() {
+		return ToStringBuilder.reflectionToString(this);
+	}
+
+}

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/SysUserCashAccountDetail.java

@@ -61,6 +61,16 @@ public class SysUserCashAccountDetail {
 	/** 修改时间 */
 	private java.util.Date updateTime;
 
+	private String attribute;
+
+	public String getAttribute() {
+		return attribute;
+	}
+
+	public void setAttribute(String attribute) {
+		this.attribute = attribute;
+	}
+
 	public void setId(Long id){
 		this.id = id;
 	}

+ 114 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/SysUserContracts.java

@@ -0,0 +1,114 @@
+package com.ym.mec.biz.dal.entity;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+
+import com.ym.mec.common.enums.BaseEnum;
+
+/**
+ * 对应数据库表(sys_user_contracts):
+ */
+public class SysUserContracts {
+
+	public enum ContractType implements BaseEnum<String, ContractType> {
+
+		REGISTER("注册"), INSTRUMENT("乐器借用"), COURSES("课程购买");
+
+		private String desc;
+
+		private ContractType(String desc) {
+			this.desc = desc;
+		}
+
+		@Override
+		public String getCode() {
+			return name();
+		}
+
+		public String getDesc() {
+			return desc;
+		}
+	}
+
+	/**  */
+	private Long id;
+
+	/**  */
+	private Integer userId;
+
+	/** 合同号 */
+	private String contractNo;
+
+	/** 协议类型 */
+	private ContractType type;
+
+	/** 协议地址 */
+	private String url;
+
+	/** 备注 */
+	private String memo;
+
+	/** 创建时间 */
+	private java.util.Date createTime;
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public Long getId() {
+		return this.id;
+	}
+
+	public void setUserId(Integer userId) {
+		this.userId = userId;
+	}
+
+	public Integer getUserId() {
+		return this.userId;
+	}
+
+	public void setContractNo(String contractNo) {
+		this.contractNo = contractNo;
+	}
+
+	public String getContractNo() {
+		return this.contractNo;
+	}
+
+	public void setType(ContractType type) {
+		this.type = type;
+	}
+
+	public ContractType getType() {
+		return this.type;
+	}
+
+	public void setUrl(String url) {
+		this.url = url;
+	}
+
+	public String getUrl() {
+		return this.url;
+	}
+
+	public void setMemo(String memo) {
+		this.memo = memo;
+	}
+
+	public String getMemo() {
+		return this.memo;
+	}
+
+	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);
+	}
+
+}

+ 67 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/SysUserTsign.java

@@ -0,0 +1,67 @@
+package com.ym.mec.biz.dal.entity;
+
+import java.util.Date;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+
+/**
+ * 对应数据库表(sys_user_tsign):
+ */
+public class SysUserTsign {
+
+	/**  */
+	private Integer userId;
+
+	/** e签宝账户ID */
+	private String accountId;
+
+	/** 电子印章数据 */
+	private String sealData;
+
+	/**  */
+	private java.util.Date createTime = new Date();
+
+	public SysUserTsign(Integer userId, String accountId, String sealData) {
+		this.userId = userId;
+		this.accountId = accountId;
+		this.sealData = sealData;
+	}
+
+	public void setUserId(Integer userId) {
+		this.userId = userId;
+	}
+
+	public Integer getUserId() {
+		return this.userId;
+	}
+
+	public void setAccountId(String accountId) {
+		this.accountId = accountId;
+	}
+
+	public String getAccountId() {
+		return this.accountId;
+	}
+
+	public void setSealData(String sealData) {
+		this.sealData = sealData;
+	}
+
+	public String getSealData() {
+		return this.sealData;
+	}
+
+	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);
+	}
+
+}

+ 92 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/TeacherDefaultVipGroupSalary.java

@@ -0,0 +1,92 @@
+package com.ym.mec.biz.dal.entity;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+
+/**
+ * 对应数据库表(teacher_default_vip_group_salary):
+ */
+public class TeacherDefaultVipGroupSalary {
+
+	/**  */
+	private Long id;
+	
+	/**  */
+	private Integer userId;
+	
+	/** 课程类型 */
+	private String vipGroupCategoryId;
+	
+	/** 线上课薪酬 */
+	private java.math.BigDecimal onlineClassesSalary;
+	
+	/** 线下课薪酬 */
+	private java.math.BigDecimal offlineClassesSalary;
+	
+	/**  */
+	private java.util.Date createTime;
+	
+	/**  */
+	private java.util.Date updateTime;
+	
+	public void setId(Long id){
+		this.id = id;
+	}
+	
+	public Long getId(){
+		return this.id;
+	}
+			
+	public void setUserId(Integer userId){
+		this.userId = userId;
+	}
+	
+	public Integer getUserId(){
+		return this.userId;
+	}
+			
+	public void setVipGroupCategoryId(String vipGroupCategoryId){
+		this.vipGroupCategoryId = vipGroupCategoryId;
+	}
+	
+	public String getVipGroupCategoryId(){
+		return this.vipGroupCategoryId;
+	}
+			
+	public void setOnlineClassesSalary(java.math.BigDecimal onlineClassesSalary){
+		this.onlineClassesSalary = onlineClassesSalary;
+	}
+	
+	public java.math.BigDecimal getOnlineClassesSalary(){
+		return this.onlineClassesSalary;
+	}
+			
+	public void setOfflineClassesSalary(java.math.BigDecimal offlineClassesSalary){
+		this.offlineClassesSalary = offlineClassesSalary;
+	}
+	
+	public java.math.BigDecimal getOfflineClassesSalary(){
+		return this.offlineClassesSalary;
+	}
+			
+	public void setCreateTime(java.util.Date createTime){
+		this.createTime = createTime;
+	}
+	
+	public java.util.Date getCreateTime(){
+		return this.createTime;
+	}
+			
+	public void setUpdateTime(java.util.Date updateTime){
+		this.updateTime = updateTime;
+	}
+	
+	public java.util.Date getUpdateTime(){
+		return this.updateTime;
+	}
+			
+	@Override
+	public String toString() {
+		return ToStringBuilder.reflectionToString(this);
+	}
+
+}

+ 51 - 8
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/VipGroup.java

@@ -1,9 +1,8 @@
 package com.ym.mec.biz.dal.entity;
 
 import com.ym.mec.biz.dal.enums.AuditStatusEnum;
-
+import com.ym.mec.biz.dal.enums.VipGroupStatusEnum;
 import io.swagger.annotations.ApiModelProperty;
-
 import org.apache.commons.lang3.builder.ToStringBuilder;
 
 import java.math.BigDecimal;
@@ -57,8 +56,14 @@ public class VipGroup {
 	@ApiModelProperty(value = "线下课课时数", required = false)
 	private Integer offlineClassesNum;
 
-	@ApiModelProperty(value = "学生购买价格",required = false)
-	private BigDecimal unitPrice;
+	@ApiModelProperty(value = "线上课单价",required = false)
+	private BigDecimal onlineClassesUnitPrice;
+
+	@ApiModelProperty(value = "线下课单价",required = false)
+	private BigDecimal offlineClassesUnitPrice;
+
+	@ApiModelProperty(value = "课程总价",required = false)
+	private BigDecimal totalPrice;
 
 	@ApiModelProperty(value = "审批状态",required = false)
 	private AuditStatusEnum auditStatus;
@@ -69,6 +74,28 @@ public class VipGroup {
 	@ApiModelProperty(value = "所属分部列表",required = false)
 	private String organIdList;
 
+	@ApiModelProperty("活动方案编号")
+	private Long vipGroupActivityId;
+
+	@ApiModelProperty(value = "课程状态")
+	private VipGroupStatusEnum status;
+
+	public VipGroupStatusEnum getStatus() {
+		return status;
+	}
+
+	public void setStatus(VipGroupStatusEnum status) {
+		this.status = status;
+	}
+
+	public Long getVipGroupActivityId() {
+		return vipGroupActivityId;
+	}
+
+	public void setVipGroupActivityId(Long vipGroupActivityId) {
+		this.vipGroupActivityId = vipGroupActivityId;
+	}
+
 	public AuditStatusEnum getAuditStatus() {
 		return auditStatus;
 	}
@@ -85,12 +112,28 @@ public class VipGroup {
 		this.vipGroupCategoryId = vipGroupCategoryId;
 	}
 
-	public BigDecimal getUnitPrice() {
-		return unitPrice;
+	public BigDecimal getOnlineClassesUnitPrice() {
+		return onlineClassesUnitPrice;
+	}
+
+	public void setOnlineClassesUnitPrice(BigDecimal onlineClassesUnitPrice) {
+		this.onlineClassesUnitPrice = onlineClassesUnitPrice;
+	}
+
+	public BigDecimal getOfflineClassesUnitPrice() {
+		return offlineClassesUnitPrice;
+	}
+
+	public void setOfflineClassesUnitPrice(BigDecimal offlineClassesUnitPrice) {
+		this.offlineClassesUnitPrice = offlineClassesUnitPrice;
+	}
+
+	public BigDecimal getTotalPrice() {
+		return totalPrice;
 	}
 
-	public void setUnitPrice(BigDecimal unitPrice) {
-		this.unitPrice = unitPrice;
+	public void setTotalPrice(BigDecimal totalPrice) {
+		this.totalPrice = totalPrice;
 	}
 
 	public String getName() {

+ 9 - 8
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/VipGroupActivity.java

@@ -1,5 +1,6 @@
 package com.ym.mec.biz.dal.entity;
 
+import com.ym.mec.biz.dal.enums.VipGroupActivityTypeEnum;
 import org.apache.commons.lang3.builder.ToStringBuilder;
 
 /**
@@ -35,7 +36,7 @@ public class VipGroupActivity {
 	private java.util.Date coursesEndTime;
 	
 	/** 活动类型(基础活动、折扣、赠送课时) */
-	private String type;
+	private VipGroupActivityTypeEnum type;
 	
 	/**  */
 	private String attribute1;
@@ -132,15 +133,15 @@ public class VipGroupActivity {
 	public java.util.Date getCoursesEndTime(){
 		return this.coursesEndTime;
 	}
-			
-	public void setType(String type){
-		this.type = type;
+
+	public VipGroupActivityTypeEnum getType() {
+		return type;
 	}
-	
-	public String getType(){
-		return this.type;
+
+	public void setType(VipGroupActivityTypeEnum type) {
+		this.type = type;
 	}
-			
+
 	public void setAttribute1(String attribute1){
 		this.attribute1 = attribute1;
 	}

+ 1 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/OrderDetailTypeEnum.java

@@ -8,7 +8,7 @@ import com.ym.mec.common.enums.BaseEnum;
 public enum OrderDetailTypeEnum implements BaseEnum<String, OrderDetailTypeEnum> {
 	MUSICAL("MUSICAL", "乐器"),
 	TEACHING("TEACHING", "教辅"),
-	ELSE("ELSE", "其他"),
+	OTHER("OTHER", "其他"),
 	COURSE("COURSE", "课程");
 
 	private String code;

+ 40 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/SalarySettlementTypeEnum.java

@@ -0,0 +1,40 @@
+package com.ym.mec.biz.dal.enums;
+
+import com.ym.mec.common.enums.BaseEnum;
+
+/**
+ * @Author Joburgess
+ * @Date 2019/10/1
+ */
+public enum SalarySettlementTypeEnum implements BaseEnum<Integer,SalarySettlementTypeEnum> {
+
+    TEACHER_DEFAULT(1,"老师默认课酬"),
+    RATIO_DISCOUNT(2,"课程单价比例折扣"),
+    FIXED_SALARY(3,"固定课酬");
+
+    private Integer code;
+
+    private String msg;
+
+    SalarySettlementTypeEnum(Integer code, String msg) {
+        this.code = code;
+        this.msg = msg;
+    }
+
+    public void setCode(Integer code) {
+        this.code = code;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+
+    public void setMsg(String msg) {
+        this.msg = msg;
+    }
+
+    @Override
+    public Integer getCode() {
+        return this.code;
+    }
+}

+ 42 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/VipGroupActivityTypeEnum.java

@@ -0,0 +1,42 @@
+package com.ym.mec.biz.dal.enums;
+
+import com.ym.mec.common.enums.BaseEnum;
+
+/**
+ * @Author Joburgess
+ * @Date 2019/10/2
+ **/
+public enum VipGroupActivityTypeEnum implements BaseEnum<String, VipGroupActivityTypeEnum> {
+
+    BASE_ACTIVITY("BASE_ACTIVITY","基础活动"),
+    DISCOUNT("DISCOUNT","折扣"),
+    GIVE_CLASS("GIVE_CLASS","赠送课时");
+
+    private String code;
+
+    private String description;
+
+    VipGroupActivityTypeEnum(String code, String description) {
+        this.code = code;
+        this.description = description;
+    }
+
+    @Override
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+
+}

+ 38 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/VipGroupStatusEnum.java

@@ -0,0 +1,38 @@
+package com.ym.mec.biz.dal.enums;
+
+import com.ym.mec.common.enums.BaseEnum;
+
+/**
+ * @Author Joburgess
+ * @Date 2019/10/2
+ */
+public enum  VipGroupStatusEnum implements BaseEnum<Integer, VipGroupStatusEnum> {
+
+    NOT_START(0, "未开始"), APPLYING(1, "报名中"), FINISH(2, "报名已结束"), CANCEL(3, "取消");
+
+    private Integer code;
+
+    private String msg;
+
+    VipGroupStatusEnum(Integer code, String msg) {
+        this.code = code;
+        this.msg = msg;
+    }
+
+    public void setCode(Integer code) {
+        this.code = code;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+
+    public void setMsg(String msg) {
+        this.msg = msg;
+    }
+
+    @Override
+    public Integer getCode() {
+        return this.code;
+    }
+}

+ 80 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/StudentCourseScheduleRecordQueryInfo.java

@@ -0,0 +1,80 @@
+package com.ym.mec.biz.dal.page;
+
+import com.ym.mec.biz.dal.enums.YesOrNoEnum;
+import com.ym.mec.common.page.QueryInfo;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.Date;
+
+/**
+ * @Author Joburgess
+ * @Date 2019/9/30
+ */
+public class StudentCourseScheduleRecordQueryInfo extends QueryInfo {
+
+    @ApiModelProperty(value = "上课方式")
+    private String teachMode;
+
+    @ApiModelProperty(value = "课程类型")
+    private String type;
+
+    @ApiModelProperty(value = "考勤状态")
+    private String status;
+
+    @ApiModelProperty(value = "用户ID")
+    private Long userId;
+
+    @ApiModelProperty(value = "上课日期")
+    private Date date;
+
+    @ApiModelProperty(value = "是否是未上课时")
+    private YesOrNoEnum isAttend;
+
+    public Date getDate() {
+        return date;
+    }
+
+    public void setDate(Date date) {
+        this.date = date;
+    }
+
+    public YesOrNoEnum getIsAttend() {
+        return isAttend;
+    }
+
+    public void setIsAttend(YesOrNoEnum isAttend) {
+        this.isAttend = isAttend;
+    }
+
+    public Long getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Long userId) {
+        this.userId = userId;
+    }
+
+    public String getTeachMode() {
+        return teachMode;
+    }
+
+    public void setTeachMode(String teachMode) {
+        this.teachMode = teachMode;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+}

+ 22 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/StudentRegistrationQueryInfo.java

@@ -19,6 +19,28 @@ public class StudentRegistrationQueryInfo extends QueryInfo {
     @ApiModelProperty(value = "实际专业编号",required = false)
     private Integer actualSubjectId;
 
+    @ApiModelProperty(value = "学员缴费状态",required = false)
+    private YesOrNoEnum paymentStatus;
+
+    @ApiModelProperty(value = "用户名或手机号",required = false)
+    private String name;
+
+    public YesOrNoEnum getPaymentStatus() {
+        return paymentStatus;
+    }
+
+    public void setPaymentStatus(YesOrNoEnum paymentStatus) {
+        this.paymentStatus = paymentStatus;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
     public Integer getActualSubjectId() {
         return actualSubjectId;
     }

+ 20 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/VipGroupActivityQueryInfo.java

@@ -0,0 +1,20 @@
+package com.ym.mec.biz.dal.page;
+
+import com.ym.mec.common.page.QueryInfo;
+
+/**
+ * @Author Joburgess
+ * @Date 2019/10/1
+ */
+public class VipGroupActivityQueryInfo extends QueryInfo {
+
+    private Long organId;
+
+    public Long getOrganId() {
+        return organId;
+    }
+
+    public void setOrganId(Long organId) {
+        this.organId = organId;
+    }
+}

+ 57 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/ContractService.java

@@ -0,0 +1,57 @@
+package com.ym.mec.biz.service;
+
+public interface ContractService {
+
+	/**
+	 * 用户注册
+	 * @param userId
+	 * @return
+	 */
+	boolean register(Integer userId);
+
+	/**
+	 * 传递注册协议至第三方公证平台
+	 * @param userId
+	 * @return
+	 */
+	boolean transferRegisterContract(Integer userId);
+
+	/**
+	 * 查询注册协议内容
+	 * @param userId
+	 * @return
+	 */
+	String queryRegisterContract(Integer userId);
+
+	/**
+	 * 传递课程协议
+	 * @param userId
+	 * @param musicGroupId
+	 * @return
+	 */
+	boolean transferMusicGroupCoursesContract(Integer userId, Integer musicGroupId);
+
+	/**
+	 * 查询课程协议
+	 * @param userId
+	 * @param musicGroupId
+	 * @return
+	 */
+	String queryMusicGroupCoursesContract(Integer userId, Integer musicGroupId);
+
+	/**
+	 * 传递商品协议
+	 * @param userId
+	 * @param musicGroupId
+	 * @return
+	 */
+	boolean transferGoodsContract(Integer userId, Integer musicGroupId);
+
+	/**
+	 * 查询商品协议
+	 * @param userId
+	 * @param musicGroupId
+	 * @return
+	 */
+	String queryGoodsContract(Integer userId, Integer musicGroupId);
+}

+ 8 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/CourseScheduleComplaintsService.java

@@ -0,0 +1,8 @@
+package com.ym.mec.biz.service;
+
+import com.ym.mec.biz.dal.entity.CourseScheduleComplaints;
+import com.ym.mec.common.service.BaseService;
+
+public interface CourseScheduleComplaintsService extends BaseService<Long, CourseScheduleComplaints> {
+
+}

+ 29 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/CourseScheduleService.java

@@ -4,6 +4,8 @@ import com.ym.mec.biz.dal.dto.ClassDateAdjustDto;
 import com.ym.mec.biz.dal.dto.CourseScheduleDto;
 import com.ym.mec.biz.dal.dto.TeacherAttendanceDto;
 import com.ym.mec.biz.dal.entity.CourseSchedule;
+import com.ym.mec.biz.dal.entity.CourseScheduleComplaints;
+import com.ym.mec.biz.dal.page.StudentCourseScheduleRecordQueryInfo;
 import com.ym.mec.common.service.BaseService;
 
 import java.util.Date;
@@ -65,7 +67,7 @@ public interface CourseScheduleService extends BaseService<Long, CourseSchedule>
      * @Date: 2019/9/17
      * 根据学生获取乐团在该月有课的日期
      */
-    List<Date> getCourseScheduleDateByStudent(Date month);
+    List<Date> getCourseScheduleDateByStudent(Date month, Integer isAttend);
 
     /**
      * @Author: Joburgess
@@ -95,4 +97,30 @@ public interface CourseScheduleService extends BaseService<Long, CourseSchedule>
      * @return
      */
     List<CourseSchedule> findClassGroupCourseSchedules(List classGroupList);
+
+
+    /**
+     * @Author: Joburgess
+     * @Date: 2019/9/30
+     * 获取学生上课记录
+     */
+    Object findStudentCourseScheduleRecords(StudentCourseScheduleRecordQueryInfo queryInfo);
+
+    /**
+     * @Author: Joburgess
+     * @Date: 2019/10/3
+     * @params [courseScheduleComplaints]
+     * @return void
+     * @describe 课程投诉
+     */
+    void courseScheduleCommplaint(CourseScheduleComplaints courseScheduleComplaints);
+
+    /**
+     * @Author: Joburgess
+     * @Date: 2019/10/3
+     * @params [courseScheduleComplaints]
+     * @return void
+     * @describe 课程投诉审核
+     */
+    void courseScheduleCommplaintAudit(CourseScheduleComplaints courseScheduleComplaints);
 }

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/StudentPaymentOrderService.java

@@ -1,8 +1,19 @@
 package com.ym.mec.biz.service;
 
+import java.util.List;
+
+import com.ym.mec.biz.dal.entity.Goods;
 import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
+import com.ym.mec.biz.dal.enums.OrderDetailTypeEnum;
 import com.ym.mec.common.service.BaseService;
 
 public interface StudentPaymentOrderService extends BaseService<Long, StudentPaymentOrder> {
 
+	/**
+	 * 查询商品列表
+	 * @param musicGroupId
+	 * @param type
+	 * @return
+	 */
+	List<Goods> queryApplyGoodsList(Integer musicGroupId, OrderDetailTypeEnum type);
 }

+ 10 - 6
mec-biz/src/main/java/com/ym/mec/biz/service/StudentRegistrationService.java

@@ -1,18 +1,15 @@
 package com.ym.mec.biz.service;
 
+import java.util.List;
+
 import com.ym.mec.biz.dal.dto.StudentApplyDetailDto;
 import com.ym.mec.biz.dal.dto.StudentFeeDto;
+import com.ym.mec.biz.dal.dto.StudentInfo;
 import com.ym.mec.biz.dal.entity.StudentRegistration;
-import com.ym.mec.biz.dal.page.StudentApplyDetailQueryInfo;
 import com.ym.mec.biz.dal.page.StudentRegistrationQueryInfo;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.BaseService;
 
-import org.apache.ibatis.annotations.Param;
-
-import java.util.HashMap;
-import java.util.List;
-
 public interface StudentRegistrationService extends BaseService<Long, StudentRegistration> {
 
     /**
@@ -74,6 +71,13 @@ public interface StudentRegistrationService extends BaseService<Long, StudentReg
      * @return
      */
     StudentRegistration addStudent(StudentRegistration studentRegistration);
+    
+    /**
+     * 查询学生信息
+     * @param userId
+     * @return
+     */
+    StudentInfo queryStudentInfo(Integer userId);
 
     /**
      * 查询手机是否已注册

+ 8 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/StudentVipGroupPaymentService.java

@@ -0,0 +1,8 @@
+package com.ym.mec.biz.service;
+
+import com.ym.mec.biz.dal.entity.StudentVipGroupPayment;
+import com.ym.mec.common.service.BaseService;
+
+public interface StudentVipGroupPaymentService extends BaseService<Long, StudentVipGroupPayment> {
+
+}

+ 8 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/SysUserContractsService.java

@@ -0,0 +1,8 @@
+package com.ym.mec.biz.service;
+
+import com.ym.mec.biz.dal.entity.SysUserContracts;
+import com.ym.mec.common.service.BaseService;
+
+public interface SysUserContractsService extends BaseService<Long, SysUserContracts> {
+
+}

+ 8 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/SysUserTsignService.java

@@ -0,0 +1,8 @@
+package com.ym.mec.biz.service;
+
+import com.ym.mec.biz.dal.entity.SysUserTsign;
+import com.ym.mec.common.service.BaseService;
+
+public interface SysUserTsignService extends BaseService<Integer, SysUserTsign> {
+
+}

+ 8 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/TeacherDefaultVipGroupSalaryService.java

@@ -0,0 +1,8 @@
+package com.ym.mec.biz.service;
+
+import com.ym.mec.biz.dal.entity.TeacherDefaultVipGroupSalary;
+import com.ym.mec.common.service.BaseService;
+
+public interface TeacherDefaultVipGroupSalaryService extends BaseService<Long, TeacherDefaultVipGroupSalary> {
+
+}

+ 1 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/UploadFileService.java

@@ -4,7 +4,6 @@ import java.io.File;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
-import java.nio.file.Files;
 
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.io.IOUtils;
@@ -32,7 +31,7 @@ public class UploadFileService {
 	private int maxSize;
 
 	/** 支持的扩展名 */
-	@Value("${common.upload.supportExtensions:jpg,jpeg,gif,png,mp3,mid,midi}")
+	@Value("${common.upload.supportExtensions:jpg,jpeg,gif,png,mp3,mid,midi,aac}")
 	private String supportExtensions;
 
 	/** 文件根目录 */

+ 24 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/VipGroupActivityService.java

@@ -1,8 +1,32 @@
 package com.ym.mec.biz.service;
 
+import com.ym.mec.biz.dal.dto.VipGroupActivityAddDto;
 import com.ym.mec.biz.dal.entity.VipGroupActivity;
 import com.ym.mec.common.service.BaseService;
 
+import java.util.List;
+
 public interface VipGroupActivityService extends BaseService<Integer, VipGroupActivity> {
 
+    /**
+     * @Author: Joburgess
+     * @Date: 2019/10/1
+     * 新增vip课活动方案
+     */
+    void addVipGroupActivity(VipGroupActivityAddDto vipGroupActivityAddDto);
+
+    /**
+     * @Author: Joburgess
+     * @Date: 2019/10/1
+     * 修改vip课活动方案
+     */
+    void updateVipGroupActivity(VipGroupActivityAddDto vipGroupActivityAddDto);
+
+    /**
+     * @Author: Joburgess
+     * @Date: 2019/10/2
+     * 根据课程类型获取VIP课相关活动方案
+     */
+    List<VipGroupActivity> findByVipGroupCategory(Long categoryId);
+
 }

+ 67 - 14
mec-biz/src/main/java/com/ym/mec/biz/service/VipGroupService.java

@@ -1,50 +1,103 @@
 package com.ym.mec.biz.service;
 
-import com.ym.mec.biz.dal.dto.StudentVipGroupDetailDto;
-import com.ym.mec.biz.dal.dto.VipGroupApplyDto;
-import com.ym.mec.biz.dal.dto.VipGroupManageDetailDto;
+import com.ym.mec.biz.dal.dto.*;
+import com.ym.mec.biz.dal.entity.StudentApplyRefunds;
 import com.ym.mec.biz.dal.entity.VipGroup;
 import com.ym.mec.biz.dal.page.StudentVipGroupQueryInfo;
 import com.ym.mec.biz.dal.page.VipGroupAttendanceQueryInfo;
 import com.ym.mec.common.page.PageInfo;
-import com.ym.mec.common.page.QueryInfo;
 import com.ym.mec.common.service.BaseService;
 
 public interface VipGroupService extends BaseService<Long, VipGroup> {
 
     /**
      * @Author: Joburgess
-     * @Date: 2019/9/21
-     * 创建vip课
+     * @Date: 2019/10/3
+     * @params [vipGroup]
+     * @return void
+     * @describe 创建vip课
      */
     void createVipGroup(VipGroupApplyDto vipGroup);
 
     /**
      * @Author: Joburgess
-     * @Date: 2019/9/23
-     * 获取可购买vip课列表
+     * @Date: 2019/10/3
+     * @params [queryInfo]
+     * @return com.ym.mec.common.page.PageInfo
+     * @describe 获取可购买vip课列表
      */
     PageInfo findStudentVipGroupList(StudentVipGroupQueryInfo queryInfo);
 
     /**
      * @Author: Joburgess
-     * @Date: 2019/9/23
-     * 获取vip课详情
+     * @Date: 2019/10/3
+     * @params [vipGroupId]
+     * @return com.ym.mec.biz.dal.dto.VipGroupManageDetailDto
+     * @describe 获取vip课详情
      */
     VipGroupManageDetailDto getVipGroupDetail(Long vipGroupId);
 
     /**
      * @Author: Joburgess
-     * @Date: 2019/9/23
-     * 获取vip课考勤记录
+     * @Date: 2019/10/3
+     * @params [queryInfo]
+     * @return com.ym.mec.common.page.PageInfo
+     * @describe 获取vip课考勤记录
      */
     PageInfo findVipGroupAttendances(VipGroupAttendanceQueryInfo queryInfo);
 
     /**
      * @Author: Joburgess
-     * @Date: 2019/9/23
-     * 学生端获取vip课详情
+     * @Date: 2019/10/3
+     * @params [vipGroupId]
+     * @return com.ym.mec.biz.dal.dto.StudentVipGroupDetailDto
+     * @describe 学生端获取vip课详情
      */
     StudentVipGroupDetailDto getVipGroupShowDetail(Long vipGroupId);
 
+    /**
+     * @Author: Joburgess
+     * @Date: 2019/10/3
+     * @params [vipGroupCostCountParamsDto]
+     * @return com.ym.mec.biz.dal.dto.VipGroupCostCountDto
+     * @describe vip课程费用计算
+     */
+    VipGroupCostCountDto vipGroupCostCount(VipGroupCostCountParamsDto vipGroupCostCountParamsDto);
+
+    /**
+     * @Author: Joburgess
+     * @Date: 2019/10/3
+     * @params [vipGroupBuyParams]
+     * @return void
+     * @describe 购买vip课程
+     */
+    void buyVipGroup(VipGroupBuyParamsDto vipGroupBuyParams);
+
+    /**
+     * @Author: Joburgess
+     * @Date: 2019/10/3
+     * @params [callbackParams]
+     * @return void
+     * @describe 支付回调接口
+     */
+    void orderCallback(String callbackParams);
+
+    /**
+     * @Author: Joburgess
+     * @Date: 2019/10/3
+     * @params [vipGroupId, studentId]
+     * @return void
+     * @describe 申请退课
+     */
+    void applyRefund(Long vipGroupId,Long studentId);
+
+    /**
+     * @Author: Joburgess
+     * @Date: 2019/10/3
+     * @params [studentApplyRefunds]
+     * @return void
+     * @describe 退课申请审核
+     */
+    void applyRefundAudit(StudentApplyRefunds studentApplyRefunds);
+
 }

+ 361 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ContractServiceImpl.java

@@ -0,0 +1,361 @@
+package com.ym.mec.biz.service.impl;
+
+import java.io.File;
+import java.io.IOException;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.lang.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import com.ym.mec.auth.api.client.SysUserFeignService;
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.dto.StudentInfo;
+import com.ym.mec.biz.dal.entity.Goods;
+import com.ym.mec.biz.dal.entity.Subject;
+import com.ym.mec.biz.dal.entity.SysUserContracts;
+import com.ym.mec.biz.dal.entity.SysUserContracts.ContractType;
+import com.ym.mec.biz.dal.entity.SysUserTsign;
+import com.ym.mec.biz.dal.enums.OrderDetailTypeEnum;
+import com.ym.mec.biz.service.ContractService;
+import com.ym.mec.biz.service.StudentPaymentOrderService;
+import com.ym.mec.biz.service.StudentRegistrationService;
+import com.ym.mec.biz.service.SubjectService;
+import com.ym.mec.biz.service.SysUserContractsService;
+import com.ym.mec.biz.service.SysUserTsignService;
+import com.ym.mec.common.exception.BizException;
+import com.ym.mec.thirdparty.eseal.ESealPlugin;
+import com.ym.mec.thirdparty.storage.StoragePlugin;
+import com.ym.mec.util.freemarker.FreemarkerTemplateEngine;
+import com.ym.mec.util.pdf.PDFUtil;
+
+@Service
+public class ContractServiceImpl implements ContractService {
+
+	@Autowired
+	private SysUserTsignService sysUserTsignService;
+
+	@Autowired
+	private SysUserFeignService sysUserFeignService;
+
+	@Autowired
+	private SysUserContractsService sysUserContractsService;
+	
+	@Autowired
+	private StudentRegistrationService studentRegistrationService;
+	
+	@Autowired
+	private StudentPaymentOrderService studentPaymentOrderService;
+	
+	@Autowired
+	private SubjectService subjectService;
+
+	@Autowired
+	private ESealPlugin eSealPlugin;
+
+	@Autowired
+	private StoragePlugin storagePlugin;
+
+	@Value("${contract.baseDir:/var/pdf}")
+	private String contractBaseDir;
+
+	private DateFormat dateFormatOss = new SimpleDateFormat("yyyy/MM/dd");
+
+	@Override
+	public boolean register(Integer userId) {
+
+		SysUserTsign sysUserTsign = sysUserTsignService.get(userId);
+
+		if (sysUserTsign == null) {
+
+			SysUser user = sysUserFeignService.queryUserById(userId);
+			if (user == null) {
+				return false;
+			}
+			String accountId = eSealPlugin.createUserAccount(user.getRealName(), user.getIdCardNo(), user.getPhone());
+
+			if (StringUtils.isBlank(accountId)) {
+				throw new BizException("创建电子存证账户失败");
+			}
+
+			String sealData = eSealPlugin.createSeal(accountId);
+
+			if (StringUtils.isBlank(sealData)) {
+				throw new BizException("创建电子存证印章失败");
+			}
+
+			sysUserTsign = new SysUserTsign(userId, accountId, sealData);
+
+			sysUserTsignService.insert(sysUserTsign);
+		}
+
+		return true;
+	}
+
+	@Override
+	public boolean transferRegisterContract(Integer userId) {
+
+		SysUserTsign sysUserTsign = sysUserTsignService.get(userId);
+
+		if (sysUserTsign == null) {
+			return false;
+		}
+
+		// 合成freemarker
+		String srcPdfPath = contractBaseDir + "/register/" + userId + ".pdf";
+		File debtFile = new File(contractBaseDir);
+		if (!debtFile.exists()) {
+			debtFile.mkdirs();
+		}
+
+		FreemarkerTemplateEngine templateEngine = FreemarkerTemplateEngine.getInstance();
+		templateEngine.setClassForTemplateLoading(ContractServiceImpl.class, "/config/contracts/");
+
+		Map<String, Object> params = new HashMap<String, Object>();
+
+		templateEngine.render(params, "register.ftl", new File(srcPdfPath));
+
+		// 生成借款协议PDF
+		try {
+			PDFUtil.renderToPDFByData(ContractServiceImpl.class.getResource("/").getFile(), FileUtils.readFileToString(new File(srcPdfPath)), srcPdfPath,
+					"config/fonts/simsun.ttc");
+		} catch (IOException e) {
+			throw new BizException("生成pdf协议失败", e);
+		}
+
+		eSealPlugin.userSign(sysUserTsign.getAccountId(), sysUserTsign.getSealData(), srcPdfPath, srcPdfPath);
+
+		Date date = new Date();
+		// 上传到oss
+		String dateStrOss = dateFormatOss.format(date);
+		String pdfFilePath = storagePlugin.uploadFile(dateStrOss, new File(srcPdfPath));
+
+		SysUserContracts sysUserContracts = new SysUserContracts();
+		sysUserContracts.setCreateTime(date);
+		sysUserContracts.setType(ContractType.REGISTER);
+		sysUserContracts.setUrl(pdfFilePath);
+		sysUserContracts.setUserId(userId);
+
+		sysUserContractsService.insert(sysUserContracts);
+
+		FileUtils.deleteQuietly(new File(srcPdfPath));
+
+		return true;
+	}
+
+	@Override
+	public String queryRegisterContract(Integer userId) {
+
+		// 合成freemarker
+		String srcPdfPath = contractBaseDir + "/register/" + userId + ".pdf";
+		File debtFile = new File(contractBaseDir);
+		if (!debtFile.exists()) {
+			debtFile.mkdirs();
+		}
+
+		FreemarkerTemplateEngine templateEngine = FreemarkerTemplateEngine.getInstance();
+		templateEngine.setClassForTemplateLoading(ContractServiceImpl.class, "/config/contracts/");
+
+		Map<String, Object> params = new HashMap<String, Object>();
+
+		templateEngine.render(params, "register.ftl", new File(srcPdfPath));
+
+		String result = "";
+		try {
+			result = FileUtils.readFileToString(new File(srcPdfPath));
+		} catch (IOException e) {
+			throw new BizException("读取注册协议出错", e);
+		}
+		FileUtils.deleteQuietly(new File(srcPdfPath));
+
+		return result;
+	}
+
+	@Override
+	public boolean transferMusicGroupCoursesContract(Integer userId, Integer musicGroupId) {
+		SysUserTsign sysUserTsign = sysUserTsignService.get(userId);
+
+		if (sysUserTsign == null) {
+			return false;
+		}
+
+		// 合成freemarker
+		String srcPdfPath = contractBaseDir + "/courses/" + userId + ".pdf";
+		File debtFile = new File(contractBaseDir);
+		if (!debtFile.exists()) {
+			debtFile.mkdirs();
+		}
+
+		FreemarkerTemplateEngine templateEngine = FreemarkerTemplateEngine.getInstance();
+		templateEngine.setClassForTemplateLoading(ContractServiceImpl.class, "/config/contracts/");
+
+		Map<String, Object> params = new HashMap<String, Object>();
+		
+		//查询参数信息
+		StudentInfo studentInfo = studentRegistrationService.queryStudentInfo(userId);
+		params.put("studentInfo", studentInfo);
+
+		templateEngine.render(params, "courses.ftl", new File(srcPdfPath));
+
+		// 生成借款协议PDF
+		try {
+			PDFUtil.renderToPDFByData(ContractServiceImpl.class.getResource("/").getFile(), FileUtils.readFileToString(new File(srcPdfPath)), srcPdfPath,
+					"config/fonts/simsun.ttc");
+		} catch (IOException e) {
+			throw new BizException("生成pdf协议失败", e);
+		}
+
+		eSealPlugin.userSign(sysUserTsign.getAccountId(), sysUserTsign.getSealData(), srcPdfPath, srcPdfPath);
+
+		Date date = new Date();
+		// 上传到oss
+		String dateStrOss = dateFormatOss.format(date);
+		String pdfFilePath = storagePlugin.uploadFile(dateStrOss, new File(srcPdfPath));
+
+		SysUserContracts sysUserContracts = new SysUserContracts();
+		sysUserContracts.setCreateTime(date);
+		sysUserContracts.setType(ContractType.REGISTER);
+		sysUserContracts.setUrl(pdfFilePath);
+		sysUserContracts.setUserId(userId);
+
+		sysUserContractsService.insert(sysUserContracts);
+
+		FileUtils.deleteQuietly(new File(srcPdfPath));
+
+		return true;
+	}
+
+	@Override
+	public String queryMusicGroupCoursesContract(Integer userId, Integer musicGroupId) {
+
+		// 合成freemarker
+		String srcPdfPath = contractBaseDir + "/courses/" + userId + ".pdf";
+		File debtFile = new File(contractBaseDir);
+		if (!debtFile.exists()) {
+			debtFile.mkdirs();
+		}
+
+		FreemarkerTemplateEngine templateEngine = FreemarkerTemplateEngine.getInstance();
+		templateEngine.setClassForTemplateLoading(ContractServiceImpl.class, "/config/contracts/");
+
+		Map<String, Object> params = new HashMap<String, Object>();
+		
+		StudentInfo studentInfo = studentRegistrationService.queryStudentInfo(userId);
+		params.put("studentInfo", studentInfo);
+
+		templateEngine.render(params, "courses.ftl", new File(srcPdfPath));
+
+		String result = "";
+		try {
+			result = FileUtils.readFileToString(new File(srcPdfPath));
+		} catch (IOException e) {
+			throw new BizException("读取课程协议出错", e);
+		}
+		FileUtils.deleteQuietly(new File(srcPdfPath));
+
+		return result;
+	}
+
+	@Override
+	public boolean transferGoodsContract(Integer userId, Integer musicGroupId) {
+		SysUserTsign sysUserTsign = sysUserTsignService.get(userId);
+
+		if (sysUserTsign == null) {
+			return false;
+		}
+
+		// 合成freemarker
+		String srcPdfPath = contractBaseDir + "/goods/" + userId + ".pdf";
+		File debtFile = new File(contractBaseDir);
+		if (!debtFile.exists()) {
+			debtFile.mkdirs();
+		}
+
+		FreemarkerTemplateEngine templateEngine = FreemarkerTemplateEngine.getInstance();
+		templateEngine.setClassForTemplateLoading(ContractServiceImpl.class, "/config/contracts/");
+
+		Map<String, Object> params = new HashMap<String, Object>();
+		
+		//查询参数信息
+		StudentInfo studentInfo = studentRegistrationService.queryStudentInfo(userId);
+		
+		Subject subject = subjectService.get(studentInfo.getSubject().getId());
+		studentInfo.setSubject(subject);
+		
+		params.put("studentInfo", studentInfo);
+		
+		List<Goods> goodsList = studentPaymentOrderService.queryApplyGoodsList(musicGroupId, OrderDetailTypeEnum.MUSICAL);
+		params.put("goodsList", goodsList);
+
+		templateEngine.render(params, "goods.ftl", new File(srcPdfPath));
+
+		// 生成借款协议PDF
+		try {
+			PDFUtil.renderToPDFByData(ContractServiceImpl.class.getResource("/").getFile(), FileUtils.readFileToString(new File(srcPdfPath)), srcPdfPath,
+					"config/fonts/simsun.ttc");
+		} catch (IOException e) {
+			throw new BizException("生成pdf协议失败", e);
+		}
+
+		eSealPlugin.userSign(sysUserTsign.getAccountId(), sysUserTsign.getSealData(), srcPdfPath, srcPdfPath);
+
+		Date date = new Date();
+		// 上传到oss
+		String dateStrOss = dateFormatOss.format(date);
+		String pdfFilePath = storagePlugin.uploadFile(dateStrOss, new File(srcPdfPath));
+
+		SysUserContracts sysUserContracts = new SysUserContracts();
+		sysUserContracts.setCreateTime(date);
+		sysUserContracts.setType(ContractType.REGISTER);
+		sysUserContracts.setUrl(pdfFilePath);
+		sysUserContracts.setUserId(userId);
+
+		sysUserContractsService.insert(sysUserContracts);
+
+		FileUtils.deleteQuietly(new File(srcPdfPath));
+
+		return true;
+	}
+
+	@Override
+	public String queryGoodsContract(Integer userId, Integer musicGroupId) {
+
+		// 合成freemarker
+		String srcPdfPath = contractBaseDir + "/goods/" + userId + ".pdf";
+		File debtFile = new File(contractBaseDir);
+		if (!debtFile.exists()) {
+			debtFile.mkdirs();
+		}
+
+		FreemarkerTemplateEngine templateEngine = FreemarkerTemplateEngine.getInstance();
+		templateEngine.setClassForTemplateLoading(ContractServiceImpl.class, "/config/contracts/");
+
+		Map<String, Object> params = new HashMap<String, Object>();
+
+		StudentInfo studentInfo = studentRegistrationService.queryStudentInfo(userId);
+		params.put("studentInfo", studentInfo);
+		
+		List<Goods> goodsList = studentPaymentOrderService.queryApplyGoodsList(musicGroupId, OrderDetailTypeEnum.MUSICAL);
+		params.put("goodsList", goodsList);
+
+		templateEngine.render(params, "goods.ftl", new File(srcPdfPath));
+
+		String result = "";
+		try {
+			result = FileUtils.readFileToString(new File(srcPdfPath));
+		} catch (IOException e) {
+			throw new BizException("读取商品协议出错", e);
+		}
+		FileUtils.deleteQuietly(new File(srcPdfPath));
+
+		return result;
+	}
+
+}

+ 23 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleComplaintsServiceImpl.java

@@ -0,0 +1,23 @@
+package com.ym.mec.biz.service.impl;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.ym.mec.biz.dal.dao.CourseScheduleComplaintsDao;
+import com.ym.mec.biz.dal.entity.CourseScheduleComplaints;
+import com.ym.mec.biz.service.CourseScheduleComplaintsService;
+import com.ym.mec.common.dal.BaseDAO;
+import com.ym.mec.common.service.impl.BaseServiceImpl;
+
+@Service
+public class CourseScheduleComplaintsServiceImpl extends BaseServiceImpl<Long, CourseScheduleComplaints>  implements CourseScheduleComplaintsService {
+	
+	@Autowired
+	private CourseScheduleComplaintsDao courseScheduleComplaintsDao;
+
+	@Override
+	public BaseDAO<Long, CourseScheduleComplaints> getDAO() {
+		return courseScheduleComplaintsDao;
+	}
+	
+}

+ 65 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java

@@ -2,17 +2,25 @@ package com.ym.mec.biz.service.impl;
 
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.dao.CourseScheduleComplaintsDao;
 import com.ym.mec.biz.dal.dao.CourseScheduleDao;
 import com.ym.mec.biz.dal.dto.ClassDateAdjustDto;
 import com.ym.mec.biz.dal.dto.CourseScheduleDto;
 import com.ym.mec.biz.dal.dto.TeacherAttendanceDto;
 import com.ym.mec.biz.dal.entity.CourseSchedule;
+import com.ym.mec.biz.dal.entity.CourseScheduleComplaints;
+import com.ym.mec.biz.dal.enums.AuditStatusEnum;
 import com.ym.mec.biz.dal.enums.ParamEnum;
+import com.ym.mec.biz.dal.enums.YesOrNoEnum;
+import com.ym.mec.biz.dal.page.StudentCourseScheduleRecordQueryInfo;
 import com.ym.mec.biz.service.CourseScheduleService;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.exception.BizException;
+import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
+import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.date.DateUtil;
+import org.apache.commons.lang.time.DateUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -30,6 +38,8 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 	private CourseScheduleDao courseScheduleDao;
 	@Autowired
 	private SysUserFeignService sysUserFeignService;
+	@Autowired
+	private CourseScheduleComplaintsDao courseScheduleComplaintsDao;
 
 	@Override
 	public BaseDAO<Long, CourseSchedule> getDAO() {
@@ -69,9 +79,9 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 	}
 
 	@Override
-	public List<Date> getCourseScheduleDateByStudent(Date month) {
+	public List<Date> getCourseScheduleDateByStudent(Date month, Integer isAttend) {
 		SysUser user = sysUserFeignService.queryUserInfo();
-		return courseScheduleDao.getStudentCourseScheduleDate(user.getId().longValue(),month);
+		return courseScheduleDao.getStudentCourseScheduleDate(user.getId().longValue(),month,isAttend);
 	}
 
 	@Override
@@ -172,6 +182,15 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 	@Transactional(rollbackFor = Exception.class)
 	@Override
 	public void classStartDateAdjust(ClassDateAdjustDto classDateAdjustDto) {
+
+		CourseSchedule nowCourseSchedule = courseScheduleDao.get(classDateAdjustDto.getId());
+		if(DateUtils.isSameDay(nowCourseSchedule.getClassDate(),classDateAdjustDto.getClassDate())&&
+				DateUtils.isSameDay(nowCourseSchedule.getStartClassTime(),classDateAdjustDto.getStartClassTime())&&
+				DateUtils.isSameDay(nowCourseSchedule.getEndClassTime(),classDateAdjustDto.getEndClassTime())){
+			courseScheduleDao.update(classDateAdjustDto);
+			return;
+		}
+
 		//单次调整课时
 		if(null==classDateAdjustDto.getAdjustStartTime()&&null==classDateAdjustDto.getAdjustEndTime()){
 			ArrayList<Date> dates = new ArrayList<>();
@@ -288,4 +307,48 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 		courseScheduleDao.batchAddCourseSchedules(courseSchedules);
 	}
 
+	@Override
+	public Object findStudentCourseScheduleRecords(StudentCourseScheduleRecordQueryInfo queryInfo) {
+		SysUser user = sysUserFeignService.queryUserInfo();
+		queryInfo.setUserId(user.getId().longValue());
+		PageInfo pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
+
+		if(queryInfo.getIsAttend()== YesOrNoEnum.YES){
+			pageInfo.setRows(courseScheduleDao.findStudentCourseScheduleNotStartRecords(user.getId().longValue(),
+					queryInfo.getDate()));
+			return pageInfo;
+		}
+
+		Map<String, Object> params = new HashMap<String, Object>();
+		MapUtil.populateMap(params, queryInfo);
+
+		List dataList = null;
+		int count = courseScheduleDao.countStudentCourseScheduleRecords(params);
+		if (count > 0) {
+			pageInfo.setTotal(count);
+			params.put("offset", pageInfo.getOffset());
+			dataList = courseScheduleDao.findStudentCourseScheduleRecords(params);
+		}
+		if (count == 0) {
+			dataList = new ArrayList<>();
+		}
+		pageInfo.setRows(dataList);
+		return pageInfo;
+	}
+
+	@Override
+	public void courseScheduleCommplaint(CourseScheduleComplaints courseScheduleComplaints) {
+		SysUser user = sysUserFeignService.queryUserInfo();
+		courseScheduleComplaints.setUserId(user.getId());
+		courseScheduleComplaints.setStatus(AuditStatusEnum.ING);
+		courseScheduleComplaintsDao.insert(courseScheduleComplaints);
+	}
+
+	@Override
+	public void courseScheduleCommplaintAudit(CourseScheduleComplaints courseScheduleComplaints) {
+		CourseScheduleComplaints newCourseScheduleComplaints=new CourseScheduleComplaints();
+		newCourseScheduleComplaints.setId(courseScheduleComplaints.getId());
+		newCourseScheduleComplaints.setStatus(courseScheduleComplaints.getStatus());
+		courseScheduleComplaintsDao.update(newCourseScheduleComplaints);
+	}
 }

+ 18 - 7
mec-biz/src/main/java/com/ym/mec/biz/service/impl/DemoGroupServiceImpl.java

@@ -45,6 +45,8 @@ public class DemoGroupServiceImpl extends BaseServiceImpl<Long, DemoGroup>  impl
 
 	@Autowired
 	private SysUserFeignService sysUserFeignService;
+	@Autowired
+	private SubjectDao subjectDao;
 
 	@Override
 	public BaseDAO<Long, DemoGroup> getDAO() {
@@ -62,7 +64,9 @@ public class DemoGroupServiceImpl extends BaseServiceImpl<Long, DemoGroup>  impl
 
 		demoGroupApplyDto.setUserId(user.getId());
 		demoGroupDao.insert(demoGroupApplyDto);
-		demoGroupCoursesPlanDao.batchInsertByDates(demoGroupApplyDto.getCourseDates(),demoGroupApplyDto.getId());
+		demoGroupCoursesPlanDao.batchInsertByDates(demoGroupApplyDto.getCourseDates(),
+				demoGroupApplyDto.getId(),
+				demoGroupApplyDto.getSingleClassMinutes());
 	}
 
 	@Override
@@ -129,15 +133,22 @@ public class DemoGroupServiceImpl extends BaseServiceImpl<Long, DemoGroup>  impl
 
 		//创建课程
 		DemoGroupCoursesPlan demoGroupCoursesPlan=demoGroupCoursesPlanDao.get(coursePlanId);
-		List<CourseSchedule> courseScheduleByDemoGroup = demoGroupDao.createCourseScheduleByDemoGroup(
+//		List<CourseSchedule> courseScheduleByDemoGroup = demoGroupDao.createCourseSchedulesByDemoGroup(
+//				demoGroup,
+//				demoGroupCoursesPlan.getCoursesStartTime(),
+//				classGroup.getId().longValue());
+		CourseSchedule courseScheduleByDemoGroup = demoGroupDao.createCourseScheduleByDemoGroupPlan(
 				demoGroup,
-				demoGroupCoursesPlan.getCoursesStartTime(),
+				coursePlanId,
 				classGroup.getId().longValue());
-		String[] classSubjects = courseScheduleDao.findClassSubjects(Arrays.asList(new Integer[]{classGroup.getId()}));
-		StringBuilder className=new StringBuilder(classSubjects[0].split("-")[1]);
+//		String[] classSubjects = courseScheduleDao.findClassSubjects(Arrays.asList(new Integer[]{classGroup.getId()}));
+		StringBuilder className=new StringBuilder(subjectDao.get(demoGroup.getSubjectId().intValue()).getName());
 		className.append("-");
 		className.append(CourseSchedule.CourseScheduleType.DEMO.getMsg());
-		courseScheduleDao.batchAddCourseSchedules(courseScheduleByDemoGroup);
+		courseScheduleByDemoGroup.setName(className.toString());
+		ArrayList<CourseSchedule> courseSchedules = new ArrayList<>();
+		courseSchedules.add(courseScheduleByDemoGroup);
+		courseScheduleDao.batchAddCourseSchedules(courseSchedules);
 
 		//更新所属分部列表
 		List<Integer> organIds = demoGroupDao.organIdListByDemoGroupId(demoGroup.getId());
@@ -155,7 +166,7 @@ public class DemoGroupServiceImpl extends BaseServiceImpl<Long, DemoGroup>  impl
 	@Override
 	public PageInfo findTeacherDemoGroups(TeacherManageDemoGroupQueryInfo queryInfo) {
 		PageInfo pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
-		Map<String, Object> params = new HashMap<String, Object>();
+		Map<String, Object> params = new HashMap<>();
 		MapUtil.populateMap(params, queryInfo);
 
 		List dataList = null;

+ 1 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/impl/EmployeeServiceImpl.java

@@ -51,7 +51,7 @@ public class EmployeeServiceImpl extends BaseServiceImpl<Integer, Employee>  imp
 	@Override
 	@Transactional(rollbackFor = Exception.class)
 	public void add(Employee employee){
-		SysUser user = sysUserFeignService.getUserByMobile(employee.getPhone());
+		SysUser user = sysUserFeignService.queryUserByMobile(employee.getPhone());
 		if(user != null){
             user.setUserType(SysUserType.SYSTEM);
 			teacherDao.updateUser(user);

+ 8 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java

@@ -12,10 +12,12 @@ import com.ym.mec.common.entity.ImGroupMember;
 import com.ym.mec.common.entity.ImGroupModel;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.im.ImFeignService;
+
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.ArrayList;
 import java.util.List;
 import java.util.UUID;
 
@@ -71,11 +73,17 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup>
 				}
 			}
 			//保存乐团声部规划
+			if (musicGroupSubjectPlans == null) {
+				musicGroupSubjectPlans = new ArrayList<MusicGroupSubjectPlan>();
+			}
 			musicGroupSubjectPlans.forEach(e ->{
 				e.setMusicGroupId(musicGroupId);
 				musicGroupSubjectPlanDao.insert(e);
 			});
 			//保存乐团声部商品规划
+			if (musicGroupSubjectGoodsGroups == null) {
+				musicGroupSubjectGoodsGroups = new ArrayList<MusicGroupSubjectGoodsGroup>();
+			}
 			musicGroupSubjectGoodsGroups.forEach(e->{
 				e.setMusicGroupId(musicGroupId);
 				musicGroupSubjectGoodsGroupDao.insert(e);

+ 9 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentOrderServiceImpl.java

@@ -1,10 +1,14 @@
 package com.ym.mec.biz.service.impl;
 
+import java.util.List;
+
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import com.ym.mec.biz.dal.dao.StudentPaymentOrderDao;
+import com.ym.mec.biz.dal.entity.Goods;
 import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
+import com.ym.mec.biz.dal.enums.OrderDetailTypeEnum;
 import com.ym.mec.biz.service.StudentPaymentOrderService;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
@@ -19,5 +23,10 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
 	public BaseDAO<Long, StudentPaymentOrder> getDAO() {
 		return studentPaymentOrderDao;
 	}
+
+	@Override
+	public List<Goods> queryApplyGoodsList(Integer musicGroupId, OrderDetailTypeEnum type) {
+		return studentPaymentOrderDao.queryApplyGoodsList(musicGroupId, type);
+	}
 	
 }

+ 11 - 4
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRegistrationServiceImpl.java

@@ -21,6 +21,7 @@ import com.ym.mec.auth.api.enums.UserLockFlag;
 import com.ym.mec.biz.dal.dao.StudentRegistrationDao;
 import com.ym.mec.biz.dal.dto.StudentApplyDetailDto;
 import com.ym.mec.biz.dal.dto.StudentFeeDto;
+import com.ym.mec.biz.dal.dto.StudentInfo;
 import com.ym.mec.biz.dal.entity.StudentRegistration;
 import com.ym.mec.biz.dal.enums.YesOrNoEnum;
 import com.ym.mec.biz.dal.page.StudentRegistrationQueryInfo;
@@ -104,10 +105,10 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
     @Transactional(rollbackFor = Exception.class)
     public StudentRegistration addStudent(StudentRegistration studentRegistration) {
         Date date = new Date();
-        int userId=0;
+        int userId = 0;
         Map hasUser = studentRegistrationDao.getSysUserByPhone(studentRegistration.getParentsPhone());
         if (hasUser == null) {
-           SysUser sysUser = new SysUser();
+            SysUser sysUser = new SysUser();
             sysUser.setPhone(studentRegistration.getParentsPhone());
             sysUser.setCreateTime(date);
             sysUser.setUpdateTime(date);
@@ -120,16 +121,22 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
             sysUser.setIdCardNo(studentRegistration.getIdCardNo());
             teacherDao.addSysUser(sysUser);
             userId = sysUser.getId();
-        }else {
-            int id_ = (int) hasUser.get("id_");
+        } else {
+            userId = (int) hasUser.get("id_");
         }
         studentRegistration.setUserId(userId);
         studentRegistrationDao.insert(studentRegistration);
         return studentRegistration;
     }
 
+
     @Override
     public StudentRegistration getByPhoneAndMusicGroupId(Integer musicGroupId, String parentsPhone) {
         return studentRegistrationDao.getByPhoneAndMusicGroupId(musicGroupId, parentsPhone);
     }
+
+    @Override
+    public StudentInfo queryStudentInfo(Integer userId) {
+        return studentRegistrationDao.queryStudentInfo(userId);
+    }
 }

+ 23 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentVipGroupPaymentServiceImpl.java

@@ -0,0 +1,23 @@
+package com.ym.mec.biz.service.impl;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.ym.mec.biz.dal.dao.StudentVipGroupPaymentDao;
+import com.ym.mec.biz.dal.entity.StudentVipGroupPayment;
+import com.ym.mec.biz.service.StudentVipGroupPaymentService;
+import com.ym.mec.common.dal.BaseDAO;
+import com.ym.mec.common.service.impl.BaseServiceImpl;
+
+@Service
+public class StudentVipGroupPaymentServiceImpl extends BaseServiceImpl<Long, StudentVipGroupPayment>  implements StudentVipGroupPaymentService {
+	
+	@Autowired
+	private StudentVipGroupPaymentDao studentVipGroupPaymentDao;
+
+	@Override
+	public BaseDAO<Long, StudentVipGroupPayment> getDAO() {
+		return studentVipGroupPaymentDao;
+	}
+	
+}

+ 1 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysMessageServiceImpl.java

@@ -79,7 +79,7 @@ public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> imp
 			for (String tel : tels) {
 				message = new SysMessage();
 				if (userId == null) {
-					SysUser user = sysUserFeignService.getUserByMobile(tel);
+					SysUser user = sysUserFeignService.queryUserByMobile(tel);
 					if (user != null) {
 						userId = user.getId();
 					}

+ 23 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysUserContractsServiceImpl.java

@@ -0,0 +1,23 @@
+package com.ym.mec.biz.service.impl;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.ym.mec.biz.dal.dao.SysUserContractsDao;
+import com.ym.mec.biz.dal.entity.SysUserContracts;
+import com.ym.mec.biz.service.SysUserContractsService;
+import com.ym.mec.common.dal.BaseDAO;
+import com.ym.mec.common.service.impl.BaseServiceImpl;
+
+@Service
+public class SysUserContractsServiceImpl extends BaseServiceImpl<Long, SysUserContracts>  implements SysUserContractsService {
+	
+	@Autowired
+	private SysUserContractsDao sysUserContractsDao;
+
+	@Override
+	public BaseDAO<Long, SysUserContracts> getDAO() {
+		return sysUserContractsDao;
+	}
+	
+}

+ 23 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysUserTsignServiceImpl.java

@@ -0,0 +1,23 @@
+package com.ym.mec.biz.service.impl;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.ym.mec.biz.dal.dao.SysUserTsignDao;
+import com.ym.mec.biz.dal.entity.SysUserTsign;
+import com.ym.mec.biz.service.SysUserTsignService;
+import com.ym.mec.common.dal.BaseDAO;
+import com.ym.mec.common.service.impl.BaseServiceImpl;
+
+@Service
+public class SysUserTsignServiceImpl extends BaseServiceImpl<Integer, SysUserTsign>  implements SysUserTsignService {
+	
+	@Autowired
+	private SysUserTsignDao sysUserTsignDao;
+
+	@Override
+	public BaseDAO<Integer, SysUserTsign> getDAO() {
+		return sysUserTsignDao;
+	}
+	
+}

+ 23 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherDefaultVipGroupSalaryServiceImpl.java

@@ -0,0 +1,23 @@
+package com.ym.mec.biz.service.impl;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.ym.mec.biz.dal.dao.TeacherDefaultVipGroupSalaryDao;
+import com.ym.mec.biz.dal.entity.TeacherDefaultVipGroupSalary;
+import com.ym.mec.biz.service.TeacherDefaultVipGroupSalaryService;
+import com.ym.mec.common.dal.BaseDAO;
+import com.ym.mec.common.service.impl.BaseServiceImpl;
+
+@Service
+public class TeacherDefaultVipGroupSalaryServiceImpl extends BaseServiceImpl<Long, TeacherDefaultVipGroupSalary>  implements TeacherDefaultVipGroupSalaryService {
+	
+	@Autowired
+	private TeacherDefaultVipGroupSalaryDao teacherDefaultVipGroupSalaryDao;
+
+	@Override
+	public BaseDAO<Long, TeacherDefaultVipGroupSalary> getDAO() {
+		return teacherDefaultVipGroupSalaryDao;
+	}
+	
+}

+ 1 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherServiceImpl.java

@@ -53,7 +53,7 @@ public class TeacherServiceImpl extends BaseServiceImpl<Integer, Teacher>  imple
 	@Override
 	@Transactional(rollbackFor = Exception.class)
 	public void add(Teacher teacher){
-		SysUser user = sysUserFeignService.getUserByMobile(teacher.getPhone());
+		SysUser user = sysUserFeignService.queryUserByMobile(teacher.getPhone());
 		if(user != null && user.getId() != null){
 			teacherDao.updateUser(user);
 			Teacher teacher1 = teacherDao.get(user.getId());

+ 23 - 4
mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupActivityServiceImpl.java

@@ -1,13 +1,16 @@
 package com.ym.mec.biz.service.impl;
 
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
+import com.alibaba.fastjson.JSON;
 import com.ym.mec.biz.dal.dao.VipGroupActivityDao;
+import com.ym.mec.biz.dal.dto.VipGroupActivityAddDto;
 import com.ym.mec.biz.dal.entity.VipGroupActivity;
 import com.ym.mec.biz.service.VipGroupActivityService;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
 
 @Service
 public class VipGroupActivityServiceImpl extends BaseServiceImpl<Integer, VipGroupActivity>  implements VipGroupActivityService {
@@ -19,5 +22,21 @@ public class VipGroupActivityServiceImpl extends BaseServiceImpl<Integer, VipGro
 	public BaseDAO<Integer, VipGroupActivity> getDAO() {
 		return vipGroupActivityDao;
 	}
-	
+
+	@Override
+	public void addVipGroupActivity(VipGroupActivityAddDto vipGroupActivityAddDto) {
+		vipGroupActivityAddDto.setSalarySettlementJson(JSON.toJSONString(vipGroupActivityAddDto.getVipGroupSalarySettlement()));
+		super.insert(vipGroupActivityAddDto);
+	}
+
+	@Override
+	public void updateVipGroupActivity(VipGroupActivityAddDto vipGroupActivityAddDto) {
+		vipGroupActivityAddDto.setSalarySettlementJson(JSON.toJSONString(vipGroupActivityAddDto.getVipGroupSalarySettlement()));
+		super.update(vipGroupActivityAddDto);
+	}
+
+	@Override
+	public List<VipGroupActivity> findByVipGroupCategory(Long categoryId) {
+		return vipGroupActivityDao.findByCategory(categoryId);
+	}
 }

+ 211 - 5
mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java

@@ -1,29 +1,32 @@
 package com.ym.mec.biz.service.impl;
 
+import com.alibaba.fastjson.JSON;
+import com.ym.mec.auth.api.client.SysUserFeignService;
+import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.entity.*;
-import com.ym.mec.biz.dal.enums.ClassGroupTypeEnum;
-import com.ym.mec.biz.dal.enums.TeachTypeEnum;
-import com.ym.mec.biz.dal.enums.YesOrNoEnum;
+import com.ym.mec.biz.dal.enums.*;
 import com.ym.mec.biz.dal.page.StudentVipGroupQueryInfo;
 import com.ym.mec.biz.dal.page.VipGroupAttendanceQueryInfo;
 import com.ym.mec.biz.service.CourseScheduleService;
 import com.ym.mec.biz.service.VipGroupService;
 import com.ym.mec.common.dal.BaseDAO;
+import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.page.PageInfo;
-import com.ym.mec.common.page.QueryInfo;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
-
 import com.ym.mec.util.collection.MapUtil;
+import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 @Service
 public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> implements VipGroupService {
@@ -38,6 +41,26 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 	private ClassGroupTeacherMapperDao classGroupTeacherMapperDao;
 	@Autowired
 	private CourseScheduleService courseScheduleService;
+	@Autowired
+	private VipGroupDefaultClassesUnitPriceDao vipGroupDefaultClassesUnitPriceDao;
+	@Autowired
+	private VipGroupActivityDao vipGroupActivityDao;
+	@Autowired
+	private VipGroupCategoryDao vipGroupCategoryDao;
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+    @Autowired
+    private TeacherDefaultVipGroupSalaryDao teacherDefaultVipGroupSalaryDao;
+    @Autowired
+    private StudentPaymentOrderDao studentPaymentOrderDao;
+    @Autowired
+    private StudentVipGroupPaymentDao studentVipGroupPaymentDao;
+    @Autowired
+	private StudentApplyRefundsDao studentApplyRefundsDao;
+    @Autowired
+	private SysUserCashAccountDao sysUserCashAccountDao;
+    @Autowired
+	private SysUserCashAccountDetailDao sysUserCashAccountDetailDao;
 
 	@Override
 	public BaseDAO<Long, VipGroup> getDAO() {
@@ -47,9 +70,25 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 	@Transactional(rollbackFor = Exception.class)
 	@Override
 	public void createVipGroup(VipGroupApplyDto vipGroup) {
+
+	    if(vipGroup.getCourseSchedules().size()!=vipGroup.getVipGroupApplyBaseInfo().getAllCourseNum()){
+	        throw new BizException("课时总数不匹配!");
+        }
+
+        Map<TeachModeEnum, List<CourseSchedule>> courseScheduleGroup = vipGroup.getCourseSchedules().stream().collect(Collectors.groupingBy(CourseSchedule::getTeachMode));
+	    if(courseScheduleGroup.get(TeachModeEnum.OFFLINE).size()<vipGroup.getVipGroupApplyBaseInfo().getOfflineClassesNum()){
+	        throw new BizException("线下课课时数量安排有误!");
+        }
+        if(courseScheduleGroup.get(TeachModeEnum.ONLINE).size()<vipGroup.getVipGroupApplyBaseInfo().getOnlineClassesNum()){
+            throw new BizException("线上课课时数量安排有误!");
+        }
+
+        VipGroupActivity vipGroupActivity = vipGroupActivityDao.get(vipGroup.getVipGroupApplyBaseInfo().getVipGroupActivityId().intValue());
 		VipGroupApplyBaseInfoDto vipGroupApplyBaseInfoDto=vipGroup.getVipGroupApplyBaseInfo();
 		vipGroupDao.insert(vipGroupApplyBaseInfoDto);
+		VipGroupCategory vipGroupCategory = vipGroupCategoryDao.get(vipGroup.getVipGroupApplyBaseInfo().getVipGroupCategoryId().intValue());
 		ClassGroup classGroup=new ClassGroup();
+		classGroup.setExpectStudentNum(vipGroupCategory.getStudentNum());
 		classGroup.setName(vipGroupApplyBaseInfoDto.getName());
 		classGroup.setExpectStudentNum(vipGroupApplyBaseInfoDto.getExpectStudentNum());
 		classGroup.setType(ClassGroupTypeEnum.VIP);
@@ -65,6 +104,10 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		classGroupTeacherMapper.setSalary(vipGroupApplyBaseInfoDto.getSalary());
 		classGroupTeacherMapperDao.insert(classGroupTeacherMapper);
 		vipGroup.getCourseSchedules().forEach(courseSchedule -> {
+		    if(courseSchedule.getEndClassTime().after(vipGroupActivity.getCoursesEndTime())
+                &&courseSchedule.getStartClassTime().before(vipGroupActivity.getCoursesStartTime())){
+		        throw new BizException("课时安排时间超出范围!");
+            }
 			courseSchedule.setClassGroupId(classGroup.getId());
 		});
 		courseScheduleService.batchAddCourseSchedule(vipGroup.getCourseSchedules());
@@ -120,4 +163,167 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 	public StudentVipGroupDetailDto getVipGroupShowDetail(Long vipGroupId) {
 		return vipGroupDao.getVipGroupDetail(vipGroupId);
 	}
+
+	@Override
+	public VipGroupCostCountDto vipGroupCostCount(VipGroupCostCountParamsDto vipGroupCostCountParamsDto) {
+        SysUser user = sysUserFeignService.queryUserInfo();
+        TeacherDefaultVipGroupSalary teacherDefaultVipGroupSalary = teacherDefaultVipGroupSalaryDao.findByTeacherAndCategory(user.getId().longValue(), vipGroupCostCountParamsDto.getVipGroupCategoryId());
+        VipGroupDefaultClassesUnitPrice vipGroupDefaultClassesUnitPrice = vipGroupDefaultClassesUnitPriceDao.get(vipGroupCostCountParamsDto.getVipGroupDefaultClassesUnitPriceId().intValue());
+		VipGroupActivity vipGroupActivity = vipGroupActivityDao.get(vipGroupCostCountParamsDto.getVipGroupActivityId().intValue());
+        VipGroupSalarySettlementDto vipGroupSalarySettlementDto = JSON.parseObject(vipGroupActivity.getSalarySettlementJson(), VipGroupSalarySettlementDto.class);
+        BigDecimal offlineClassNum=new BigDecimal(vipGroupCostCountParamsDto.getOfflineClassesNum());
+        BigDecimal onlineClassNum=new BigDecimal(vipGroupCostCountParamsDto.getOnlineClassesNum());
+
+
+        //教师课酬
+        BigDecimal teacherOnlineSalary,teacherOfflineSalary,teacherSalary;
+        switch (vipGroupSalarySettlementDto.getOnlineSalarySettlement().getSalarySettlementType()){
+            case TEACHER_DEFAULT:
+                teacherOnlineSalary=teacherDefaultVipGroupSalary.getOnlineClassesSalary().multiply(onlineClassNum);
+                break;
+            case RATIO_DISCOUNT:
+                teacherOnlineSalary=vipGroupDefaultClassesUnitPrice.getOnlineClassesUnitPrice().multiply(vipGroupSalarySettlementDto.getOnlineSalarySettlement().getSettlementValue()).multiply(onlineClassNum);
+                break;
+            case FIXED_SALARY:
+                teacherOnlineSalary=vipGroupSalarySettlementDto.getOnlineSalarySettlement().getSettlementValue().multiply(onlineClassNum);
+                break;
+             default:
+                 throw new BizException("未指定课酬结算标准!");
+        }
+        switch (vipGroupSalarySettlementDto.getOfflineSalarySettlement().getSalarySettlementType()){
+            case TEACHER_DEFAULT:
+                teacherOfflineSalary=teacherDefaultVipGroupSalary.getOfflineClassesSalary().multiply(offlineClassNum);
+                break;
+            case RATIO_DISCOUNT:
+                teacherOfflineSalary=vipGroupDefaultClassesUnitPrice.getOfflineClassesUnitPrice().multiply(vipGroupSalarySettlementDto.getOfflineSalarySettlement().getSettlementValue()).multiply(offlineClassNum);
+                break;
+            case FIXED_SALARY:
+                teacherOfflineSalary=vipGroupSalarySettlementDto.getOfflineSalarySettlement().getSettlementValue().multiply(offlineClassNum);
+                break;
+            default:
+                throw new BizException("未指定课酬结算标准!");
+        }
+        teacherSalary=teacherOnlineSalary.add(teacherOfflineSalary);
+        return new VipGroupCostCountDto(null,teacherSalary);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void buyVipGroup(VipGroupBuyParamsDto vipGroupBuyParams) {
+	    SysUser user = sysUserFeignService.queryUserInfo();
+        VipGroup vipGroup = vipGroupDao.get(vipGroupBuyParams.getVipGroupId());
+
+        if(vipGroup.getStatus()!=VipGroupStatusEnum.APPLYING){
+            throw new BizException("该课程已结束报名!");
+        }
+
+        VipGroupActivity vipGroupActivity = vipGroupActivityDao.get(vipGroup.getVipGroupActivityId().intValue());
+        StudentPaymentOrder studentPaymentOrder=new StudentPaymentOrder();
+        studentPaymentOrder.setUserId(user.getId());
+        String orderNo=StringUtils.join(new String[]{user.getId().toString(),String.valueOf(System.currentTimeMillis())});
+        studentPaymentOrder.setOrderNo(orderNo);
+        studentPaymentOrder.setType(OrderTypeEnum.SMALL_CLASS_TO_BUY);
+        studentPaymentOrder.setExpectAmount(countVipGroupPredictFee(vipGroup,vipGroup.getOnlineClassesUnitPrice(),vipGroup.getOfflineClassesUnitPrice()));
+        if(vipGroupActivity.getType()==VipGroupActivityTypeEnum.DISCOUNT){
+            studentPaymentOrder.setActualAmount(studentPaymentOrder.getExpectAmount().multiply(new BigDecimal(vipGroupActivity.getAttribute1())));
+        }else{
+            studentPaymentOrder.setActualAmount(studentPaymentOrder.getExpectAmount());
+        }
+        VipGroupClassGroupMapper vipGroupClassGroupMapper = vipGroupClassGroupMapperDao.findByVipGroupId(vipGroup.getId());
+        studentPaymentOrder.setMusicGroupId(vipGroup.getId().toString());
+        studentPaymentOrder.setClassGroupId(vipGroupClassGroupMapper.getClassGroupId());
+        studentPaymentOrderDao.insert(studentPaymentOrder);
+
+        StudentVipGroupPayment studentVipGroupPayment=new StudentVipGroupPayment();
+        studentVipGroupPayment.setUserId(user.getId());
+		studentVipGroupPayment.setVipGroupId(vipGroup.getId());
+		studentVipGroupPayment.setClassGroupId(vipGroupClassGroupMapper.getClassGroupId());
+        studentVipGroupPayment.setStudentPaymentOrderId(studentPaymentOrder.getId());
+        studentVipGroupPaymentDao.insert(studentVipGroupPayment);
+
+		ClassGroup classGroup = classGroupDao.get(vipGroupClassGroupMapper.getClassGroupId());
+		int classStudents = classGroupDao.countClassStudent(vipGroupClassGroupMapper.getClassGroupId().longValue());
+		if(classGroup.getExpectStudentNum()==classStudents){
+			vipGroup.setStatus(VipGroupStatusEnum.FINISH);
+			vipGroupDao.update(vipGroup);
+		}
+		classGroup.setStudentNum(classGroup.getStudentNum()+1);
+		classGroupDao.update(classGroup);
+
+		//生成回调地址
+    }
+
+    /**
+     * @Author: Joburgess
+     * @Date: 2019/10/2
+     * 计算VIP课程预计收费
+     */
+    private BigDecimal countVipGroupPredictFee(VipGroup vipGroup,BigDecimal onlineClassesUnitPrice,BigDecimal offlineClassesUnitPrice){
+        BigDecimal offlineClassNum=new BigDecimal(vipGroup.getOfflineClassesNum());
+        BigDecimal onlineClassNum=new BigDecimal(vipGroup.getOnlineClassesNum());
+        BigDecimal onlineVipGroupCharge = onlineClassesUnitPrice.multiply(onlineClassNum);
+        BigDecimal offlineVipGroupCharge = offlineClassesUnitPrice.multiply(offlineClassNum);
+        return onlineVipGroupCharge.add(offlineVipGroupCharge);
+    }
+
+	@Override
+	public void orderCallback(String callbackParams) {
+		/*
+		根据回调信息调整订单状态及vip课程状态等相关信息
+		 */
+	}
+
+	@Override
+	public void applyRefund(Long vipGroupId,Long studentId) {
+    	if(null==studentId){
+    		studentId=sysUserFeignService.queryUserInfo().getId().longValue();
+		}
+		StudentApplyRefunds studentApplyRefunds=new StudentApplyRefunds();
+		StudentPaymentOrder studentPaymentOrder = studentPaymentOrderDao.findByStudentVipGroup(vipGroupId,studentId);
+		VipGroup vipGroup=vipGroupDao.get(vipGroupId);
+		//剩余课时数
+		Map surplusClassTimes=MapUtil.convertMybatisMap(vipGroupDao.countSurplusClassTimes(vipGroupId));
+		studentApplyRefunds.setExpectAmount(countVipGroupPredictFee(vipGroup,
+				new BigDecimal(surplusClassTimes.get(TeachModeEnum.ONLINE.getMsg()).toString()),
+				new BigDecimal(surplusClassTimes.get(TeachModeEnum.OFFLINE.getMsg()).toString())));
+		studentApplyRefunds.setStatus(AuditStatusEnum.ING);
+		String orderNo=StringUtils.join(new String[]{studentId.toString(),String.valueOf(System.currentTimeMillis())});
+		studentApplyRefunds.setOrderNo(orderNo);
+		studentApplyRefunds.setOrigPaymentOrderId(studentPaymentOrder.getId());
+		studentApplyRefunds.setUserId(studentId.intValue());
+		studentApplyRefundsDao.insert(studentApplyRefunds);
+	}
+
+	@Transactional(rollbackFor = Exception.class)
+	@Override
+	public void applyRefundAudit(StudentApplyRefunds studentApplyRefunds) {
+		StudentApplyRefunds oldStudentApplyRefunds=studentApplyRefundsDao.get(studentApplyRefunds.getId());
+		oldStudentApplyRefunds.setStatus(studentApplyRefunds.getStatus());
+		if(null==studentApplyRefunds.getActualAmount()){
+			oldStudentApplyRefunds.setActualAmount(oldStudentApplyRefunds.getExpectAmount());
+		}else{
+			oldStudentApplyRefunds.setActualAmount(studentApplyRefunds.getActualAmount());
+		}
+		oldStudentApplyRefunds.setRemark(studentApplyRefunds.getRemark());
+		studentApplyRefundsDao.update(oldStudentApplyRefunds);
+		switch (studentApplyRefunds.getStatus()){
+			case PASS:
+				sysUserCashAccountDao.incrAccount(oldStudentApplyRefunds.getUserId(),oldStudentApplyRefunds.getActualAmount());
+				SysUserCashAccount sysUserCashAccount = sysUserCashAccountDao.get(studentApplyRefunds.getId().intValue());
+				SysUserCashAccountDetail sysUserCashAccountDetail=new SysUserCashAccountDetail();
+				sysUserCashAccountDetail.setUserId(studentApplyRefunds.getUserId());
+				sysUserCashAccountDetail.setType(PlatformCashAccountDetailTypeEnum.REFUNDS);
+				sysUserCashAccountDetail.setStatus(DealStatusEnum.SUCCESS);
+				sysUserCashAccountDetail.setAmount(oldStudentApplyRefunds.getActualAmount());
+				sysUserCashAccountDetail.setBalance(sysUserCashAccount.getBalance());
+				sysUserCashAccountDetail.setAttribute(oldStudentApplyRefunds.getId().toString());
+				sysUserCashAccountDetailDao.insert(sysUserCashAccountDetail);
+				break;
+			case REJECT:
+
+				break;
+			default:
+				throw new BizException("审核状态错误!");
+		}
+	}
 }

+ 165 - 0
mec-biz/src/main/resources/config/contracts/courses.ftl

@@ -0,0 +1,165 @@
+<!DOCTYPE html>
+<html lang="en" style="font-size: 100px;">
+<head>
+    <meta charset="utf-8" />
+    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
+    <meta name="viewport" content="width=device-width,initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no, viewport-fit=cover" />
+    <meta http-equiv="Pragma" content="no-cache" />
+    <meta http-equiv="Cache-Control" content="no-cache" />
+    <meta http-equiv="Expires" content="0" />
+    <title>课程服务协议</title>
+    <style type="text/css">
+        body { margin: 0; }
+        header {
+            height: .40rem;
+            line-height: .40rem;
+            color: #000;
+            font-size: .17rem;
+            background: #fff;
+            box-shadow: 0px 1px 8px 0px rgba(0, 0, 0, 0.07);
+            text-align: center;
+        }
+        header .back {
+            width: .2rem;
+            height: .2rem;
+            position: absolute;
+            left: .12rem;
+            top: .1rem;
+        }
+        .container {
+            padding: .22rem .2rem .3rem;
+            font-size: .14rem;
+        }
+        h1 {
+            font-size: .16rem;
+            text-align: center;
+        }
+        h2 {
+            font-size: .16rem;
+            font-weight: bold;
+            padding-top: .15rem;
+        }
+        h3 {
+            font-size: .14rem;
+            font-weight: bold;
+        }
+        .signature {
+            display: flex;
+            padding-top: .5rem;
+        }
+        .signature .sign {
+            flex: 1;
+            position: relative;
+        }
+        .signature span {
+            display: block;
+        }
+        .signature .cachet {
+            position: absolute;
+            top: -.6rem;
+            left: 0;
+            width: 1.5rem;
+            height: 1.5rem;
+        }
+        .iInfo {
+            display: flex;
+        }
+        .iInfo span {
+            flex: 1;
+        }
+        .iInfoContent, .iInfoContent span {
+            display: block;
+        }
+    </style>
+</head>
+<body style="font-family:'SimSun'">
+    <div class="container">
+        <h1>《课程服务协议》</h1>
+        <!-- 甲方:深圳大雅乐盟网络教育股份有限公司 <br/> -->
+        甲方:深圳大雅乐盟网络教育股份有限公司 <br/>
+        <div style="display: flex;">乙方:
+            <div style="flex: 1 auto;">
+                <div class="iInfo">
+                    <span>家长姓名 ${studentInfo.realName}</span>
+                    <span>电话: ${studentInfo.phone}</span>
+                </div>
+                <div class="iInfo">
+                    <span>身份证号:${studentInfo.idCardNo}</span>
+                </div>
+                <div class="iInfo">
+                    <span>学生姓名:${studentInfo.name}</span>
+                    <span>所在班级:${studentInfo.grade} ${studentInfo.clazz}</span>
+                </div>
+                <div class="iInfo">
+                    <span>所在声部:${studentInfo.subject.name}</span>
+                </div>
+            </div>
+        </div>  
+        为进一步提升器乐教学质量和服务品质,保证学员学习进度,明确培训各方的权责,经甲、乙双方协商一致,特订立本协议,以便共同遵守。
+
+        <h2>一、课程信息</h2>
+        
+        <div class="iInfoContent">
+            <span>授课内容:{{proto}}</span>
+            <span>授课形式:{{proto}}</span>
+            <span>课次数量:{{proto}}</span>
+            <span>缴费金额:{{proto}}</span>
+        </div>
+
+        <h2>二、行为规范</h2>
+        乙方在选择甲方各类提高课程并签署本协议时视为乙方已经仔细阅读并同意遵守如下事项:
+        <h3>1.报名</h3>
+        1.1无论是否源自指导老师或教务老师的建议,乙方选择参加甲方的课程,包括对授课形式、授课内容的选择,均为乙方自主意愿的表达及独立自主的选择。<br/>
+        1.2乙方应在所选课程开始前完成相应课程缴费,并完成报名手续。
+        <h3>2.上课</h3>
+        2.1乙方应按时到达甲方指定上课地点,作好课前准备;如发生迟到、或因自身原因早退等情况的,为避免影响老师后续课程的正常进行,授课老师除完成原定时间安排的授课外,将不再提供额外延长课时。<br/>
+        2.2乙方(含学员,下同)不得携带任何食品进入教室,所有进食应在课前完成;进入教室后,不得大声喧哗、追逐嬉戏,应当听从授课老师的安排;乙方应爱护公共财产和教学设施,严禁在桌椅上刻、划、涂、写等不文明行为;乙方未经授课老师同意,不得擅自使用教室内的乐器、音响、电视、空调等器材、设施,如造成此类器材、设施损坏的,乙方应照价赔偿。<br/>
+        2.3未经授课老师同意,乙方家长不得进入课堂,以免影响老师和学员上课;为保证训练质量及进度,学员应保证按照指导老师或教务老师所提出的要求在家练习,遇到专业问题应及时向指导老师请教,非专业问题可随时向教务老师反映。<br/>
+        2.4乙方家长应教育及监督学员务必注意个人安全,妥善保管个人财物,对于非甲方原因造成的人身安全事故或财物损失,由责任人自行承担。
+        <h3>3.请假、休会及扣费</h3>
+        3.1基于教学进度和质量保证,本课程对于课程的延续性有严格要求,因此乙方应尽量避免请假。<br/>
+        3.2一对一课程有特殊情况需要请假的,应提前24小时以上以书面形式告知对应的授课老师,以便及时调整时间安排;一对多课程,不接受任何个人单独请假,如果集体请假,应提前24小时以上以书面形式告知对应的授课老师,未按本协议约定请假则当次课程视同已经教授,系统将自动结算课时并扣除相应费用。乙方请假后,应尽快预约补课时间完成补课。<br/>
+        3.3一对一课程以及一对二课程,乙方如遇特殊情况时,可向甲方或授课老师】申请办理临时休课。乙方可在6个月内申请复学,超过6个月未申请复课的,甲方有权按自动退会处理。一对二课程申请临时休课的,还需征得同组学员同意后方可申请休课。<br/>
+        3.4每期课程相对应的有效期,乙方应在有效期内完成课程,10次课一期的,自交费之日起4个月内有效;20次课一期的,自交费之日起8个月内有效;40次课一期的,自交费之日起16个月内有效。如果由于指导老师请假等原因造成课程不能如期完成的,课程有效期将顺延;如课程超出有效期限,乙方所缴纳的课程费用将自动扣除逾期未完成的课时后自动清零。
+
+        <h2>三、退费</h2>
+        1、一对一课程开课后,乙方要求退费的,乙方应在课程有效期内提出申请,甲方扣除报名费及未授课部分对应学费的20%后,将余款(不计息,下同)退还给乙方;如果乙方报名时享受打折优惠的,甲方先按照原价计算当期已上课时学费,再扣除报名费及未授课部分学费的20%后,将余款退还给乙方。<br/>
+        2、一对二课程开课后,乙方要求退费的,乙方应在课程有效期内提出申请,甲方扣除报名费及未授课部分的学费30%后,将余款退还给乙方;如果乙方报名时享受了打折优惠的,甲方先按照原价计算当期已上课时学费,再扣除报名费及未授课部分学费的30%后,将余款退还给乙方。<br/>
+        3、除一对一课程以及一对二课程之外的其他课程,课程开课后,甲方不接受任何原因的退款申请。<br/>
+        4、甲方所有收费,均向乙方开具加盖公司印章的收款凭据,乙方务必妥善保管,乙方按照本协议约定退费时,应向甲方出具该收费凭据原件方可办理。
+
+        <h2>四、违约责任</h2>
+        1、当事人一方不履行合同义务或者履行合同义务不符合约定的,均构成违约,守约方有权以书面通知的方式要求违约方纠正其违约行为并采取及时、有效的补救措施消除违约后果,并赔偿守约方因违约方之违约行为而遭致的损失。若违约方在收到守约方的上述通知后5日内未纠正其违约行为的,守约方有权在做出书面通知的情况下,单方解除本协议,违约方应赔偿守约方因此遭致的全部损失。<br/>
+        2、乙方应始终维护甲方的知识产权以及品牌形象,本协议期间以及本协议因任何原因失效、被撤销、解除或终止后,均不得直接或间接通过任何公众媒体(包括但不限于传统大众媒体,以及微信、微博、博客、直播平台等社交平台)发表损害甲方(包括但不限于其产品、服务及甲方授课老师)声誉的言论或实施任何类似行为,否则乙方应赔偿甲方因此遭受的全部损失。
+        <h2>五、保密条款</h2>
+        1、双方对本协议的条款、本协议的签订及履行情况以及通过签订和履行本协议而获知的对方及对方关联公司的任何信息均负有保密义务。任何一方不得以任何形式透露给第三方(有关法律法规要求和甲乙双方的法律、会计顾问、授权雇员除外),也不得擅自使用。<br/>
+        2、本保密义务期限不受本协议期限的限制。本协议失效、被撤销、解除或终止等任何情况下,双方均应遵守本保密义务。<br/>
+
+        <h2>六、不可抗力</h2>
+        1、一方遇到不可抗力事件(指甲乙双方无法控制、无法预见或即使预见也无法避免的事件,该事件妨碍、影响或延误任何一方履行本协议的全部或部分义务,该事件包括但不限于自然灾害(如水灾、地震等)、火灾、政府行为、法律或政策变化(含学校合作变化)、战争或其他任何类似事件)时,受影响方应当立即书面通知对方,并告知该不可抗力事件对本协议可能产生的影响,并在该不可抗力事件发生后5日内向对方提供该事件的详细信息及由有关机构出具的解释受影响方因此无法履行本协议项下全部或部分义务的相关证明。<br/>
+        2、由于上述不可抗力事件致使受影响方无法履行或无法按时履行本协议项下全部或部分义务的,双方于彼此间均不承担违约责任,但双方应在相互信任的基础上协商解决,尽力减少不可抗力事件对本协议的影响,并采取合理方式进行调整(包括但不限于另行签订补充协议等),尽量避免损失的扩大。<br/>
+        3、不可抗力事件消失或结束后,除双方另行协商一致外,受到不可抗力影响的一方应当立即采取措施继续履行本协议,如不可抗力事件持续30日以上的,则任何一方有权以书面通知对方的方式单方解除本协议。<br/>
+
+        <h2>七、适用法律及争议解决方式</h2>
+        1、本协议的订立、效力、履行、解释及争议解决均适用中华人民共和国法律。<br/>
+        2、因履行本协议发生的一切争议,甲乙双方应友好协商解决;如双方在发生争议后30日内无法通过协商解决时,任何一方有权向甲方所在地有管辖权的人民法院提起诉讼解决。<br/>
+
+        <h2>八、其他</h2>
+        1、乙方同意,甲方有权在乙方学习和活动期间对其拍摄照片、视频,甲方对所拍摄的照片、视频有永久免费使用权。<br/>
+        2、未经甲方事先书面同意,乙方不得将本课程转让给乙方以外的任何第三方。<br/>
+        3、双方确认并同意,本协议的电子版本与纸质版本具有同等法律效力。双方发生争议时,电子合同打印件可作为证据提交。双方通过网络以在线方式签订本协议的 ,则以乙方点击“确认”或“同意”等相关按钮或以电子签名的方式作为对合同内容的同意、确认以及本协议的签署;如双方签订纸质版本协议的,则本协议壹式贰份,甲方盖公章或合同专用章并且乙方签字作为有效签署方式,并且双方各执壹份,每份具有同等法律效力。<br/>
+        4、本协议自双方按照本协议约定方式签署之日起生效,有效期至双方履行完本协议约定的全部义务时止。<br/>
+        5、本协议未尽事宜或对本协议的任何修改、补充,有双方另行协商后以签订补充协议的方式解决,补充协议与本协议具有同等法律效力;双方没有约定也没有协商一致的,遵照相关法律法规规定执行。<br/>
+        6、双方因履行本协议而相互发出或者提供的所有通知、文件、资料,均以本协议中所列明的电话、APP推送消息送达,乙方如果变更电话号码的,应当自变更后1日内通知甲方且获得甲方确认,甲方通过电话、APP方式无法联系乙方或者甲方认为必要时,甲方也可以通过特快专递至乙方住址的方式向乙方发出上述任何通知、文件、资料等,并在甲方寄出特快专递后第5日视为送达成功。<br/>
+
+        <div class="signature">
+            <div class="sign">甲方签章:深圳大雅乐盟网络教育股份有限公司
+                <span>日期:${.now?string("yyyy年MM月dd日")}</span>
+            </div>
+            <div class="sign">乙方签字:{{proto}}
+                <span>日期:${.now?string("yyyy年MM月dd日")} </span>
+            </div>
+        </div>
+    </div>
+</body>
+</html>

+ 147 - 0
mec-biz/src/main/resources/config/contracts/goods.ftl

@@ -0,0 +1,147 @@
+<!DOCTYPE html>
+<html lang="en" style="font-size: 100px;">
+<head>
+    <meta charset="utf-8" />
+    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
+    <meta name="viewport" content="width=device-width,initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no, viewport-fit=cover" />
+    <meta http-equiv="Pragma" content="no-cache" />
+    <meta http-equiv="Cache-Control" content="no-cache" />
+    <meta http-equiv="Expires" content="0" />
+    <title>乐器借用协议</title>
+    <style>
+        body { margin: 0; }
+        header {
+            height: .40rem;
+            line-height: .40rem;
+            color: #000;
+            font-size: .17rem;
+            background: #fff;
+            box-shadow: 0px 1px 8px 0px rgba(0, 0, 0, 0.07);
+            text-align: center;
+        }
+        header .back {
+            width: .2rem;
+            height: .2rem;
+            position: absolute;
+            left: .12rem;
+            top: .1rem;
+        }
+        .container {
+            padding: .22rem .2rem .3rem;
+            font-size: .14rem;
+        }
+        h1 {
+            font-size: .16rem;
+            text-align: center;
+        }
+        h2 {
+            font-size: .16rem;
+            font-weight: bold;
+            padding-top: .15rem;
+        }
+        h3 {
+            font-size: .14rem;
+            font-weight: bold;
+        }
+        .signature {
+            display: flex;
+            padding-top: .5rem;
+        }
+        .signature .sign {
+            flex: 1;
+            position: relative;
+        }
+        .signature span {
+            display: block;
+        }
+        .signature .cachet {
+            position: absolute;
+            top: -.6rem;
+            left: 0;
+            width: 1.5rem;
+            height: 1.5rem;
+        }
+        .iInfo {
+            display: flex;
+        }
+        .iInfo span {
+            flex: 1;
+        }
+        .iInfoContent, .iInfoContent span {
+            display: block;
+        }
+    </style>
+</head>
+<body style="font-family:'SimSun'">
+    <div class="container">
+        <h1>《乐器借用协议》</h1>
+        甲方:深圳大雅乐盟网络教育股份有限公司 <br/>
+        <div style="display: flex;">乙方:
+            <div style="flex: 1 auto;">
+                <div class="iInfo">
+                    <span>家长姓名 ${studentInfo.realName}</span>
+                    <span>电话: ${studentInfo.phone}</span>
+                </div>
+                <div class="iInfo">
+                    <span>身份证号:${studentInfo.idCardNo}</span>
+                </div>
+                <div class="iInfo">
+                    <span>学生姓名:${studentInfo.name}</span>
+                    <span>所在班级:${studentInfo.grade} ${studentInfo.clazz}</span>
+                </div>
+                <div class="iInfo">
+                    <span>所在声部:${studentInfo.subject.name}</span>
+                </div>
+            </div>
+        </div>                     
+        
+        为了促进学校乐团健康、持续发展,让更多的学生在校园拥有良好的器乐学习机会,甲方基于公益普惠的原则,决定提供价值${goodsList[0].marketPrice?string("#.##")}元的KEY品牌全新乐器供乙方在学校乐团期间免费使用。现根据《中华人民共和国合同法》等法律法规规定,为明确甲乙双方权利义务,经协商一致,就乙方借用乐器事宜达成如下协议:
+        <h2>一、甲方权利与义务:</h2>
+        1、乙方所借用的乐器为甲方资产,乐器所有权归属甲方所有,甲方有权在必要时向乙方收回借用乐器并退还押金。<br/>
+        2、甲方所提供乐器为全新的KEY品牌乐器。在乙方签订本协议、交纳乐器使用押金后,甲方即将乐器交付给乙方供其在学校乐团期间免费使用。<br/>
+        3、乙方归还乐器时,双方当面当场验收,经甲方维修技师检验确认乐器无人为损坏、可正常使用后,甲方在七个工作日内全额不计息退还乙方已交纳的押金。<br/>
+        4、如乙方已购买甲方乐器保养服务,甲方需在乙方借用期间协助乙方处理乐器维修和保养问题。
+        <h2>二、乙方权利与义务:</h2>
+        1、乙方在签订本协议、交纳乐器使用押金¥{{proto}}元(大写人民币{{proto}}元整)后,享有所借用乐器在学校乐团期间的免费使用权。乙方应当爱惜乐器并妥善保管,不得将该乐器转租、借用、出售、典当、质押或抵押,也不得将乐器交于非专业人士使用。乐器借用政策,每位团员仅可享受一次,退团后再次加入乐团的,将无法享受乐器借用政策。<br/>
+        2、乐器日常维护由乙方自行完成,每次练习完毕后需按老师要求对乐器进行擦拭并装箱保管。如因人为原因(包括但不限于磕、碰、摔等)造成乐器损坏的,乙方需自行承担维修费用;如因非甲方原因导致乐器无法正常使用(正常使用磨损除外)或乐器毁损、灭失、遗失的,乙方须按本协议中明示的乐器团购价格进行赔付。<br/>
+        3、当乙方决定不再继续乐团学习时,应在退团之日起1日内将其借用的乐器归还甲方,双方当面当场验收,经甲方维修技师检验确认乐器无人为损坏、可正常使用后,乙方可按照本协议约定获得已交纳的押金;经甲方维修技师检验,乐器存在损坏的,乙方应承担相应的维修费用,如乐器已经无法正常使用的,乙方须按本协议中明示的乐器团购价格进行赔付,甲方有权从应退还乙方的押金中先行扣除维修费用、赔付费用,如甲方扣除押金后仍然不足以弥补维修费用、赔付费用的,甲方有权继续要求乙方支付剩余费用。<br/>
+        4、乙方终止乐团学习2个月内,仍未将乐器归还给甲方的,则视为乙方违约,乙方所交押金甲方有权不予退还,同时乙方须按乐器团购价格进行赔付。
+        <h2>三、乐器标准:</h2> 
+        <div class="iInfo">
+            <span>名称:${goodsList[0].name}</span>
+            <span>品牌:${goodsList[0].brand}</span>  
+        </div>
+        <div class="iInfo">
+            <span>型号:${goodsList[0].specification}</span>
+            <span>团购价格:${goodsList[0].groupPurchasePrice?string("#.##")}</span>
+        </div>
+
+        <h2>四、违约责任</h2>  
+        1、当事人一方不履行合同义务或者履行合同义务不符合约定的,均构成违约,守约方有权以书面通知的方式要求违约方纠正其违约行为并采取及时、有效的补救措施消除违约后果,并赔偿守约方因违约方之违约行为而遭致的损失。若违约方在收到守约方的上述通知后5日内未纠正其违约行为的,守约方有权在做出书面通知的情况下,单方解除本协议,违约方应赔偿守约方因此遭致的全部损失。<br/>
+        2、乙方应始终维护甲方的知识产权以及品牌形象,本协议期间以及本协议因任何原因失效、被撤销、解除或终止后,均不得直接或间接通过任何公众媒体(包括但不限于传统大众媒体,以及微信、微博、博客、直播平台等社交平台)发表损害甲方(包括但不限于其产品、服务或甲方授课老师)声誉的言论或实施任何类似行为,否则乙方应赔偿甲方因此遭受的全部损失。
+        <h2>五、保密条款</h2>
+        1、双方对本协议的条款、本协议的签订及履行情况以及通过签订和履行本协议而获知的对方及对方关联公司的任何信息均负有保密义务。任何一方不得以任何形式透露给第三方(有关法律法规要求和甲乙双方的法律、会计顾问、授权雇员除外),也不得擅自使用。
+        2、本保密义务期限不受本协议期限的限制。本协议失效、被撤销、解除或终止等任何情况下,双方均应遵守本保密义务。
+        <h2>六、不可抗力</h2>
+        1、一方遇到不可抗力事件(指甲乙双方无法控制、无法预见或即使预见也无法避免的事件,该事件妨碍、影响或延误任何一方履行本协议的全部或部分义务,该事件包括但不限于自然灾害(如水灾、地震等)、火灾、政府行为、法律或政策变化(含学校合作变化)、战争或其他任何类似事件)时,受影响方应当立即书面通知对方,并告知该不可抗力事件对本协议可能产生的影响,并在该不可抗力事件发生后5日内向对方提供该事件的详细信息及由有关机构出具的解释受影响方因此无法履行本协议项下全部或部分义务的相关证明。<br/>
+        2、由于上述不可抗力事件致使受影响方无法履行或无法按时履行本协议项下全部或部分义务的,双方于彼此间均不承担违约责任,但双方应在相互信任的基础上协商解决,尽力减少不可抗力事件对本协议的影响,并采取合理方式进行调整(包括但不限于另行签订补充协议等),尽量避免损失的扩大。<br/>
+        3、不可抗力事件消失或结束后,除双方另行协商一致外,受到不可抗力影响的一方应当立即采取措施继续履行本协议,如不可抗力事件持续30日以上的,则任何一方有权以书面通知对方的方式单方解除本协议。
+        <h2>七、适用法律及争议解决方式</h2>
+        1、本协议的订立、效力、履行、解释及争议解决均适用中华人民共和国法律。<br/>
+        2、因履行本协议发生的一切争议,甲乙双方应友好协商解决;如双方在发生争议后30日内无法通过协商解决时,任何一方有权向甲方所在地有管辖权的人民法院提起诉讼解决。
+        <h2>八、其他</h2>
+        1、本协议自双方按照本协议约定方式签署之日起生效,有效期至双方履行完本协议约定的全部义务时止。<br/>
+        2、双方确认并同意,本协议的电子版本与纸质版本具有同等法律效力。双方发生争议时,电子合同打印件可作为证据提交。双方通过网络以在线方式签订本协议的 ,则以乙方点击“确认”或“同意”等相关按钮或以电子签名的方式作为对合同内容的同意、确认以及本协议的签署;如双方签订纸质版本协议的,则本协议壹式贰份,甲方盖公章或合同专用章并且乙方签字作为有效签署方式,并且双方各执壹份,每份具有同等法律效力。<br/>
+        3、本协议未尽事宜或对本协议的任何修改、补充,由双方另行协商后以签订补充协议的方式解决,补充协议与本协议具有同等法律效力;双方没有约定也没有协商一致的,遵照相关法律法规规定执行。<br/>
+        4、双方因履行本协议而相互发出或者提供的所有通知、文件、资料,均以本协议中所列明的电话、APP推送消息送达,乙方如果变更电话号码的,应当自变更后1日内通知甲方且获得甲方确认,甲方通过电话、APP方式无法联系乙方或者甲方认为必要时,甲方也可以通过特快专递至乙方住址的方式向乙方发出上述任何通知、文件、资料等,并在甲方寄出特快专递后第5日视为送达成功。
+        <div class="signature">
+            <div class="sign">甲方签章:深圳大雅乐盟网络教育股份有限公司
+                <span>日期:${.now?string("yyyy年MM月dd日")}</span>
+            </div>
+            <div class="sign">乙方签字:${studentInfo.realName}
+                <span>日期:${.now?string("yyyy年MM月dd日")} </span>
+            </div>
+        </div>
+    </div>
+</body>
+</html>

+ 222 - 0
mec-biz/src/main/resources/config/contracts/register.ftl

@@ -0,0 +1,222 @@
+<!DOCTYPE html>
+<html lang="en" style="font-size: 100px;">
+<head>
+    <meta charset="utf-8" />
+    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
+    <meta name="viewport" content="width=device-width,initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no, viewport-fit=cover" />
+    <meta http-equiv="Pragma" content="no-cache" />
+    <meta http-equiv="Cache-Control" content="no-cache" />
+    <meta http-equiv="Expires" content="0" />
+    <title>APP用户注册及乐团注册服务协议</title>
+    <style type="text/css">
+        body { margin: 0; }
+        header {
+            height: .40rem;
+            line-height: .40rem;
+            color: #000;
+            font-size: .17rem;
+            background: #fff;
+            box-shadow: 0px 1px 8px 0px rgba(0, 0, 0, 0.07);
+            text-align: center;
+        }
+        header .back {
+            width: .2rem;
+            height: .2rem;
+            position: absolute;
+            left: .12rem;
+            top: .1rem;
+        }
+        .container {
+            padding: .22rem .2rem .3rem;
+            font-size: .14rem;
+        }
+        h1 {
+            font-size: .16rem;
+            text-align: center;
+        }
+        h2 {
+            font-size: .16rem;
+            font-weight: bold;
+            padding-top: .15rem;
+        }
+        h3 {
+            font-size: .14rem;
+            font-weight: bold;
+        }
+        .signature {
+            display: flex;
+            padding-top: .5rem;
+        }
+        .signature .sign {
+            flex: 1;
+            position: relative;
+        }
+        .signature span {
+            display: block;
+        }
+        .signature .cachet {
+            position: absolute;
+            top: -.6rem;
+            left: 0;
+            width: 1.5rem;
+            height: 1.5rem;
+        }
+        .iInfo {
+            display: flex;
+        }
+        .iInfo span {
+            flex: 1;
+        }
+        .iInfoContent, .iInfoContent span {
+            display: block;
+        }
+    </style>
+</head>
+<body style="font-family:'SimSun'">
+    <div class="container">
+        <h1>《APP用户注册及乐团注册服务协议》</h1>
+
+        欢迎用户使用{{proto}}(下称“本软件”),请用户在使用本软件前仔细阅读本协议。如用户不同意本协议任何条款,请勿在本软件注册账号或使用大雅乐盟基于本软件提供的服务(下称“本服务”)。用户点击“注册”、“登录”或“同意”等按钮或使用本服务后,本协议即构成大雅乐盟与用户之间具有约束力的法律文件。
+        <h2>一、提示</h2>
+        1. 用户在使用本软件或本服务前,应当认真阅读本协议。请用户务必审慎阅读、充分理解各条款内容,特别是免除或者限制责任的条款、法律适用和争议解决条款。免除或者限制责任的条款将以粗体下划线标识,用户应重点阅读,并自行选择接受或不接受。如用户对本协议有任何疑问,可联系大雅乐盟。<br/>
+        2. 当用户按照注册页面提示填写信息、阅读并同意本协议且完成全部注册程序,或登录本软件,或使用本服务后,即表示用户已充分阅读、理解并接受本协议的全部内容,并与大雅乐盟达成一致,成为大雅乐盟的用户。阅读本协议的过程中,如果用户不同意或不接受本协议任何条款,用户应立即停止注册、登录本软件或使用本服务。<br/>
+        3. 大雅乐盟可以随时更新本协议的各项条款,包括但不限于增加新的服务类型或功能,更新后的协议条款一经大雅乐盟在本软件公布或更新即生效并代替原来的协议条款,大雅乐盟不会另行通知用户,用户可以及时关注并阅读大雅乐盟更新的本协议最新版本;用户继续使用本软件或本服务的,视为用户接受本协议的最新更新版本;用户不接受本协议最新版本的,应立即停止使用本软件或本服务。<br/>
+        4. 特别提醒:未满18周岁的用户应在法定监护人的陪同下阅读后,并且应在法定监护人的同意和指导下注册和/或使用本软件及本服务。
+        <h2>二、关于本软件及本服务的重要提示</h2>
+        1. 用户使用本服务需要下载本软件的客户端版本,本软件的客户端版本提供包括但不限于 iOS、Android等多个应用版本,用户必须选择与所安装终端设备相匹配的软件版本。 用户可以直接从大雅乐盟的网站上获取本软件,也可以从得到大雅乐盟授权的第三方获取。如果用户从未经大雅乐盟授权的第三方获取本软件或与本软件名称相同的安装程序,大雅乐盟无法保证该软件能够正常使用,并对因此给用户造成的损失不予负责。下载安装程序后,用户需要按照该程序提示的步骤正确安装。<br/>
+        2. 为了改善用户体验、完善服务内容,大雅乐盟将不断努力开发新的服务,并为用户不时提供软件更新(这些更新可能会采取软件替换、修改、功能强化、版本升级等形式)。大雅乐盟有权不经向用户特别通知而对本软件进行更新,或者对本软件的部分功能效果进行改变或限制。新版本发布后,旧版本的软件可能无法使用。大雅乐盟无法保证旧版本软件继续可用及相应的客户服务,请用户随时核对并下载最新版本。<br/>
+        3. 用户理解并同意:为了向用户提供有效的服务,本软件会利用用户终端设备的处理器和带宽等资源,用户使用本软件时,需要接入互联网、移动互联网,此时可能产生数据流量的费用,用户需自行向运营商了解相关资费信息,并自行承担接入互联网、移动互联网所需的费用(包括但不限于上网费、通讯费)以及使用本软件及本服务必需的设备(包括但不限于电脑、手机等移动终端设备)。<br/>
+        4. 大雅乐盟给予用户一项个人的、不可转让及非排他性的许可,以使用本软件。用户可以为非商业目的在单一台终端设备上安装、使用、显示、运行本软件。用户不得为商业运营目的安装、使用、运行本软件,不可以对该软件或者该软件运行过程中释放到任何计算机终端内存中的数据及该软件运行过程中客户端与服务器端的交互数据进行复制、更改、修改、挂接运行或创作任何衍生作品,形式包括但不限于使用插件、外挂或非经授权的第三方工具/服务接入本软件和相关系统。<br/>
+        5. 本协议其他条款未明示授权的其他一切权利仍由大雅乐盟保留,用户在行使这些权利时须另外取得大雅乐盟的书面许可。大雅乐盟如果未行使前述任何权利,并不构成对该权利的放弃。
+        
+        <h2>三、服务内容</h2> 
+        1. 大雅乐盟:即{{proto}}。<br/>
+        2. 本服务是基于互联网及移动互联网,通过本软件向用户提供【直播教学、录播教学、智能打分、学员管理等】功能服务。大雅乐盟以乐团为单位对用户进行管理,用户注册本软件即视为用户同意参加乐团,遵守乐团的各项制度和管理。用户在使用本软件或本服务过程中发生任何问题的,可以与大雅乐盟乐团老师联系和处理。具体内容及具体规则以用户与大雅乐盟签署的协议及/或本软件公示的内容为准。<br/>
+        3. 服务功能介绍:<br/>
+        直播教学:{{proto}}<br/>
+        录播教学:{{proto}}<br/>
+        智能打分:{{proto}}<br/>
+        学员管理:{{proto}}<br/>
+        4. 本软件规则包括但不限于大雅乐盟通过官网、本软件等途径发布的全部规则、细则、解读、说明公告等。<br/>
+        5. 服务费用<br/>
+        5.1 用户使用本软件或本服务的费用以用户与大雅乐盟签署的协议及/或本软件公示的内容为准。<br/>
+        6. 乐团管理<br/>
+        6.1大雅乐盟有权对用户进行管理,制定乐团各项制度,对用户在乐团的日常行为进行管理。<br/>
+        
+        <h2>四、用户账户注册、使用与管理</h2>  
+        1. 用户资格<br/>
+        用户开始使用本软件或本服务前,应当具备中华人民共和国法律规定的与用户行为相对应的民事行为能力,否则用户的法定监护人应依照法律规定承担因此而导致的一切后果。<br/>
+        2. 账户说明<br/>
+        用户使用本软件时,应当注册账户,注册时可以使用{{proto}},用户应当提供并填写真实、合法、准确、完整的资料和信息,并在相关信息变更时在1个工作日内在本软件更新。因用户提供或填写的资料、信息不符合上述要求而导致的任何问题及后果,应由用户自行承担,大雅乐盟不对此承担任何责任。当用户按照注册页面提示填写信息、阅读并同意本协议且完成全部注册程序后,用户可获得本软件账户并成为本软件用户。<br/>
+        3. 账户安全规范<br/>
+        3.1 用户的账户由用户自行设置、保管。建议用户务必保管好用户的账户及密码,当用户每次使用完本软件时,应以正确步骤离开本软件。用户了解并同意,确保用户账户及密码的机密安全是用户的责任。用户将对利用该账户及密码所进行的一切行动及言论负完全的责任,并同意以下事项:<br/>
+        3.1.1 用户主动泄露账户、密码或遭受他人攻击、诈骗等行为导致的损失及后果,均由用户自行承担;<br/>
+        3.1.2 用户的账户只限用户本人使用,未经大雅乐盟事先书面同意,不得将账户提供、转让、许可、出售给任何第三方;<br/>
+        3.1.3 擅自使用他人账户及密码的,大雅乐盟及其合法授权主体有权追究实际使用人的法律责任;<br/>
+        3.1.4 用户应当设置符合本软件要求的密码,并妥善保管和保护密码,不得随意告诉他人,并定期更新密码。大雅乐盟同时还建议用户通过使用复杂密码等方式,不要使用过于简单的词语或数字,以保证用户的账号、密码安全;<br/>
+        3.1.5 如发现任何未经授权使用用户账户访问和/或使用本软件或其他可能导致用户账户遭窃、遗失的情况,建议用户立即通知大雅乐盟。<br/>
+        3.2 大雅乐盟有权基于单方独立判断,在其认为可能发生危害交易安全等情形时,不经通知而先行暂停、中断或终止向用户提供本协议项下的全部或部分用户服务,并将注册资料移除或删除,且无需对用户或任何第三方承担任何责任。前述情形包括但不限于:<br/>
+        3.2.1 大雅乐盟发现异常交易或有理由认为存在违法违规情形时;<br/>
+        3.2.2 大雅乐盟认为用户账户被冒用或其他大雅乐盟认为有风险的其他情形。<br/>
+        4. 用户忘记或丢失账户、密码时,可以按照本软件的申诉途径凭初始注册资料找回账户,但大雅乐盟并不承诺用户忘记或丢失账户后一定能通过申诉途径找回该账户。本软件的账户或密码找回/重设机制仅负责识别用户在申诉申请上所填资料与系统记录资料的一致性,而无法识别申诉人是否系真正账户使用权人。用户因忘记或丢失账户或密码而遭致任何法律责任或损失的,用户应自行承担全部法律责任及损失,大雅乐盟不对此承担任何责任。<br/>
+        5. 用户理解并同意,本软件同大多数互联网软件一样,可能会受多种因素影响,包括但不限于用户原因、网络服务质量、社会环境等;也可能会受各种安全问题的侵扰,包括但不限于他人非法利用用户资料,进行现实中的骚扰;用户下载安装的其他软件或访问的其他网站中可能含有病毒、木马程序或其他恶意程序,威胁用户的终端设备信息和数据安全,继而影响本软件的正常使用等。因此,用户应加强信息安全及个人信息的保护意识,注意密码保护,以免遭受损失。<br/>
+        
+        <h2>五、服务使用规则</h2>
+        1. 用户使用本软件或本服务时,不得实施下列行为:<br/>
+        1.1使用本软件或本服务的过程中出现下列情形:<br/>
+        1.1.1破坏宪法所确定的基本原则的;<br/>
+        1.1.2危害国家安全、泄露国家秘密、颠覆国家政权、破坏国家统一的;<br/>
+        1.1.3损害国家荣誉和利益的;<br/>
+        1.1.4煽动民族仇恨、民族歧视,破坏民族团结的;<br/>
+        1.1.5破坏国家宗教政策,宣扬邪教和封建迷信的;<br/>
+        1.1.6散布谣言,扰乱社会秩序,破坏社会稳定的;<br/>
+        1.1.7散布淫秽、色情、赌博、暴力、凶杀、恐怖或者教唆犯罪的;<br/>
+        1.1.8侮辱或者诽谤他人,侵害他人合法权益的;<br/>
+        1.1.9含有法律法规、行政规章所禁止的其他内容的;<br/>
+        1.2 发布、传送、传播、储存侵害他人合法权利(包括但不限于名誉权、肖像权、知识产权、商业秘密等)的内容;<br/>
+        1.3 发布、传送、传播、储存与他人隐私、个人信息或资料有关的内容;<br/>
+        1.4 发布、传送、传播虚假、骚扰、营销、广告、诱导分享等相关的内容;<br/>
+        1.5 违反法律法规或干扰、破坏大雅乐盟、本软件的正常运营的其他内容。<br/>
+        2. 未经大雅乐盟事先书面同意,用户使用本软件时不得有下列行为:<br/>
+        2.1 以创建相同、类似或竞争服务为目的访问本软件或使用本服务;<br/>
+        2.2 删除、遮掩、修改本软件及其副本上关于著作权的声明;<br/>
+        2.3 对本软件或本服务(包括但不限于服务或其内容中的广告或赞助内容)进行任何形式的许可、出售、租赁、转让、发行或做其他商业用途;<br/>
+        2.4 通过修改或伪造软件运行中的指令、数据,或者增加、删减、变动软件的功能或运行效果,或者将用于上述用途的软件、方法进行运营或向公众传播,无论是否基于商业目的;<br/>
+        2.5 通过非大雅乐盟开发、授权的第三方软件、插件、外挂、系统,登录或使用本软件或本服务;<br/>
+        2.6 自行或者授权他人、第三方软件对本软件及其组件、模块、数据进行干扰,或在本软件或利用本服务上传或发布病毒、蠕虫、恶意代码、故意破坏或改变系统或数据的软件;<br/>
+        2.7 其他未经大雅乐盟明示授权的行为。<br/>
+        3. 用户内容是指用户上传、提供信息和资料或以其他方式使用本软件与本服务时产生的所有内容(包括但不限于用户信息、资料、图片或其他内容),用户是用户内容的唯一的责任人,应当承担因用户内容披露而导致的用户或任何第三方被识别的风险。<br/>
+        4. 用户充分了解并同意,用户必须为自己注册账号下的一切行为负责,包括用户所发表的任何内容以及由此产生的任何后果。用户应对本服务中的内容自行加以判断,并承担因使用内容而引起的所有风险,包括因对内容的正确性、完整性或实用性的依赖而产生的风险。大雅乐盟无法且不会对因前述风险而导致的任何损失或损害承担责任。<br/>
+        5. 用户应服从大雅乐盟乐团的管理,用户在乐团出现下列情形的,大雅乐盟有权对用户作出警告,用户收到警告后仍然不遵守大雅乐盟的管理制度的,大雅乐盟有权对用户作出退团等处分:<br/>
+        5.1上课、排练时不遵守纪律,影响乐团其他团员的正常上课、排练;<br/>
+        5.2不服从乐团老师的管理和指导;<br/>
+        5.3一个学期内发生两次及以上缺席乐团上课、排练行为;<br/>
+        5.4一个学期内发生两次及以上未按老师要求回传视频作业的情形;<br/>
+        5.5连续{{proto}}天不练习,影响乐团团员和乐团的整体水平的。<br/>
+        6. 用户在每次参加乐团排练、训练时,应按专业老师要求带齐训练所需乐器、教材乐谱、乐谱本、铅笔及乐器护理等学习用品,并提前10分钟到达排练场地,做好准备工作;始终保持排练、训练场地的清洁卫生;如遇到特殊情况无法参加乐团排练、训练时,应提前一天向乐团老师请假。<br/>
+        7. 因用户个人原因未能按时上课的,视为该用户放弃该次上课,学校乐团声部训练不因用户请假而停止整个声部课教学,如用户因此给乐团造成任何不良影响的,用户应尽力弥补并消除该不良影响。<br/>
+        8. 用户应保证每日练习时间不少于20分钟,并按专业老师要求通过本软件回传周视频作业。<br/>
+        9. 退团:用户如因自身原因拟退出乐团的,应向学校申请退团,并获得学校的同意退团批准,再经用户家长确认后,方可退团。<br/>
+
+        
+        <h2>六、第三方链接及服务</h2>
+        1. 本软件或本服务可能保留有第三方网站或网址的链接,访问这些链接将由用户自己做出决定,大雅乐盟并不就这些链接上所提供的任何信息、数据、观点、图片、陈述或建议的准确性、完整性、充分性和可靠性提供承诺或保证。大雅乐盟没有审查过任何第三方网站,对这些网站及其内容不进行控制,也不负任何责任。如果用户决定访问任何与本站链接的第三方网站,其可能带来的结果和风险全部由用户自己承担。<br/>
+        2. 用户在使用本软件中第三方提供的产品或服务时,除遵守本协议约定外,还应遵守第三方的用户协议。大雅乐盟和第三方对可能出现的纠纷在法律规定和约定的范围内各自承担责任。因用户使用本软件或要求大雅乐盟提供特定服务时,本软件可能会调用第三方系统或者通过第三方支持用户的使用或访问,使用或访问的结果由该第三方提供(包括但不限于第三方通过公众账号提供的服务,或通过开放平台接入的内容等),大雅乐盟不保证通过第三方提供服务及内容的安全性、准确性、有效性及其他不确定的风险,由此若引发的任何争议及损害,与大雅乐盟无关,大雅乐盟不承担任何责任。<br/>
+        3. 用户已知晓并同意大雅乐盟提供本服务(无论是免费服务还是有偿服务)还可能基于第三方如合作单位(包括但不限于电信运营商)提供的技术支持等服务获得。如果因第三方提供的服务给用户增加任何成本或造成任何损失的,大雅乐盟会协助用户与第三方进行沟通和处理,如因此发生维修、更换等费用的,应由用户自行承担,大雅乐盟不对此承担任何法律责任和赔偿责任。<br/>
+        
+        <h2>七、知识产权的保护以及保密</h2>
+        1. 大雅乐盟的商标、商号、Logo、图形及其组合,以及大雅乐盟的其他标识、产品和服务名称均为大雅乐盟或大雅乐盟关联公司所有,未经大雅乐盟书面授权,任何人不得以任何方式展示、使用或作其他处理,也不得向任何第三方表明或让其误认为其有权展示、使用或作其他处理。<br/>
+        2. 大雅乐盟提供的培训、课程相关的全部内容(包括但不限于培训课程设置、培训课件、教材等)的知识产权均归大雅乐盟单独和完整所有。用户应当保护大雅乐盟的知识产权,只能用于自身学习之目的,未经大雅乐盟事先书面同意,不得擅自将培训课程相关的任何内容进行复制、复印、影音、拍摄或进行摘要等措施后以转让、出售、赠与或其他任何形式提供给任何第三方,否则大雅乐盟有权追究其法律责任。<br/>
+        3. 大雅乐盟为提供服务而使用的任何软件(包括但不限于软件中所含的任何图象、照片、动画、录像、录音、音乐、文字和附加程序、随附的帮助材料)的一切权利均属于该软件的著作权人,未经该软件的著作权人许可,用户不得对该软件进行反向工程(reverse engineer)、反向编译(decompile)或反汇编(disassemble)。<br/>
+        4. 用户已经了解并同意:在大雅乐盟提供的所有服务器上的数据(包括但不限于虚拟物品等)全部归大雅乐盟所有。在不影响用户正常接收服务的情况下,大雅乐盟有权决定保留或不保留服务器上的全部或部分数据。<br/>
+        5. 用户已经了解并同意:大雅乐盟有权将本协议项下大雅乐盟所有的知识产权授权第三方使用,在变更产品运营商时,大雅乐盟可以将其运营的产品或服务以及与该在产品或服务相关的归大雅乐盟所有的知识产权转让给新的产品运营商。<br/>
+        6. 用户使用大雅乐盟提供的本软件或本服务期间获取的文件、资料、表格等信息,包括但不限于有关合作资料、营销资料等,无论是口头、书面的或是电子文件形式的,均属大雅乐盟的商业秘密,用户必须对这些商业秘密严格遵守保密义务,不得向外透露,也不得使用这些商业秘密为自己或他人谋取利益。<br/>
+        
+        <h2>八、违约条款</h2>
+        1. 用户违反本协议约定时即构成违约情形,大雅乐盟有权要求用户采取及时的补救措施,消除违约后果,并有权终止本协议。如用户的违约行为使大雅乐盟及/或关联公司遭受损失(包括自身的直接经济损失、商誉损失及对外支付的赔偿金、和解款、律师费、诉讼费等间接经济损失)的,用户应赔偿大雅乐盟及/或关联公司的上述全部损失。<br/>
+        2. 用户理解并同意,如用户的行为导致第三方向大雅乐盟及/或关联公司主张权利或任何索赔、要求或损失的,大雅乐盟及/或关联公司在对第三人承担赔偿义务后可向用户追偿与此相关的全部损失。<br/>
+        
+        <h2>九、协议终止</h2>
+        1. 用户有权通过以下任一方式终止本协议:<br/>
+        1.1用户自行注销用户的账户的;<br/>
+        1.2用户按照本协议约定方式退出乐团的;<br/>
+        1.3 变更事项生效或服务协议更新时,用户停止使用并明示不愿接受变更事项或明示不愿接受更新后的服务协议的;<br/>
+        1.4 用户明示不愿继续使用本软件或本服务,且符合本协议终止条件的。<br/>
+        2. 出现以下情况时,大雅乐盟可以终止本协议:<br/>
+        2.1 用户违反本协议约定的,大雅乐盟依据违约条款终止本协议,或对用户处以退团处分的;<br/>
+        2.2 用户的账户被大雅乐盟依据本协议进行注销等清理的;<br/>
+        2.3 用户在使用本软件或本服务时存在侵犯他人合法权益或其他严重违法违规行为的;<br/>
+        2.4 不可抗力导致本协议不能履行的(“不可抗力”是指双方不可预见、或可以预见但不能避免并或克服的客观情况,该事件妨碍、影响或延误任何一方根据合同履行其全部或部分义务。该事件包括但不限于政府行为、法律或规定的发布或修订,自然灾害、战争、网络堵塞或中断、黑客袭击或任何其他类似事件),且该不可抗力持续30天以上的;<br/>
+        2.5 根据相关法律法规规定大雅乐盟应当终止服务或大雅乐盟认为需终止服务的其他情形。<br/>
+        3. 协议终止后的处理<br/>
+        本协议终止后,除法律有明确规定外,大雅乐盟无义务向用户或用户指定的第三方披露用户账户中的任何信息。<br/>
+
+        <h2>十、责任限制</h2>
+        1. 用户使用本软件或本服务的风险应由用户自行承担,大雅乐盟对本软件不作任何类型的担保,不论是明示的、默示的保证和条件,包括但不限于本软件的适销性、适用性、无病毒、无疏忽或无技术瑕疵问题、所有权和无侵权的明示或默示担保和条件,对在任何情况下因使用或不能使用本软件所产生的直接、间接、偶然、特殊及后续的损害及风险,大雅乐盟不承担任何责任。<br/>
+        2. 用户明确理解和同意,大雅乐盟不对因下述任一情况而导致的损害赔偿承担责任,包括但不限于利润、商誉、使用、数据等方面的损失或其它无形损失的损害赔偿:<br/>
+        1.1 大雅乐盟向用户免费提供的任何产品或者服务;<br/>
+        1.2 大雅乐盟向用户赠送的任何产品或者服务;<br/>
+        1.3 对于用户使用本软件上可能涉及由第三方所有、控制或者运营的网站或平台提供的服务及其导致的风险;<br/>
+        1.4 因用户的过错导致的任何损失,该过错包括但不限于:决策失误、操作不当、遗忘或泄露密码、密码被他人破解、用户使用的计算机系统被第三方侵入、用户向大雅乐盟发送的指令信息不明确或存在歧义、用户下载非法或不明程序、用户委托他人代理交易时他人恶意或不当操作而造成的损失;<br/>
+        1.5 信息网络设备连接故障,电脑、通讯或其他系统出现故障,不能进行数据传输、保存的;<br/>
+        1.6 本软件或其服务器停机维护期间;<br/>
+        1.7 不可抗力因素导致的任何损失;<br/>
+        1.8 大雅乐盟依据本协议约定终止协议时。<br/>
+        3. 用户理解并同意,因大雅乐盟过错导致用户不能享受相应服务,大雅乐盟承担相应责任的最高限额不超过用户实际支付的当次服务费用总额。<br/>
+        4. 大雅乐盟努力保障用户的知情权,如主动中断或终止部分或全部网络服务,应提前90日在大雅乐盟服务平台以公告通知、app推送等方式通知。<br/>
+         
+        <h2>十一、隐私权保护政策</h2>
+        用户及用户的监护人同意,大雅乐盟向用户提供本服务时,会收集、使用必要的用户个人信息,包括但不限于用户姓名、性别、年龄、学校、班级、联系方式、用户监护人的姓名及联系方式等,并将收集到的信息用于提供本服务必需的目的和场景。大雅乐盟不会收集与提供本服务无关的用户个人信息,具体隐私权保护政策详见大雅乐盟或本软件公示的《隐私政策》。<br/>
+         
+        <h2>十二、争议解决及适用法律</h2>
+        1. 本协议及其修订的有效性、履行、解释及争议解决,均适用中华人民共和国大陆地区法律。<br/>
+        2. 用户与大雅乐盟之间就本协议发生的任何纠纷或争议,首先应友好协商解决,协商不成的,应将纠纷或争议提交至大雅乐盟所在地有管辖权的法院管辖。<br/>
+
+        <h2>十三、其他</h2>
+        1. 如本协议中的任何条款无论因何种原因导致全部或部分无效或不具有执行力的,则该条款应视为自始不存在且不影响本协议其他条款的效力,此时该条款可被新的条款所取代,以保证最大限度地接近双方意图、确保本协议要求的经济目的,以及实现原有条款的意图。<br/>
+        2. 本协议中的标题仅为方便而设,本身并无实际涵义,不能作为本协议涵义解释的依据。<br/>
+        3. 如用户对本软件、本服务或本协议内容有任何疑问、意见或建议,用户可联系大雅乐盟,联系电话:{{proto}},大雅乐盟将及时回复用户的请求。<br/>
+
+    </div>
+</body>
+</html>

BIN
mec-biz/src/main/resources/config/fonts/simsun.ttc


+ 3 - 0
mec-biz/src/main/resources/config/mybatis/ClassGroupMapper.xml

@@ -381,4 +381,7 @@
             LEFT JOIN teacher_school ts ON vg.teacher_school_id_ = ts.id_
             WHERE cgsm.user_id_ = #{search} AND cg.type_ = 'VIP') a
     </select>
+    <select id="countClassStudent" resultType="int">
+        select count(*) from class_group_student_mapper where class_group_id_=#{classGroupId}
+    </select>
 </mapper>

+ 86 - 0
mec-biz/src/main/resources/config/mybatis/CourseScheduleComplaintsMapper.xml

@@ -0,0 +1,86 @@
+<?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.ym.mec.biz.dal.dao.CourseScheduleComplaintsDao">
+	
+	<resultMap type="com.ym.mec.biz.dal.entity.CourseScheduleComplaints" id="CourseScheduleComplaints">
+		<result column="id_" property="id" />
+		<result column="user_id_" property="userId" />
+		<result column="course_schedule_id_" property="courseScheduleId" />
+		<result column="reason_" property="reason" />
+		<result column="status_" property="status" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
+		<result column="wf_process_id_" property="wfProcessId" />
+		<result column="wf_order_id_" property="wfOrderId" />
+		<result column="create_time_" property="createTime" />
+		<result column="update_time_" property="updateTime" />
+	</resultMap>
+	
+	<!-- 根据主键查询一条记录 -->
+	<select id="get" resultMap="CourseScheduleComplaints" >
+		SELECT * FROM course_schedule_complaints WHERE id_ = #{id} 
+	</select>
+	
+	<!-- 全查询 -->
+	<select id="findAll" resultMap="CourseScheduleComplaints">
+		SELECT * FROM course_schedule_complaints ORDER BY id_
+	</select>
+	
+	<!-- 向数据库增加一条记录 -->
+	<insert id="insert" parameterType="com.ym.mec.biz.dal.entity.CourseScheduleComplaints" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
+		<!--
+		<selectKey resultClass="int" keyProperty="id" > 
+		SELECT SEQ_WSDEFINITION_ID.nextval AS ID FROM DUAL 
+		</selectKey>
+		-->
+		INSERT INTO course_schedule_complaints (id_,user_id_,course_schedule_id_,reason_,status_,wf_process_id_,wf_order_id_,create_time_,update_time_) VALUES(#{id},#{userId},#{courseScheduleId},#{reason},#{status, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{wfProcessId},#{wfOrderId},now(),now())
+	</insert>
+	
+	<!-- 根据主键查询一条记录 -->
+	<update id="update" parameterType="com.ym.mec.biz.dal.entity.CourseScheduleComplaints">
+		UPDATE course_schedule_complaints
+		<set>
+			<if test="status != null">
+			status_ = #{status, typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"},
+			</if>
+			<if test="wfOrderId != null">
+			wf_order_id_ = #{wfOrderId},
+			</if>
+			<if test="userId != null">
+			user_id_ = #{userId},
+			</if>
+			<if test="wfProcessId != null">
+			wf_process_id_ = #{wfProcessId},
+			</if>
+			<if test="id != null">
+			id_ = #{id},
+			</if>
+			<if test="courseScheduleId != null">
+			course_schedule_id_ = #{courseScheduleId},
+			</if>
+			<if test="reason != null">
+			reason_ = #{reason},
+			</if>
+			<if test="updateTime != null">
+			update_time_ = now(),
+			</if>
+		</set> WHERE id_ = #{id}
+	</update>
+	
+	<!-- 根据主键删除一条记录 -->
+	<delete id="delete" >
+		DELETE FROM course_schedule_complaints WHERE id_ = #{id} 
+	</delete>
+	
+	<!-- 分页查询 -->
+	<select id="queryPage" resultMap="CourseScheduleComplaints" parameterType="map">
+		SELECT * FROM course_schedule_complaints ORDER BY id_ <include refid="global.limit"/>
+	</select>
+	
+	<!-- 查询当前表的总记录数 -->
+	<select id="queryCount" resultType="int">
+		SELECT COUNT(*) FROM course_schedule_complaints
+	</select>
+</mapper>

+ 84 - 2
mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml

@@ -20,7 +20,6 @@
         <result column="update_time_" property="updateTime"/>
         <result column="teach_mode_" property="teachMode" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
         <result column="type_" property="type" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
-        <result column="complaint_status_" property="complaintStatus"/>
         <result column="name_" property="name"/>
     </resultMap>
 
@@ -33,6 +32,21 @@
         <result column="seal_class_id_" property="sealClassId"/>
     </resultMap>
 
+    <resultMap type="com.ym.mec.biz.dal.entity.StudentCourseScheduleRecordDto" id="studentCourseScheduleRecord">
+        <result column="id_" property="id"/>
+        <result column="course_schedule_id_" property="courseScheduleId"/>
+        <result column="status_" property="status" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
+        <result column="name_" property="courseName"/>
+        <result column="class_date_" property="classDate"/>
+        <result column="start_class_time_" property="startClassTime"/>
+        <result column="end_class_time_" property="endClassTime"/>
+        <result column="teacher_id_" property="teacherId"/>
+        <result column="teacher_name_" property="teacherName"/>
+        <result column="teach_mode_" property="teachMode" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
+        <result column="type_" property="type" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
+        <result column="rest_of_class_" property="restOfClass"/>
+    </resultMap>
+
     <!-- 根据主键查询一条记录 -->
     <select id="get" resultMap="CourseSchedule">
 		SELECT * FROM course_schedule WHERE id_ = #{id} 
@@ -340,7 +354,8 @@
             DATE_FORMAT(#{date},'%Y-%m-%d')
         </foreach>
         AND (
-        DATE_FORMAT(cs.start_class_time_,"%H:%i:%s") &gt; DATE_FORMAT(#{endClassTime}, '%H:%i:%s' ) OR DATE_FORMAT(cs.end_class_time_,"%H:%i:%s") &lt; DATE_FORMAT( #{endClassTime}, '%H:%i:%s' )
+          DATE_FORMAT(cs.start_class_time_,"%H:%i:%s") &gt; DATE_FORMAT(#{endClassTime}, '%H:%i:%s' )
+          OR DATE_FORMAT(cs.end_class_time_,"%H:%i:%s") &lt; DATE_FORMAT( #{endClassTime}, '%H:%i:%s' )
         )=0
     </select>
 
@@ -379,6 +394,9 @@
             <if test="month!=null">
                 AND DATE_FORMAT( #{month}, '%Y%m' ) = DATE_FORMAT( cs.class_date_, '%Y%m' )
             </if>
+            <if test="isAttend!=null">
+                AND cs.status_='NOT_START'
+            </if>
         GROUP BY
             cs.class_date_
     </select>
@@ -412,4 +430,68 @@
         </foreach>
         GROUP BY cg.id_
     </select>
+
+    <sql id="queryStudentCourseScheduleRecordCondition">
+        <where>
+            sa.user_id_=#{userId}
+            <if test="teachMode!=null and teachMode!=''">
+                AND cs.teach_mode_=#{teachMode}
+            </if>
+            <if test="type!=null and type!=''">
+                AND cs.type_=#{type}
+            </if>
+            <if test="status!=null and status!=''">
+                AND sa.status_=#{status}
+            </if>
+        </where>
+    </sql>
+
+    <select id="findStudentCourseScheduleRecords" resultMap="studentCourseScheduleRecord">
+        SELECT
+            sa.id_,
+            sa.status_,
+            sa.teacher_id_,
+            su.username_,
+            cs.id_ course_schedule_id_,
+            cs.name_,
+            cs.class_date_,
+            cs.start_class_time_,
+            cs.end_class_time_,
+            cs.teacher_id_,
+            cs.teach_mode_
+        FROM
+            student_attendance sa
+            LEFT JOIN course_schedule cs ON sa.course_schedule_id_=cs.id_
+            LEFT JOIN sys_user su ON sa.teacher_id_=su.id_
+        <include refid="queryStudentCourseScheduleRecordCondition"/>
+        ORDER BY sa.id_
+        <include refid="global.limit"/>
+    </select>
+    <select id="countStudentCourseScheduleRecords" resultType="int">
+        SELECT
+        count(*)
+        FROM
+        student_attendance sa
+        LEFT JOIN course_schedule cs ON sa.course_schedule_id_=cs.id_
+        LEFT JOIN sys_user su ON sa.teacher_id_=su.id_
+        <include refid="queryStudentCourseScheduleRecordCondition"/>
+    </select>
+    <select id="findStudentCourseScheduleNotStartRecords" resultMap="studentCourseScheduleRecord">
+        SELECT
+            cs.teacher_id_,
+            su.username_ teacher_name_,
+            cs.id_ course_schedule_id_,
+            cs.name_,
+            cs.class_date_,
+            cs.start_class_time_,
+            cs.end_class_time_,
+            cs.teach_mode_,
+	        (cg.total_class_times_-cg.current_class_times_) rest_of_class_
+        FROM
+            class_group_student_mapper cgsm
+            LEFT JOIN course_schedule cs ON cs.class_group_id_=cgsm.class_group_id_
+            LEFT JOIN sys_user su ON cs.teacher_id_ = su.id_
+            LEFT JOIN class_group cg ON cgsm.class_group_id_=cg.id_
+        WHERE cs.status_='NOT_START' AND cgsm.user_id_=#{userId} AND cs.class_date_=DATE_FORMAT(#{date},'%Y%m%d')
+    </select>
 </mapper>

+ 29 - 20
mec-biz/src/main/resources/config/mybatis/DemoGroupCoursesPlanMapper.xml

@@ -9,9 +9,11 @@
 	<resultMap type="com.ym.mec.biz.dal.entity.DemoGroupCoursesPlan" id="DemoGroupCoursesPlan">
 		<result column="id_" property="id" />
 		<result column="demo_group_id_" property="demoGroupId" />
-		<result column="courses_start_time_" property="coursesStartTime" />
 		<result column="create_time_" property="createTime" />
 		<result column="status_" property="status" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
+		<result column="course_date_" property="courseDate"/>
+		<result column="start_time_" property="startTime"/>
+		<result column="end_time_" property="endTime"/>
 	</resultMap>
 	
 	<!-- 根据主键查询一条记录 -->
@@ -31,10 +33,10 @@
 		SELECT SEQ_WSDEFINITION_ID.nextval AS ID FROM DUAL 
 		</selectKey>
 		-->
-		INSERT INTO demo_group_courses_plan (demo_group_id_,courses_start_time_,create_time_,status_)
+		INSERT INTO demo_group_courses_plan (demo_group_id_,create_time_,status_,course_date_,start_time_,end_time_)
 		VALUE
 		<foreach collection="dates" item="date" separator=",">
-			(#{demoGroupId},#{date},now(),#{status})
+			(#{demoGroupId},now(),#{status},#{date},#{date},DATE_ADD(#{date},INTERVAL #{classMinutes} MINUTE))
 		</foreach>
 	</insert>
 
@@ -45,28 +47,35 @@
 		SELECT SEQ_WSDEFINITION_ID.nextval AS ID FROM DUAL
 		</selectKey>
 		-->
-		INSERT INTO demo_group_courses_plan (id_,demo_group_id_,courses_start_time_,create_time_,status_) VALUES(#{id},#{demoGroupId},#{coursesStartTime},now(),#{status, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler})
+		INSERT INTO demo_group_courses_plan (id_,demo_group_id_,course_date_,create_time_,status_,start_time_,end_time_)
+		VALUES(#{id},#{demoGroupId},#{courseDate},now(),#{status, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{startTime},#{endTime})
 	</insert>
 	
 	<!-- 根据主键查询一条记录 -->
 	<update id="update" parameterType="com.ym.mec.biz.dal.entity.DemoGroupCoursesPlan">
 		UPDATE demo_group_courses_plan <set>
-<if test="id != null">
-id_ = #{id},
-</if>
-<if test="demoGroupId != null">
-demo_group_id_ = #{demoGroupId},
-</if>
-<if test="coursesStartTime != null">
-courses_start_time_ = #{coursesStartTime},
-</if>
-<if test="createTime != null">
-create_time_ = #{createTime},
-</if>
-<if test="status!=null">
-	status_=#{status, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
-</if>
-</set> WHERE id_ = #{id} 
+		<if test="id != null">
+		id_ = #{id},
+		</if>
+		<if test="demoGroupId != null">
+		demo_group_id_ = #{demoGroupId},
+		</if>
+		<if test="courseDate != null">
+			course_date_ = #{courseDate},
+		</if>
+		<if test="createTime != null">
+		create_time_ = #{createTime},
+		</if>
+		<if test="status!=null">
+			status_=#{status, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+		</if>
+		<if test="startTime!=null">
+			start_time_=#{startTime},
+		</if>
+		<if test="endTime!=null">
+			end_time_=#{endTime},
+		</if>
+		</set> WHERE id_ = #{id}
 	</update>
 	
 	<!-- 根据主键删除一条记录 -->

+ 186 - 178
mec-biz/src/main/resources/config/mybatis/DemoGroupMapper.xml

@@ -5,103 +5,99 @@
 不要修改此文件。所有改动将在下次重新自动生成时丢失。
 -->
 <mapper namespace="com.ym.mec.biz.dal.dao.DemoGroupDao">
-
-    <resultMap type="com.ym.mec.biz.dal.entity.DemoGroup" id="DemoGroup">
-        <result column="id_" property="id"/>
-        <result column="name_" property="name"/>
-        <result column="single_class_minutes_" property="singleClassMinutes"/>
-        <result column="organ_id_list_" property="organIdList"/>
-        <result column="create_time_" property="createTime"/>
-        <result column="update_time_" property="updateTime"/>
-        <result column="user_id_" property="userId"/>
-        <result column="price_" property="price"/>
-        <result column="subject_id_" property="subjectId"/>
-    </resultMap>
-
-    <resultMap id="studentDemoGroupListDto" type="com.ym.mec.biz.dal.dto.StudentDemoGroupListDto">
-        <result property="demoGroupId" column="demo_group_id_"/>
-        <result property="userId" column="user_id_"/>
-        <result property="userName" column="username_"/>
-        <result property="avatar" column="avatar_"/>
-        <result property="introduction" column="introduction_"/>
-        <result property="numberOfClasses" column="number_of_classes_"/>
-        <result property="subjectName" column="subject_name_"/>
-        <collection property="coursesPlans"
-                    resultMap="com.ym.mec.biz.dal.dao.DemoGroupCoursesPlanDao.DemoGroupCoursesPlan" column="dgcp.id_"/>
-    </resultMap>
-
-    <!-- 根据主键查询一条记录 -->
-    <select id="get" resultMap="DemoGroup">
+	
+	<resultMap type="com.ym.mec.biz.dal.entity.DemoGroup" id="DemoGroup">
+		<result column="id_" property="id" />
+		<result column="name_" property="name" />
+		<result column="single_class_minutes_" property="singleClassMinutes" />
+		<result column="organ_id_list_" property="organIdList" />
+		<result column="create_time_" property="createTime" />
+		<result column="update_time_" property="updateTime" />
+		<result column="user_id_" property="userId" />
+		<result column="price_" property="price"/>
+		<result column="subject_id_" property="subjectId"/>
+	</resultMap>
+
+	<resultMap id="studentDemoGroupListDto" type="com.ym.mec.biz.dal.dto.StudentDemoGroupListDto">
+		<result property="demoGroupId" column="demo_group_id_"/>
+		<result property="userId" column="user_id_"/>
+		<result property="userName" column="username_"/>
+		<result property="avatar" column="avatar_"/>
+		<result property="introduction" column="introduction_"/>
+		<result property="numberOfClasses" column="number_of_classes_"/>
+		<result property="subjectName" column="subject_name_"/>
+		<collection property="coursesPlans" resultMap="com.ym.mec.biz.dal.dao.DemoGroupCoursesPlanDao.DemoGroupCoursesPlan" column="dgcp.id_"/>
+	</resultMap>
+	
+	<!-- 根据主键查询一条记录 -->
+	<select id="get" resultMap="DemoGroup" >
 		SELECT * FROM demo_group WHERE id_ = #{id} 
 	</select>
-
-    <!-- 全查询 -->
-    <select id="findAll" resultMap="DemoGroup">
+	
+	<!-- 全查询 -->
+	<select id="findAll" resultMap="DemoGroup">
 		SELECT * FROM demo_group ORDER BY id_
 	</select>
-
-    <!-- 向数据库增加一条记录 -->
-    <insert id="insert" parameterType="com.ym.mec.biz.dal.entity.DemoGroup" useGeneratedKeys="true" keyColumn="id"
-            keyProperty="id">
-        <!--
-        <selectKey resultClass="int" keyProperty="id" >
-        SELECT SEQ_WSDEFINITION_ID.nextval AS ID FROM DUAL
-        </selectKey>
-        -->
-        INSERT INTO demo_group
-        (id_,name_,single_class_minutes_,organ_id_list_,create_time_,update_time_,user_id_,price_,subject_id_)
-        VALUES(#{id},#{name},#{singleClassMinutes},#{organIdList},#{createTime},#{updateTime},#{userId},#{price},#{subjectId})
-    </insert>
-
-    <!-- 根据主键查询一条记录 -->
-    <update id="update" parameterType="com.ym.mec.biz.dal.entity.DemoGroup">
-        UPDATE demo_group
-        <set>
-            <if test="userId != null">
-                user_id_ = #{userId},
-            </if>
-            <if test="updateTime != null">
-                update_time_ = #{updateTime},
-            </if>
-            <if test="singleClassMinutes != null">
-                single_class_minutes_ = #{singleClassMinutes},
-            </if>
-            <if test="organIdList != null">
-                organ_id_list_ = #{organIdList},
-            </if>
-            <if test="name != null">
-                name_ = #{name},
-            </if>
-            <if test="createTime != null">
-                create_time_ = #{createTime},
-            </if>
-            <if test="price != null">
-                price_ = #{price},
-            </if>
-            <if test="subjectId != null">
-                subject_id_ = #{subjectId},
-            </if>
-        </set>
-        WHERE id_ = #{id}
-    </update>
-
-    <!-- 根据主键删除一条记录 -->
-    <delete id="delete">
+	
+	<!-- 向数据库增加一条记录 -->
+	<insert id="insert" parameterType="com.ym.mec.biz.dal.entity.DemoGroup" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
+		<!--
+		<selectKey resultClass="int" keyProperty="id" > 
+		SELECT SEQ_WSDEFINITION_ID.nextval AS ID FROM DUAL 
+		</selectKey>
+		-->
+		INSERT INTO demo_group (id_,name_,single_class_minutes_,organ_id_list_,create_time_,update_time_,user_id_,price_,subject_id_) VALUES(#{id},#{name},#{singleClassMinutes},#{organIdList},#{createTime},#{updateTime},#{userId},#{price},#{subjectId})
+	</insert>
+	
+	<!-- 根据主键查询一条记录 -->
+	<update id="update" parameterType="com.ym.mec.biz.dal.entity.DemoGroup">
+		UPDATE demo_group <set>
+<if test="userId != null">
+user_id_ = #{userId},
+</if>
+<if test="id != null">
+id_ = #{id},
+</if>
+<if test="updateTime != null">
+update_time_ = #{updateTime},
+</if>
+<if test="singleClassMinutes != null">
+single_class_minutes_ = #{singleClassMinutes},
+</if>
+<if test="organIdList != null">
+organ_id_list_ = #{organIdList},
+</if>
+<if test="name != null">
+name_ = #{name},
+</if>
+<if test="createTime != null">
+create_time_ = #{createTime},
+</if>
+		<if test="price != null">
+			price_ = #{price},
+		</if>
+		<if test="subjectId != null">
+			subject_id_ = #{subjectId},
+		</if>
+</set> WHERE id_ = #{id} 
+	</update>
+	
+	<!-- 根据主键删除一条记录 -->
+	<delete id="delete" >
 		DELETE FROM demo_group WHERE id_ = #{id} 
 	</delete>
-
-    <!-- 分页查询 -->
-    <select id="queryPage" resultMap="DemoGroup" parameterType="map">
-        SELECT * FROM demo_group ORDER BY id_
-        <include refid="global.limit"/>
-    </select>
-
-    <!-- 查询当前表的总记录数 -->
-    <select id="queryCount" resultType="int">
+	
+	<!-- 分页查询 -->
+	<select id="queryPage" resultMap="DemoGroup" parameterType="map">
+		SELECT * FROM demo_group ORDER BY id_ <include refid="global.limit"/>
+	</select>
+	
+	<!-- 查询当前表的总记录数 -->
+	<select id="queryCount" resultType="int">
 		SELECT COUNT(*) FROM demo_group
 	</select>
 
-    <select id="organIdListByDemoGroupId" resultType="int">
+	<select id="organIdListByDemoGroupId" resultType="int">
 		SELECT
 			su.organ_id_
 		FROM
@@ -110,25 +106,38 @@
 			LEFT JOIN sys_user su ON cgsm.user_id_=su.id_
 		WHERE dgcgm.demo_group_id_=#{demoGroupId}
 	</select>
-    <select id="getOrganIdByUserId" resultType="java.lang.Integer">
+	<select id="getOrganIdByUserId" resultType="java.lang.Integer">
 		select organ_id_ from sys_user where id_=#{userId}
 	</select>
-    <select id="createCourseScheduleByDemoGroup" parameterType="com.ym.mec.biz.dal.entity.DemoGroup"
-            resultMap="com.ym.mec.biz.dal.dao.CourseScheduleDao.CourseSchedule">
+	<select id="createCourseSchedulesByDemoGroup" parameterType="com.ym.mec.biz.dal.entity.DemoGroup" resultMap="com.ym.mec.biz.dal.dao.CourseScheduleDao.CourseSchedule">
+		SELECT
+			#{classGroupId} class_group_id_,
+			'NOT_START' status_,
+			DATE_FORMAT(dgcp.courses_start_time_,'%Y-%m-%d') class_date_,
+			dgcp.courses_start_time_ start_class_time_,
+			DATE_ADD(dgcp.courses_start_time_,INTERVAL #{demoGroup.singleClassMinutes} MINUTE) end_class_time_,
+			#{demoGroup.userId} teacher_id_,
+			'ONLINE' teach_mode_,
+			'demo' type_
+		FROM
+			demo_group_courses_plan dgcp
+			WHERE dgcp.demo_group_id_=#{demoGroup.id} AND dgcp.courses_start_time_ = #{startTime}
+	</select>
+	<select id="createCourseScheduleByDemoGroupPlan" parameterType="com.ym.mec.biz.dal.entity.DemoGroup" resultMap="com.ym.mec.biz.dal.dao.CourseScheduleDao.CourseSchedule">
 		SELECT
 			#{classGroupId} class_group_id_,
 			'NOT_START' status_,
-			DATE_FORMAT(dgcp.start_time_,'%Y-%m-%d') class_date_,
-			dgcp.start_time_ start_class_time_,
-			DATE_ADD(dgcp.start_time_,INTERVAL #{demoGroup.singleClassMinutes} MINUTE) end_class_time_,
+			dgcp.course_date_ class_date_,
+			CONCAT(dgcp.course_date_,' ',dgcp.start_time_) start_class_time_,
+			DATE_ADD( CONCAT(dgcp.course_date_,' ',dgcp.start_time_),INTERVAL #{demoGroup.singleClassMinutes} MINUTE) end_class_time_,
 			#{demoGroup.userId} teacher_id_,
 			'ONLINE' teach_mode_,
 			'demo' type_
 		FROM
 			demo_group_courses_plan dgcp
-			WHERE dgcp.demo_group_id_=#{demoGroup.id} AND dgcp.start_time_ = #{startTime}
+			WHERE dgcp.id_=#{coursePlanId}
 	</select>
-    <select id="countDemoGroupStudents" resultType="java.lang.Integer">
+	<select id="countDemoGroupStudents" resultType="java.lang.Integer">
 		SELECT
 			count(cgsm.user_id_)
 		FROM
@@ -137,55 +146,55 @@
 		WHERE dgcgm.demo_group_id_=#{demoGroupId}
 	</select>
 
-    <sql id="demoGroupQueryCondition">
-        <where>
-            dgcp.status_=0
-            <if test="search!=null">
-                AND su.username_ like concat('%',#{search},'%')
-            </if>
-            <if test="subjectIds!=null and subjectIds!=''">
-                AND FIND_IN_SET(dg.subject_id_,#{subjectIds})
-            </if>
-            <if test="startTime!=null and endTime==null">
-                AND dgcp.start_time_=#{startTime}
-            </if>
-            <if test="startTime!=null and endTime!=null">
-                AND dgcp.start_time_&gt;=#{startTime} AND dgcp.start_time_ &lt;= #{endTime}
-            </if>
-        </where>
-    </sql>
-
-    <select id="findDemoGroupList" resultMap="studentDemoGroupListDto">
-        SELECT
-        dg.id_ demo_group_id_,
-        su.username_,
-        su.avatar_,
-        t.introduction_,
-        s.name_ subject_name_,
-        COUNT(dgcgm.class_group_id_) number_of_classes_,
-        dgcp.*
-        FROM
-        demo_group dg
-        LEFT JOIN demo_group_courses_plan dgcp ON dg.id_=dgcp.demo_group_id_
-        LEFT JOIN teacher t ON dg.user_id_=t.id_
-        LEFT JOIN sys_user su ON dg.user_id_=su.id_
-        LEFT JOIN `subject` s ON dg.subject_id_=s.id_
-        LEFT JOIN demo_group_class_group_mapper dgcgm ON dg.id_=dgcgm.demo_group_id_
-        <include refid="demoGroupQueryCondition"/>
-        GROUP BY dgcp.id_,dg.id_
-        ORDER BY dgcp.start_time_
-        <include refid="global.limit"/>
-    </select>
-    <select id="countDemoGroupList" resultType="java.lang.Integer">
-        SELECT
-        count(*)
-        FROM
-        demo_group dg
-        LEFT JOIN demo_group_courses_plan dgcp ON dg.id_=dgcp.demo_group_id_
-        LEFT JOIN sys_user su ON dg.user_id_=su.id_
-        <include refid="demoGroupQueryCondition"/>
-    </select>
-    <select id="findClassGroupIDByDemoGroupId" resultType="java.lang.Integer">
+	<sql id="demoGroupQueryCondition">
+		<where>
+			dgcp.status_=0
+			<if test="search!=null">
+				AND su.username_ like concat('%',#{search},'%')
+			</if>
+			<if test="subjectIds!=null and subjectIds!=''">
+				AND FIND_IN_SET(dg.subject_id_,#{subjectIds})
+			</if>
+			<if test="startTime!=null and endTime==null">
+				AND dgcp.start_time_=#{startTime}
+			</if>
+			<if test="startTime!=null and endTime!=null">
+				AND dgcp.start_time_&gt;=#{startTime} AND dgcp.start_time_ &lt;= #{endTime}
+			</if>
+		</where>
+	</sql>
+
+	<select id="findDemoGroupList" resultMap="studentDemoGroupListDto">
+		SELECT
+		dg.id_ demo_group_id_,
+		su.username_,
+		su.avatar_,
+		t.introduction_,
+		s.name_ subject_name_,
+		COUNT(dgcgm.class_group_id_) number_of_classes_,
+		dgcp.*
+		FROM
+		demo_group dg
+		LEFT JOIN demo_group_courses_plan dgcp ON dg.id_=dgcp.demo_group_id_
+		LEFT JOIN teacher t ON dg.user_id_=t.id_
+		LEFT JOIN sys_user su ON dg.user_id_=su.id_
+		LEFT JOIN `subject` s ON dg.subject_id_=s.id_
+		LEFT JOIN demo_group_class_group_mapper dgcgm ON dg.id_=dgcgm.demo_group_id_
+		<include refid="demoGroupQueryCondition"/>
+		GROUP BY dgcp.id_,dg.id_
+		ORDER BY dgcp.start_time_
+		<include refid="global.limit"/>
+	</select>
+	<select id="countDemoGroupList" resultType="java.lang.Integer">
+		SELECT
+			count(*)
+		FROM
+			demo_group dg
+			LEFT JOIN demo_group_courses_plan dgcp ON dg.id_=dgcp.demo_group_id_
+			LEFT JOIN sys_user su ON dg.user_id_=su.id_
+		<include refid="demoGroupQueryCondition"/>
+	</select>
+	<select id="findClassGroupIDByDemoGroupId" resultType="java.lang.Integer">
 		SELECT
 			class_group_id_
 		FROM
@@ -196,41 +205,40 @@
 		SELECT * FROM demo_group WHERE user_id_=#{teacherId}
 	</select>
 
-    <sql id="teacherDemoGroupsQueryCondition">
-        <where>
-            dg.user_id_=#{teacherId}
-        </where>
-    </sql>
+	<sql id="teacherDemoGroupsQueryCondition">
+		<where>
+			dg.user_id_=#{teacherId}
+		</where>
+	</sql>
 
-    <select id="findTeacherDemoGroups" resultType="com.ym.mec.biz.dal.dto.TeacherManageDemoGroupListDto">
-        SELECT
-        cs.class_date_ classDate,
-        GROUP_CONCAT(DISTINCT CONCAT(cs.start_class_time_,cs.end_class_time_)) startTimes,
-        GROUP_CONCAT(s.name_) subjectNames
-        FROM
-        demo_group dg
-        LEFT JOIN demo_group_class_group_mapper dgcgm ON dg.id_=dgcgm.demo_group_id_
-        LEFT JOIN class_group cg ON dgcgm.class_group_id_=cg.id_
-        LEFT JOIN course_schedule cs ON cg.id_=cs.class_group_id_
-        LEFT JOIN `subject` s ON FIND_IN_SET(s.id_,cg.subject_id_list_)
-        <include refid="teacherDemoGroupsQueryCondition"/>
-        GROUP BY cs.class_date_
-        <include refid="global.limit"/>
-    </select>
-    <select id="countTeacherDemoGroups" resultType="int">
-        SELECT
-        count(*)
-        FROM
-        demo_group dg
-        LEFT JOIN demo_group_class_group_mapper dgcgm ON dg.id_=dgcgm.demo_group_id_
-        LEFT JOIN class_group cg ON dgcgm.class_group_id_=cg.id_
-        LEFT JOIN course_schedule cs ON cg.id_=cs.class_group_id_
-        <include refid="teacherDemoGroupsQueryCondition"/>
-        GROUP BY cs.class_date_
-    </select>
+	<select id="findTeacherDemoGroups" resultType="com.ym.mec.biz.dal.dto.TeacherManageDemoGroupListDto">
+		SELECT
+			cs.class_date_ classDate,
+			GROUP_CONCAT(DISTINCT CONCAT(cs.start_class_time_,' ',cs.end_class_time_)) startTimes,
+			GROUP_CONCAT(s.name_) subjectNames
+		FROM
+			demo_group dg
+		LEFT JOIN demo_group_class_group_mapper dgcgm ON dg.id_=dgcgm.demo_group_id_
+		LEFT JOIN class_group cg ON dgcgm.class_group_id_=cg.id_
+		LEFT JOIN course_schedule cs ON cg.id_=cs.class_group_id_
+		LEFT JOIN `subject` s ON FIND_IN_SET(s.id_,cg.subject_id_list_)
+		<include refid="teacherDemoGroupsQueryCondition"/>
+		GROUP BY cs.class_date_
+		<include refid="global.limit"/>
+	</select>
+	<select id="countTeacherDemoGroups" resultType="int">
+		SELECT
+			count(*)
+		FROM
+			demo_group dg
+		LEFT JOIN demo_group_class_group_mapper dgcgm ON dg.id_=dgcgm.demo_group_id_
+		LEFT JOIN class_group cg ON dgcgm.class_group_id_=cg.id_
+		LEFT JOIN course_schedule cs ON cg.id_=cs.class_group_id_
+		<include refid="teacherDemoGroupsQueryCondition"/>
+		GROUP BY cs.class_date_
+	</select>
 
-    <select id="findDemoGroupStartClassTimesWithWeekByTeacherId"
-            resultType="com.ym.mec.biz.dal.dto.EducationDemoGroupListDto">
+	<select id="findDemoGroupStartClassTimesWithWeekByTeacherId" resultType="com.ym.mec.biz.dal.dto.EducationDemoGroupListDto">
 		SELECT
 			class_date_ classDate,
 			GROUP_CONCAT(start_class_time_) startClassTimes

+ 3 - 2
mec-biz/src/main/resources/config/mybatis/GoodsMapper.xml

@@ -135,8 +135,9 @@
 	</select>
 
     <select id="findGoodsBySubId" resultMap="Goods">
-        SELECT g.* FROM subject_goods_mapper sgm LEFT JOIN goods g ON sgm.goods_id_ = g.id_
-        WHERE sgm.subject_id_ =  #{subjectId} AND g.goods_category_id_ = #{goodsCategoryId}
+        SELECT g.* FROM subject_goods_mapper sgm
+        LEFT JOIN goods g ON sgm.goods_category_id_ = g.goods_category_id_
+        WHERE sgm.subject_id_ = #{subjectId} AND sgm.type_ = #{type}
     </select>
 
     <!-- 根据 -->

+ 6 - 2
mec-biz/src/main/resources/config/mybatis/StudentApplyRefundsMapper.xml

@@ -16,6 +16,7 @@
         <result column="create_time_" property="createTime"/>
         <result column="update_time_" property="updateTime"/>
         <result column="orig_payment_order_id_" property="origPaymentOrderId"/>
+        <result column="remark_" property="remark"/>
     </resultMap>
 
     <!-- 根据主键查询一条记录 -->
@@ -37,8 +38,8 @@
         </selectKey>
         -->
         INSERT INTO student_apply_refunds
-        (id_,user_id_,order_no_,status_,expect_amount_,actual_amount_,create_time_,update_time_,orig_payment_order_id_)
-        VALUES(#{id},#{userId},#{orderNo},#{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{expectAmount},#{actualAmount},now(),now(),#{origPaymentOrderId})
+        (id_,user_id_,order_no_,status_,expect_amount_,actual_amount_,create_time_,update_time_,orig_payment_order_id_,remark_)
+        VALUES(#{id},#{userId},#{orderNo},#{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{expectAmount},#{actualAmount},now(),now(),#{origPaymentOrderId},#{remark})
     </insert>
 
     <!-- 根据主键查询一条记录 -->
@@ -66,6 +67,9 @@
             <if test="actualAmount != null">
                 actual_amount_ = #{actualAmount},
             </if>
+            <if test="remark != null">
+                remark_ = #{remark},
+            </if>
         </set>
         WHERE id_ = #{id}
     </update>

+ 8 - 2
mec-biz/src/main/resources/config/mybatis/StudentCourseHomeworkMapper.xml

@@ -22,7 +22,7 @@
 	<resultMap type="com.ym.mec.biz.dal.dto.CourseHomeworkStudentDetailDto" id="CourseHomeworkStudentDetailDto">
 		<result column="musicGroupName" property="musicGroupName" />
 		<result column="classGroupName" property="classGroupName"/>
-		<result column="id_" property="courseHomeworkId" />
+		<result column="courseHomeworkId" property="courseHomeworkId" />
 		<result column="content_" property="content" />
 		<result column="expiry_date_" property="expiryDate" />
 		<result column="completed_num_" property="completedNum" />
@@ -106,6 +106,7 @@
 		<result column="content_" property="content" />
 		<result column="create_time_" property="createTime" />
 		<result column="start_class_time_" property="startClassTime" />
+		<result column="expiry_date_" property="expiryDate"/>
 		<result column="music_group_id_" property="musicGroupId" />
 		<result column="music_group_name_" property="musicGroupName" />
 		<result column="class_group_id_" property="classGroupId" />
@@ -124,7 +125,7 @@
 				DATE_FORMAT(ch.create_time_,"%Y%m%d") = DATE_FORMAT(#{createTime},"%Y%m%d")
 			</if>
 			<if test="musicGroupId != null">
-				and ch.music_group_id_ = #{musicGroupId}
+				and cg.music_group_id_ = #{musicGroupId}
 			</if>
 			<if test="classGroupId != null">
 				and ch.class_group_id_ = #{classGroupId}
@@ -138,6 +139,7 @@
 	<!-- 分页查询 -->
 	<select id="queryPage" resultMap="CourseHomeworkDto" parameterType="map">
 		SELECT
+		sch.id_,
 		ch.*,
 		mg.name_ music_group_name_,
 		cg.name_ class_group_name_,
@@ -165,6 +167,10 @@
 	<!-- 查询当前表的总记录数 -->
 	<select id="queryCount" resultType="int">
 		SELECT COUNT(*) FROM student_course_homework sch
+		LEFT JOIN course_homework ch ON sch.course_homework_id_=ch.id_
+		LEFT JOIN course_schedule cs ON ch.course_schedule_id_=cs.id_
+		LEFT JOIN music_group mg ON ch.music_group_id_=mg.id_
+		LEFT JOIN class_group cg ON ch.class_group_id_=cg.id_
 		<include refid="queryCondition"/>
 	</select>
 	<select id="findCourseHomeworkStudentDetail" resultMap="CourseHomeworkStudentDetailDto">

+ 4 - 2
mec-biz/src/main/resources/config/mybatis/StudentCourseHomeworkReplyMapper.xml

@@ -19,6 +19,7 @@
         <result property="replyId" column="comment_id_"></result>
         <result property="userId" column="comment_user_id_"></result>
         <result property="userName" column="comment_user_name_"></result>
+        <result property="avatar" column="avatar_"/>
         <result property="content" column="comment_content_"></result>
         <result property="createTime" column="comment_time"></result>
     </resultMap>
@@ -76,10 +77,10 @@
     <sql id="queryCondition">
         <where>
             <if test="parentID!=null">
-                schr.parent_id_ = #{parentID}
+                AND schr.parent_id_ = #{parentID}
             </if>
             <if test="parentID==null">
-                schr.parent_id_ IS NULL
+               AND schr.parent_id_ IS NULL
             </if>
             <if test="studentCourseHomeworkId != null">
                AND schr.student_course_homework_id_=#{studentCourseHomeworkId}
@@ -93,6 +94,7 @@
             schr.id_ comment_id_,
             schr.user_id_ comment_user_id_,
             suc.username_ comment_user_name_,
+            suc.avatar_,
             schr.content_ comment_content_,
             schr.create_time_ comment_time
         FROM

+ 37 - 0
mec-biz/src/main/resources/config/mybatis/StudentPaymentOrderMapper.xml

@@ -24,6 +24,31 @@
         <result column="music_group_id_" property="musicGroupId"/>
         <result column="class_group_id_" property="classGroupId"/>
     </resultMap>
+    
+    <resultMap type="com.ym.mec.biz.dal.entity.Goods" id="Goods">
+        <result column="id_" property="id"/>
+        <result column="goods_category_id_" property="goodsCategoryId"/>
+        <result column="sn_" property="sn"/>
+        <result column="name_" property="name"/>
+        <result column="brand_" property="brand"/>
+        <result column="specification_" property="specification"/>
+        <result column="image_" property="image"/>
+        <result column="stock_count_" property="stockCount"/>
+        <result column="sell_count_" property="sellCount"/>
+        <result column="market_price_" property="marketPrice"/>
+        <result column="discount_price_" property="discountPrice"/>
+        <result column="group_purchase_price_" property="groupPurchasePrice"/>
+        <result column="brief_" property="brief"/>
+        <result column="desc_" property="desc"/>
+        <result column="is_new_" property="isNew" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
+        <result column="is_top_" property="isTop" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
+        <result column="status_" property="status" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
+        <result column="memo_" property="memo"/>
+        <result column="publish_time_" property="publishTime"/>
+        <result column="create_time_" property="createTime"/>
+        <result column="update_time_" property="updateTime"/>
+        <result column="complement_goods_id_list_" property="complementGoodsIdList"/>
+    </resultMap>
 
     <!-- 根据主键查询一条记录 -->
     <select id="get" resultMap="StudentPaymentOrder">
@@ -113,4 +138,16 @@
     <select id="queryCount" resultType="int">
 		SELECT COUNT(*) FROM student_payment_order
 	</select>
+	
+    <select id="queryApplyGoodsList" resultMap="Goods" parameterType="map">
+		select g.* from goods g where g.id_ in (SELECT spod.goods_id_list_ FROM student_payment_order spo left join student_payment_order_detail spod on spo.id_ = spod.payment_order_id_ where spo.music_group_id_ = #{musicGroupId} and spo.type_ = 'APPLY' and spod.type_ = #{type,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler})
+	</select>
+    <select id="findByStudentVipGroup" resultMap="StudentPaymentOrder">
+        SELECT
+            spo.*
+        FROM
+            student_vip_group_payment svgp
+            LEFT JOIN student_payment_order spo ON svgp.student_payment_order_id_=spo.id_
+            WHERE svgp.user_id_=#{userId} AND svgp.vip_group_id_=#{vipGroupId}
+    </select>
 </mapper>

+ 42 - 6
mec-biz/src/main/resources/config/mybatis/StudentRegistrationMapper.xml

@@ -29,6 +29,34 @@
         <result column="payment_status_" property="paymentStatus"
                 typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
     </resultMap>
+    
+    <resultMap type="com.ym.mec.biz.dal.dto.StudentInfo" id="StudentInfo">
+        <result column="id_" property="id"/>
+        <result column="username_" property="username"/>
+        <result column="password_" property="password"/>
+        <result column="salt_" property="salt"/>
+        <result column="phone_" property="phone"/>
+        <result column="avatar_" property="avatar"/>
+        <result column="organ_id_" property="organId"/>
+        <result column="create_time_" property="createTime"/>
+        <result column="update_time_" property="updateTime"/>
+        <result column="lock_flag_" property="lockFlag" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
+        <result column="del_flag_" property="delFlag" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
+        <result column="wx_openid_" property="wxOpenid"/>
+        <result column="qq_openid_" property="qqOpenid"/>
+        <result column="user_type_" property="userType" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
+        <result column="gender_" property="gender"/>
+        <result column="nation_" property="nation"/>
+        <result column="birthdate_" property="birthdate"/>
+        <result column="email_" property="email"/>
+        <result column="im_token_" property="imToken"/>
+        <result column="id_card_no_" property="idCardNo"/>
+        <result column="wechat_id_" property="wechatId"/>
+        <result column="name_" property="name"/>
+        <result column="current_grade_" property="grade"/>
+        <result column="current_class_" property="clazz"/>
+        <result column="actual_subject_id_" property="subject.id"/>
+    </resultMap>
 
     <!-- 根据主键查询一条记录 -->
     <select id="get" resultMap="StudentRegistration">
@@ -137,16 +165,19 @@
     <sql id="queryStudentDetailPageSql">
         <where>
             <if test="musicGroupId != null">
-                sr.music_group_id_ = #{musicGroupId}
+                AND sr.music_group_id_ = #{musicGroupId}
             </if>
             <if test="subjectId != null">
-                sr.subject_id_ = #{subjectId}
+                AND sr.subject_id_ = #{subjectId}
             </if>
             <if test="isAllowAdjust != null">
-                sr.is_allow_adjust_ = #{isAllowAdjust}
+                AND sr.is_allow_adjust_ = #{isAllowAdjust}
             </if>
             <if test="actualSubjectId != null">
-                sr.actual_subject_id_ = #{actualSubjectId}
+                AND sr.actual_subject_id_ = #{actualSubjectId}
+            </if>
+            <if test="name != null">
+                AND (sr.name_ LIKE CONCAT('%',#{name},'%') OR sr.parents_phone_ LIKE CONCAT('%',#{name},'%'))
             </if>
         </where>
     </sql>
@@ -161,11 +192,12 @@
         <result column="subject_name_" property="subjectName"/>
         <result column="username_" property="studentName"/>
         <result column="actual_subject_name_" property="actualSubjectName"/>
+        <result column="payment_status_" property="paymentStatus"/>
         <result column="gender_" property="gender" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
     </resultMap>
     <select id="queryStudentDetailPage" resultMap="studentApplyDetail">
-        SELECT su.username_,sr.parents_name_,sr.current_class_,sr.current_grade_,
-        su.gender_,sr.is_allow_adjust_, s.name_ subject_name_,ss.name_ actual_subject_name_,sr.parents_phone_
+        SELECT sr.name_ username_,sr.parents_name_,sr.current_class_,sr.current_grade_,
+        su.gender_,sr.is_allow_adjust_, s.name_ subject_name_,ss.name_ actual_subject_name_,sr.parents_phone_,sr.payment_status_
         FROM student_registration sr
         LEFT JOIN sys_user su ON sr.subject_id_ = su.id_
         LEFT JOIN `subject` s ON sr.subject_id_ = s.id_
@@ -218,4 +250,8 @@
     <select id="getSysUserByPhone" resultType="map">
         SELECT * FROM sys_user WHERE phone_ = #{phone}
     </select>
+    
+    <select id="queryStudentInfo" resultMap="StudentInfo">
+        SELECT u.*,sr.name_,sr.current_class_,sr.current_grade_,sr.actual_subject_id_ FROM sys_user u left join student_registration  sr on u.id_ = sr.user_id_ where u.id_ = #{userId} order by sr.create_time_ desc limit 0,1
+    </select>
 </mapper>

+ 76 - 0
mec-biz/src/main/resources/config/mybatis/StudentVipGroupPaymentMapper.xml

@@ -0,0 +1,76 @@
+<?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.ym.mec.biz.dal.dao.StudentVipGroupPaymentDao">
+	
+	<resultMap type="com.ym.mec.biz.dal.entity.StudentVipGroupPayment" id="StudentVipGroupPayment">
+		<result column="id_" property="id" />
+		<result column="user_id_" property="userId" />
+		<result column="vip_group_id_" property="vipGroupId" />
+		<result column="class_group_id_" property="classGroupId" />
+		<result column="create_time_" property="createTime" />
+		<result column="student_payment_order_id_" property="studentPaymentOrderId" />
+	</resultMap>
+	
+	<!-- 根据主键查询一条记录 -->
+	<select id="get" resultMap="StudentVipGroupPayment" >
+		SELECT * FROM student_vip_group_payment WHERE id_ = #{id} 
+	</select>
+	
+	<!-- 全查询 -->
+	<select id="findAll" resultMap="StudentVipGroupPayment">
+		SELECT * FROM student_vip_group_payment ORDER BY id_
+	</select>
+	
+	<!-- 向数据库增加一条记录 -->
+	<insert id="insert" parameterType="com.ym.mec.biz.dal.entity.StudentVipGroupPayment" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
+		<!--
+		<selectKey resultClass="int" keyProperty="id" > 
+		SELECT SEQ_WSDEFINITION_ID.nextval AS ID FROM DUAL 
+		</selectKey>
+		-->
+		INSERT INTO student_vip_group_payment (id_,user_id_,vip_group_id_,class_group_id_,create_time_,student_payment_order_id_) VALUES(#{id},#{userId},#{vipGroupId},#{classGroupId},#{createTime},#{studentPaymentOrderId})
+	</insert>
+	
+	<!-- 根据主键查询一条记录 -->
+	<update id="update" parameterType="com.ym.mec.biz.dal.entity.StudentVipGroupPayment">
+		UPDATE student_vip_group_payment <set>
+<if test="userId != null">
+user_id_ = #{userId},
+</if>
+<if test="vipGroupId != null">
+vip_group_id_ = #{vipGroupId},
+</if>
+<if test="id != null">
+id_ = #{id},
+</if>
+<if test="classGroupId != null">
+class_group_id_ = #{classGroupId},
+</if>
+<if test="studentPaymentOrderId != null">
+student_payment_order_id_ = #{studentPaymentOrderId},
+</if>
+<if test="createTime != null">
+create_time_ = #{createTime},
+</if>
+</set> WHERE id_ = #{id} 
+	</update>
+	
+	<!-- 根据主键删除一条记录 -->
+	<delete id="delete" >
+		DELETE FROM student_vip_group_payment WHERE id_ = #{id} 
+	</delete>
+	
+	<!-- 分页查询 -->
+	<select id="queryPage" resultMap="StudentVipGroupPayment" parameterType="map">
+		SELECT * FROM student_vip_group_payment ORDER BY id_ <include refid="global.limit"/>
+	</select>
+	
+	<!-- 查询当前表的总记录数 -->
+	<select id="queryCount" resultType="int">
+		SELECT COUNT(*) FROM student_vip_group_payment
+	</select>
+</mapper>

+ 6 - 2
mec-biz/src/main/resources/config/mybatis/SysUserCashAccountDetailMapper.xml

@@ -19,6 +19,7 @@
         <result column="comment_" property="comment"/>
         <result column="create_time_" property="createTime"/>
         <result column="update_time_" property="updateTime"/>
+        <result column="attribute_" property="attribute"/>
     </resultMap>
 
     <!-- 根据主键查询一条记录 -->
@@ -40,8 +41,8 @@
         </selectKey>
         -->
         INSERT INTO sys_user_cash_account_detail
-        (user_id_,trans_no_,type_,amount_,balance_,description_,comment_,create_time_,update_time_)
-        VALUES(#{userId},#{transNo},#{type,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{amount},#{balance},#{description},#{comment},now(),now())
+        (user_id_,trans_no_,type_,amount_,balance_,description_,comment_,create_time_,update_time_,attribute_)
+        VALUES(#{userId},#{transNo},#{type,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{amount},#{balance},#{description},#{comment},now(),now(),#{attribute})
     </insert>
 
     <!-- 根据主键查询一条记录 -->
@@ -78,6 +79,9 @@
             <if test="transType != null">
                 trans_type_ = #{transType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
             </if>
+            <if test="attribu != null">
+                attribu_ = #{attribu},
+            </if>
         </set>
         WHERE id_ = #{id}
     </update>

+ 86 - 0
mec-biz/src/main/resources/config/mybatis/SysUserContractsMapper.xml

@@ -0,0 +1,86 @@
+<?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.ym.mec.biz.dal.dao.SysUserContractsDao">
+
+	<resultMap type="com.ym.mec.biz.dal.entity.SysUserContracts"
+		id="SysUserContracts">
+		<result column="id_" property="id" />
+		<result column="user_id_" property="userId" />
+		<result column="contract_no_" property="contractNo" />
+		<result column="type_" property="type" />
+		<result column="url_" property="url" />
+		<result column="memo_" property="memo" />
+		<result column="create_time_" property="createTime" />
+	</resultMap>
+
+	<!-- 根据主键查询一条记录 -->
+	<select id="get" resultMap="SysUserContracts">
+		SELECT * FROM
+		sys_user_contracts WHERE id_ = #{id}
+	</select>
+
+	<!-- 全查询 -->
+	<select id="findAll" resultMap="SysUserContracts">
+		SELECT * FROM sys_user_contracts
+		ORDER BY id_
+	</select>
+
+	<!-- 向数据库增加一条记录 -->
+	<insert id="insert" parameterType="com.ym.mec.biz.dal.entity.SysUserContracts"
+		useGeneratedKeys="true" keyColumn="id" keyProperty="id">
+		<!-- <selectKey resultClass="int" keyProperty="id" > SELECT SEQ_WSDEFINITION_ID.nextval 
+			AS ID FROM DUAL </selectKey> -->
+		INSERT INTO sys_user_contracts
+		(id_,user_id_,contract_no_,type_,url_,memo_,create_time_)
+		VALUES(#{id},#{userId},#{contractNo},#{type},#{url},#{memo},#{createTime})
+	</insert>
+
+	<!-- 根据主键查询一条记录 -->
+	<update id="update" parameterType="com.ym.mec.biz.dal.entity.SysUserContracts">
+		UPDATE sys_user_contracts
+		<set>
+			<if test="userId != null">
+				user_id_ = #{userId},
+			</if>
+			<if test="id != null">
+				id_ = #{id},
+			</if>
+			<if test="url != null">
+				url_ = #{url},
+			</if>
+			<if test="memo != null">
+				memo_ = #{memo},
+			</if>
+			<if test="contractNo != null">
+				contract_no_ = #{contractNo},
+			</if>
+			<if test="type != null">
+				type_ = #{type},
+			</if>
+			<if test="createTime != null">
+				create_time_ = #{createTime},
+			</if>
+		</set>
+		WHERE id_ = #{id}
+	</update>
+
+	<!-- 根据主键删除一条记录 -->
+	<delete id="delete">
+		DELETE FROM sys_user_contracts WHERE id_ =
+		#{id}
+	</delete>
+
+	<!-- 分页查询 -->
+	<select id="queryPage" resultMap="SysUserContracts"
+		parameterType="map">
+		SELECT * FROM sys_user_contracts ORDER BY id_
+		<include refid="global.limit" />
+	</select>
+
+	<!-- 查询当前表的总记录数 -->
+	<select id="queryCount" resultType="int">
+		SELECT COUNT(*) FROM
+		sys_user_contracts
+	</select>
+</mapper>

+ 68 - 0
mec-biz/src/main/resources/config/mybatis/SysUserTsignMapper.xml

@@ -0,0 +1,68 @@
+<?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.ym.mec.biz.dal.dao.SysUserTsignDao">
+	
+	<resultMap type="com.ym.mec.biz.dal.entity.SysUserTsign" id="SysUserTsign">
+		<result column="user_id_" property="userId" />
+		<result column="account_id_" property="accountId" />
+		<result column="seal_data_" property="sealData" />
+		<result column="create_time_" property="createTime" />
+	</resultMap>
+	
+	<!-- 根据主键查询一条记录 -->
+	<select id="get" resultMap="SysUserTsign" >
+		SELECT * FROM sys_user_tsign WHERE user_id_ = #{userId} 
+	</select>
+	
+	<!-- 全查询 -->
+	<select id="findAll" resultMap="SysUserTsign">
+		SELECT * FROM sys_user_tsign ORDER BY user_id_
+	</select>
+	
+	<!-- 向数据库增加一条记录 -->
+	<insert id="insert" parameterType="com.ym.mec.biz.dal.entity.SysUserTsign" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
+		<!--
+		<selectKey resultClass="int" keyProperty="id" > 
+		SELECT SEQ_WSDEFINITION_ID.nextval AS ID FROM DUAL 
+		</selectKey>
+		-->
+		INSERT INTO sys_user_tsign (user_id_,account_id_,seal_data_,create_time_) VALUES(#{userId},#{accountId},#{sealData},#{createTime})
+	</insert>
+	
+	<!-- 根据主键查询一条记录 -->
+	<update id="update" parameterType="com.ym.mec.biz.dal.entity.SysUserTsign">
+		UPDATE sys_user_tsign <set>
+<if test="userId != null">
+user_id_ = #{userId},
+</if>
+<if test="accountId != null">
+account_id_ = #{accountId},
+</if>
+<if test="sealData != null">
+seal_data_ = #{sealData},
+</if>
+<if test="createTime != null">
+create_time_ = #{createTime},
+</if>
+</set> WHERE user_id_ = #{userId} 
+	</update>
+	
+	<!-- 根据主键删除一条记录 -->
+	<delete id="delete" >
+		DELETE FROM sys_user_tsign WHERE user_id_ = #{userId} 
+	</delete>
+	
+	<!-- 分页查询 -->
+	<select id="queryPage" resultMap="SysUserTsign" parameterType="map">
+		SELECT * FROM sys_user_tsign ORDER BY user_id_ <include refid="global.limit"/>
+	</select>
+	
+	<!-- 查询当前表的总记录数 -->
+	<select id="queryCount" resultType="int">
+		SELECT COUNT(*) FROM sys_user_tsign
+	</select>
+</mapper>

Certains fichiers n'ont pas été affichés car il y a eu trop de fichiers modifiés dans ce diff