Sfoglia il codice sorgente

Merge branch 'yonge' of http://git.dayaedu.com/yonge/mec into yonge

# Conflicts:
#	mec-auth/mec-auth-api/src/main/java/com/ym/mec/auth/api/entity/SysUser.java
#	mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/core/filter/PhoneLoginAuthenticationFilter.java
#	mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/core/filter/UsernameAuthenticationFilter.java
#	mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/core/provider/service/DefaultUserDetailsService.java
#	mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/service/impl/SysUserServiceImpl.java
#	mec-auth/mec-auth-server/src/main/resources/config/mybatis/SysUserMapper.xml
#	mec-biz/src/main/java/com/ym/mec/biz/service/impl/EmployeeServiceImpl.java
#	mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java
#	mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentManageServiceImpl.java
#	mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRegistrationServiceImpl.java
#	mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherServiceImpl.java
#	mec-student/src/main/java/com/ym/mec/student/controller/SporadicChargeInfoController.java
#	mec-student/src/main/java/com/ym/mec/student/controller/StudentOrderController.java
#	mec-teacher/src/main/java/com/ym/mec/teacher/controller/TeacherSchoolController.java
#	mec-web/src/main/java/com/ym/mec/web/controller/SporadicChargeInfoController.java
zouxuan 5 anni fa
parent
commit
f7c1a967a4
68 ha cambiato i file con 1415 aggiunte e 657 eliminazioni
  1. 6 3
      codegen/src/main/java/com/yonge/crud/CodegenApplication.java
  2. 3 3
      codegen/src/main/resources/generateConfigration.xml
  3. 12 0
      mec-auth/mec-auth-api/src/main/java/com/ym/mec/auth/api/entity/SysMenu.java
  4. 5 1
      mec-auth/mec-auth-api/src/main/java/com/ym/mec/auth/api/entity/SysUser.java
  5. 11 9
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/core/filter/PhoneLoginAuthenticationFilter.java
  6. 0 1
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/core/filter/UsernameAuthenticationFilter.java
  7. 10 3
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/core/provider/service/DefaultUserDetailsService.java
  8. 3 0
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/service/impl/SysMenuServiceImpl.java
  9. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ClassGroupTeacherMapperDao.java
  10. 3 2
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/GroupDao.java
  11. 26 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MusicGroupStudentFeeDao.java
  12. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SchoolDao.java
  13. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SporadicChargeInfoDao.java
  14. 8 9
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentPaymentOrderDao.java
  15. 21 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/ClassGroupTeacherMapDto.java
  16. 50 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/CourseScheduleEndDto.java
  17. 19 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/MusicGroupStudentsDto.java
  18. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/SporadicPayDto.java
  19. 30 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/SuperClassGroupDto.java
  20. 3 3
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/UpdateStudentFeeDto.java
  21. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/VipGroupBuyParamsDto.java
  22. 24 2
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/Group.java
  23. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/SporadicChargeInfo.java
  24. 12 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentRegistration.java
  25. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/VipGroupActivity.java
  26. 71 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/EndCourseScheduleQueryInfo.java
  27. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/MusicGroupStudentQueryInfo.java
  28. 6 0
      mec-biz/src/main/java/com/ym/mec/biz/service/MusicGroupStudentFeeService.java
  29. 19 0
      mec-biz/src/main/java/com/ym/mec/biz/service/SchoolService.java
  30. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/service/SporadicChargeInfoService.java
  31. 14 5
      mec-biz/src/main/java/com/ym/mec/biz/service/StudentPaymentOrderService.java
  32. 3 3
      mec-biz/src/main/java/com/ym/mec/biz/service/UploadFileService.java
  33. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/VipGroupService.java
  34. 40 7
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java
  35. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ContractServiceImpl.java
  36. 33 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java
  37. 13 10
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/EmployeeServiceImpl.java
  38. 7 6
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderServiceImpl.java
  39. 418 440
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java
  40. 19 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupStudentFeeServiceImpl.java
  41. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/PayServiceImpl.java
  42. 26 9
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SchoolServiceImpl.java
  43. 17 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SporadicChargeInfoImpl.java
  44. 18 16
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentAttendanceServiceImpl.java
  45. 3 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentOrderDetailServiceImpl.java
  46. 6 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentOrderServiceImpl.java
  47. 8 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRegistrationServiceImpl.java
  48. 31 15
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java
  49. 3 3
      mec-biz/src/main/resources/config/contracts/goods.ftl
  50. 17 2
      mec-biz/src/main/resources/config/mybatis/ClassGroupMapper.xml
  51. 16 0
      mec-biz/src/main/resources/config/mybatis/ClassGroupTeacherMapperMapper.xml
  52. 35 5
      mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  53. 29 4
      mec-biz/src/main/resources/config/mybatis/GroupMapper.xml
  54. 31 39
      mec-biz/src/main/resources/config/mybatis/MusicGroupStudentFeeMapper.xml
  55. 4 0
      mec-biz/src/main/resources/config/mybatis/SchoolMapper.xml
  56. 10 2
      mec-biz/src/main/resources/config/mybatis/SporadicChargeInfo.xml
  57. 11 7
      mec-biz/src/main/resources/config/mybatis/StudentManageDao.xml
  58. 2 0
      mec-biz/src/main/resources/config/mybatis/StudentPaymentOrderMapper.xml
  59. 6 1
      mec-biz/src/main/resources/config/mybatis/VipGroupActivityMapper.xml
  60. 4 1
      mec-gateway/mec-gateway-web/src/main/resources/application.yml
  61. 17 2
      mec-student/src/main/java/com/ym/mec/student/controller/MusicGroupController.java
  62. 62 34
      mec-student/src/main/java/com/ym/mec/student/controller/SporadicChargeInfoController.java
  63. 24 1
      mec-student/src/main/java/com/ym/mec/student/controller/StudentVipGroupController.java
  64. 4 1
      mec-student/src/main/resources/application.yml
  65. 22 0
      mec-teacher/src/main/java/com/ym/mec/teacher/controller/TeacherCourseScheduleController.java
  66. 24 1
      mec-teacher/src/main/java/com/ym/mec/teacher/controller/TeacherSchoolController.java
  67. 6 0
      mec-web/src/main/java/com/ym/mec/web/controller/SporadicChargeInfoController.java
  68. 18 2
      mec-web/src/main/java/com/ym/mec/web/controller/StudentManageController.java

+ 6 - 3
codegen/src/main/java/com/yonge/crud/CodegenApplication.java

@@ -28,7 +28,7 @@ public class CodegenApplication {
 		 */
 
 		// "src/generateConfigration.xml"
-		GenerateConfiguration genConfig = toObject("codegen/src/main/resources/generateConfigration.xml", GenerateConfiguration.class);
+		GenerateConfiguration genConfig = toObject("src/main/resources/generateConfigration.xml", GenerateConfiguration.class);
 
 		Configuration config = genConfig.getDbConfiguration();
 
@@ -42,8 +42,11 @@ public class CodegenApplication {
 		String sqlmapPackageName = genConfig.getSqlmapPackageName();
 		String sqlmapConfigPackageName = genConfig.getSqlmapConfigPackageName();
 		for (Table table : tables) {
-			session.reverse(table, srcBase, pojoPackageName, sqlmapPackageName, daoPackageName, servicePackageName);
-
+			try {
+				session.reverse(table, srcBase, pojoPackageName, sqlmapPackageName, daoPackageName, servicePackageName);
+			} catch (Exception e) {
+				e.printStackTrace();
+			}
 		}
 		// 生成sqlmapConfig
 		session.generateSqlmapConfig(tables, srcBase, sqlmapConfigPackageName, sqlmapPackageName);

+ 3 - 3
codegen/src/main/resources/generateConfigration.xml

@@ -9,9 +9,9 @@
 		<schema>mec_dev</schema>
 	</dbConfiguration>
 	<srcBase>d:/javabean</srcBase>
-	<pojoPackageName>auth.api.entity</pojoPackageName>
-	<daoPackageName>auth.dal.dao</daoPackageName>
-	<servicePackageName>auth.service</servicePackageName>
+	<pojoPackageName>com.ym.mec.biz.dal.entity</pojoPackageName>
+	<daoPackageName>com.ym.mec.biz.dal.dao</daoPackageName>
+	<servicePackageName>com.ym.mec.biz.service</servicePackageName>
 	<sqlmapPackageName>resources</sqlmapPackageName>
 	<sqlmapConfigPackageName>resources/config</sqlmapConfigPackageName>
 </GenerateConfiguration>

+ 12 - 0
mec-auth/mec-auth-api/src/main/java/com/ym/mec/auth/api/entity/SysMenu.java

@@ -22,6 +22,10 @@ public class SysMenu {
 	@ApiModelProperty(value = "菜单权限标识",required = false)
 	private String permission;
 
+	/** 菜单权限标识 */
+	@ApiModelProperty(value = "顶级菜单权限标识",required = false)
+	private String parentPermission;
+
 	/** 接口路径 */
 	@ApiModelProperty(value = "接口路径",required = false)
 	private String path;
@@ -65,6 +69,14 @@ public class SysMenu {
 	@ApiModelProperty(value = "子节点列表",required = false)
 	private List<SysMenu> sysMenus;
 
+	public String getParentPermission() {
+		return parentPermission;
+	}
+
+	public void setParentPermission(String parentPermission) {
+		this.parentPermission = parentPermission;
+	}
+
 	public Integer getHid() {
 		return hid;
 	}

+ 5 - 1
mec-auth/mec-auth-api/src/main/java/com/ym/mec/auth/api/entity/SysUser.java

@@ -7,6 +7,10 @@ import org.apache.commons.lang3.builder.ToStringBuilder;
 import java.io.Serializable;
 import java.util.Date;
 
+import org.apache.commons.lang3.builder.ToStringBuilder;
+
+import com.ym.mec.auth.api.enums.YesOrNoEnum;
+
 /**
  * 对应数据库表(sys_user):
  */
@@ -72,7 +76,7 @@ public class SysUser implements Serializable{
 
 	/** 用户类型 */
 	@ApiModelProperty(value = "用户类型",required = false)
-//	private SysUserType userType;
+	private String userType;
 
 	/** 用户类型 */
 //	@ApiModelProperty(value = "用户类型",required = false)

+ 11 - 9
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/core/filter/PhoneLoginAuthenticationFilter.java

@@ -1,9 +1,12 @@
 package com.ym.mec.auth.core.filter;
 
-import com.ym.mec.auth.api.dto.SysUserInfo;
-import com.ym.mec.auth.config.token.PhoneAuthenticationToken;
-import com.ym.mec.auth.service.SysUserService;
-import com.ym.mec.common.security.SecurityConstants;
+import java.io.IOException;
+
+import javax.servlet.FilterChain;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
 import org.springframework.security.authentication.AbstractAuthenticationToken;
 import org.springframework.security.authentication.AuthenticationServiceException;
 import org.springframework.security.authentication.LockedException;
@@ -12,11 +15,10 @@ import org.springframework.security.core.AuthenticationException;
 import org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter;
 import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
 
-import javax.servlet.FilterChain;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
+import com.ym.mec.auth.api.dto.SysUserInfo;
+import com.ym.mec.auth.config.token.PhoneAuthenticationToken;
+import com.ym.mec.auth.service.SysUserService;
+import com.ym.mec.common.security.SecurityConstants;
 
 public class PhoneLoginAuthenticationFilter extends AbstractAuthenticationProcessingFilter {
 

+ 0 - 1
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/core/filter/UsernameAuthenticationFilter.java

@@ -7,7 +7,6 @@ import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
-import org.apache.commons.lang3.StringUtils;
 import org.springframework.security.authentication.AuthenticationServiceException;
 import org.springframework.security.authentication.LockedException;
 import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;

+ 10 - 3
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/core/provider/service/DefaultUserDetailsService.java

@@ -55,18 +55,25 @@ public class DefaultUserDetailsService implements UserDetailsService {
 		List<GrantedAuthority> authorities = null;
 
 		String userType = userInfo.getSysUser().getUserType();
+		String[] roles = userType.split(",");
 
 		if (userType.contains("SYSTEM")) {
 			authorities = AuthorityUtils.createAuthorityList(userInfo.getPermissions());
-		} else {
+		}
+
+		if (authorities == null) {
 			authorities = new ArrayList<>();
 			authorities.add(new SimpleGrantedAuthority(StringUtils.lowerCase(userType)));
 		}
 
+		for (String role : roles) {
+			authorities.add(new SimpleGrantedAuthority(StringUtils.lowerCase(role)));
+		}
+
 		SysUser sysUser = userInfo.getSysUser();
 
-		return new AuthUser(sysUser.getId(), sysUser.getOrganId(), username, BCRYPT + sysUser.getPassword(), sysUser.getLockFlag() == 0,
-				true, true, true, authorities);
+		return new AuthUser(sysUser.getId(), sysUser.getOrganId(), username, BCRYPT + sysUser.getPassword(), sysUser.getLockFlag() == 0, true, true, true,
+				authorities);
 	}
 
 }

+ 3 - 0
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/service/impl/SysMenuServiceImpl.java

@@ -3,6 +3,7 @@ package com.ym.mec.auth.service.impl;
 import java.util.List;
 import java.util.stream.Collectors;
 
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -44,6 +45,7 @@ public class SysMenuServiceImpl extends BaseServiceImpl<Integer, SysMenu>  imple
 			sysMenus = sysMenuDao.findByParentId(menuQueryInfo.getParentId(),menuQueryInfo.getDelFlag(),menuQueryInfo.getUserId(),menuQueryInfo.getHid());
 		}
 		for (SysMenu menu:sysMenus) {
+			menu.setParentPermission(menu.getPermission());
 			menu = getTree(menu,menuQueryInfo.getDelFlag(),menuQueryInfo.getUserId(),menuQueryInfo.getHid());
 		}
 		return sysMenus;
@@ -64,6 +66,7 @@ public class SysMenuServiceImpl extends BaseServiceImpl<Integer, SysMenu>  imple
 			menu.setSysMenus(sysMenus);
 			//遍历子节点....
 			for (SysMenu sysMenu : sysMenus) {
+				sysMenu.setParentPermission(menu.getParentPermission());
 				getTree(sysMenu,delFlag,userId,hid);
 			}
 		}

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ClassGroupTeacherMapperDao.java

@@ -1,5 +1,6 @@
 package com.ym.mec.biz.dal.dao;
 
+import com.ym.mec.biz.dal.dto.ClassGroupTeacherMapDto;
 import com.ym.mec.biz.dal.entity.ClassGroupTeacherMapper;
 import com.ym.mec.biz.dal.enums.GroupType;
 import com.ym.mec.biz.dal.enums.TeachTypeEnum;
@@ -81,4 +82,13 @@ public interface ClassGroupTeacherMapperDao extends BaseDAO<Long, ClassGroupTeac
      * @return
      */
     String queryTeachingNames(Long classGroupId);
+
+    /**
+     * @describe 根据班级编号获取教师班级关联记录
+     * @author Joburgess
+     * @date 2020/1/3
+     * @param classGroupIds: 班级编号列表
+     * @return java.util.List<com.ym.mec.biz.dal.entity.ClassGroupTeacherMapper>
+     */
+    List<ClassGroupTeacherMapDto> findByClassGroupIds(@Param("classGroupIds") List<Integer> classGroupIds);
 }

+ 3 - 2
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/GroupDao.java

@@ -4,6 +4,7 @@ import com.ym.mec.biz.dal.entity.Group;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * @Author Joburgess
@@ -15,10 +16,10 @@ public interface GroupDao {
      * @describe 搜索团体
      * @author Joburgess
      * @date 2019/12/30
-     * @param search: 关键字
+     * @param params: 查询参数
      * @return java.util.List<com.ym.mec.biz.dal.entity.Group>
      */
-    List<Group> searchGroups(@Param("search") String search);
+    List<Group> searchGroups(Map<String, Object> params);
 
     /**
      * @describe 根据团体编号获取团体

+ 26 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MusicGroupStudentFeeDao.java

@@ -142,4 +142,30 @@ public interface MusicGroupStudentFeeDao extends BaseDAO<Long, MusicGroupStudent
 	 * @return
 	 */
 	List<MusicGroupStudentFee> queryByMusicGroupId(String musicGroupId);
+
+	/**
+	 * 修改学员缴费周期锁定状态
+	 * @param fee
+	 */
+	void updateStudentFeeIsLock(@Param("fee") UpdateStudentFeeDto fee);
+
+	/**
+	 * 批量修改学员缴费周期
+	 * @param month
+	 * @param musicGroupId
+	 */
+	void batchUpdateCalender(@Param("month") String month, @Param("musicGroupId") String musicGroupId);
+
+	/**
+	 * 批量修改学员缴费周期
+	 * @param musicGroupId
+	 */
+    void batchUpdateCalenders(String musicGroupId);
+
+	/**
+	 * 修改个人缴费周期
+	 * @param userId
+	 * @param musicGroupId
+	 */
+	void updateCalender(@Param("userId") Integer userId, @Param("musicGroupId") String musicGroupId);
 }

+ 2 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SchoolDao.java

@@ -41,6 +41,8 @@ public interface SchoolDao extends BaseDAO<Integer, School> {
     List<School> findVipSchoolByUserId(@Param("userId") Integer userId,
                                        @Param("organId") String organId,
                                        @Param("isDefault") Integer isDefault);
+    List<School> findVipSchoolByUserId2(@Param("userId") Integer userId,
+                                       @Param("organId") String organId);
 
 
 }

+ 2 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SporadicChargeInfoDao.java

@@ -8,4 +8,6 @@ import java.util.List;
 
 public interface SporadicChargeInfoDao extends BaseDAO<Integer, SporadicChargeInfo> {
     SporadicChargeInfo findInfoById(@Param("id") Integer id);
+
+    SporadicChargeInfo findByOrganIdAndType(@Param("organId") Integer organId, @Param("chargeType") Integer chargeType);
 }

+ 8 - 9
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentPaymentOrderDao.java

@@ -1,12 +1,5 @@
 package com.ym.mec.biz.dal.dao;
 
-import java.math.BigDecimal;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.ibatis.annotations.Param;
-
 import com.ym.mec.biz.dal.dto.SporadicChargeInfoDto;
 import com.ym.mec.biz.dal.dto.StudentPaymentOrderExportDto;
 import com.ym.mec.biz.dal.dto.UserGoodsDto;
@@ -17,6 +10,12 @@ import com.ym.mec.biz.dal.enums.GroupType;
 import com.ym.mec.biz.dal.enums.OrderDetailTypeEnum;
 import com.ym.mec.biz.dal.enums.OrderTypeEnum;
 import com.ym.mec.common.dal.BaseDAO;
+import org.apache.ibatis.annotations.Param;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
 
 public interface StudentPaymentOrderDao extends BaseDAO<Long, StudentPaymentOrder> {
 
@@ -30,7 +29,7 @@ public interface StudentPaymentOrderDao extends BaseDAO<Long, StudentPaymentOrde
     List<Goods> queryApplyGoodsList(@Param("musicGroupId") String musicGroupId, @Param("type") OrderDetailTypeEnum type);
 
 	List<StudentPaymentOrder> queryByCondition(@Param("groupType") GroupType groupType, @Param("musicGroupId") String musicGroupId,
-			@Param("userId") Integer userId, @Param("status") DealStatusEnum status);
+			@Param("userId") Integer userId, @Param("status") DealStatusEnum status, @Param("type") OrderTypeEnum type);
 
     /**
      * @Author: Joburgess
@@ -57,7 +56,7 @@ public interface StudentPaymentOrderDao extends BaseDAO<Long, StudentPaymentOrde
      * @Date: 2019/10/3
      * 根据学生vip课获取非失败缴费订单
      */
-    StudentPaymentOrder findNotFailedOrderByStudentVipGroup(@Param("vipGroupId") Long vipGroupId,
+    List<StudentPaymentOrder> findNotFailedOrderByStudentVipGroup(@Param("vipGroupId") Long vipGroupId,
                                                             @Param("userId") Integer userId);
 
     /**

+ 21 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/ClassGroupTeacherMapDto.java

@@ -0,0 +1,21 @@
+package com.ym.mec.biz.dal.dto;
+
+import com.ym.mec.biz.dal.entity.ClassGroupTeacherMapper;
+
+/**
+ * @Author Joburgess
+ * @Date 2020/1/3
+ */
+public class ClassGroupTeacherMapDto extends ClassGroupTeacherMapper {
+    private String userName;
+
+    @Override
+    public String getUserName() {
+        return userName;
+    }
+
+    @Override
+    public void setUserName(String userName) {
+        this.userName = userName;
+    }
+}

+ 50 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/CourseScheduleEndDto.java

@@ -10,6 +10,56 @@ public class CourseScheduleEndDto extends CourseSchedule {
 
     private String groupName;
 
+    private String teacherName;
+
+    private String organName;
+
+    private int isSignIn;
+
+    private int isSignOut;
+
+    private int isCallNames;
+
+    public int getIsSignIn() {
+        return isSignIn;
+    }
+
+    public void setIsSignIn(int isSignIn) {
+        this.isSignIn = isSignIn;
+    }
+
+    public int getIsSignOut() {
+        return isSignOut;
+    }
+
+    public void setIsSignOut(int isSignOut) {
+        this.isSignOut = isSignOut;
+    }
+
+    public int getIsCallNames() {
+        return isCallNames;
+    }
+
+    public void setIsCallNames(int isCallNames) {
+        this.isCallNames = isCallNames;
+    }
+
+    public String getOrganName() {
+        return organName;
+    }
+
+    public void setOrganName(String organName) {
+        this.organName = organName;
+    }
+
+    public String getTeacherName() {
+        return teacherName;
+    }
+
+    public void setTeacherName(String teacherName) {
+        this.teacherName = teacherName;
+    }
+
     public String getGroupName() {
         return groupName;
     }

+ 19 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/MusicGroupStudentsDto.java

@@ -48,6 +48,9 @@ public class MusicGroupStudentsDto{
 
     private Boolean isActive = false;
 
+    private Integer isLock;
+
+    private String paymentPeriodList;
 
     private String activeName;
 
@@ -55,6 +58,22 @@ public class MusicGroupStudentsDto{
 
     private String nextPaymentDateStr;
 
+    public String getPaymentPeriodList() {
+        return paymentPeriodList;
+    }
+
+    public void setPaymentPeriodList(String paymentPeriodList) {
+        this.paymentPeriodList = paymentPeriodList;
+    }
+
+    public Integer getIsLock() {
+        return isLock;
+    }
+
+    public void setIsLock(Integer isLock) {
+        this.isLock = isLock;
+    }
+
     public Boolean getIsActive() {
         return isActive;
     }

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/SporadicPayDto.java

@@ -14,9 +14,19 @@ public class SporadicPayDto {
     @ApiModelProperty(value = "支付项编号",required = false)
     private Integer sporadicId;
 
+    private boolean isRepeatPay;
+
     @ApiModelProperty(value = "是否余额支付",required = false)
     Boolean isUseBalancePayment = false;
 
+    public boolean getIsRepeatPay() {
+        return isRepeatPay;
+    }
+
+    public void setIsRepeatPay(boolean repeatPay) {
+        isRepeatPay = repeatPay;
+    }
+
     public BigDecimal getAmount() {
         return amount;
     }

+ 30 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/SuperClassGroupDto.java

@@ -10,6 +10,36 @@ public class SuperClassGroupDto extends ClassGroup {
 
     private String groupName;
 
+    private String bishopTeacherNames;
+
+    private String teachingTeacherNames;
+
+    private String organName;
+
+    public String getOrganName() {
+        return organName;
+    }
+
+    public void setOrganName(String organName) {
+        this.organName = organName;
+    }
+
+    public String getBishopTeacherNames() {
+        return bishopTeacherNames;
+    }
+
+    public void setBishopTeacherNames(String bishopTeacherNames) {
+        this.bishopTeacherNames = bishopTeacherNames;
+    }
+
+    public String getTeachingTeacherNames() {
+        return teachingTeacherNames;
+    }
+
+    public void setTeachingTeacherNames(String teachingTeacherNames) {
+        this.teachingTeacherNames = teachingTeacherNames;
+    }
+
     public String getGroupName() {
         return groupName;
     }

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

@@ -13,7 +13,7 @@ public class UpdateStudentFeeDto {
     private String musicGroupId;
 
     @ApiModelProperty(value = "缴费月份",required = false)
-    private List<Integer> month;
+    private String month;
 
     @ApiModelProperty(value = "是否锁定1是0否",required = false)
     private Integer isLock = 0;
@@ -37,11 +37,11 @@ public class UpdateStudentFeeDto {
         this.studentId = studentId;
     }
 
-    public List<Integer> getMonth() {
+    public String getMonth() {
         return month;
     }
 
-    public void setMonth(List<Integer> month) {
+    public void setMonth(String month) {
         this.month = month;
     }
 

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

@@ -20,6 +20,17 @@ public class VipGroupBuyParamsDto {
     @ApiModelProperty(value = "是否使用账户余额支付")
     private boolean isUseBalancePayment;
 
+    @ApiModelProperty(value = "是否重新支付")
+    private boolean isRepeatPay;
+
+    public boolean isRepeatPay() {
+        return isRepeatPay;
+    }
+
+    public void setRepeatPay(boolean repeatPay) {
+        isRepeatPay = repeatPay;
+    }
+
     public boolean isUseBalancePayment() {
         return isUseBalancePayment;
     }

+ 24 - 2
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/Group.java

@@ -11,10 +11,16 @@ public class Group {
     @ApiModelProperty(value = "编号")
     private String id;
 
-    @ApiModelProperty(value = "名称")
+    @ApiModelProperty(value = "部门编号")
+    private Integer organId;
+
+    @ApiModelProperty(value = "部门名称")
+    private String organName;
+
+    @ApiModelProperty(value = "团体名称")
     private String groupName;
 
-    @ApiModelProperty(value = "类型")
+    @ApiModelProperty(value = "团体类型")
     private GroupType groupType;
 
     public Group() {
@@ -25,6 +31,22 @@ public class Group {
         this.groupType = groupType;
     }
 
+    public Integer getOrganId() {
+        return organId;
+    }
+
+    public void setOrganId(Integer organId) {
+        this.organId = organId;
+    }
+
+    public String getOrganName() {
+        return organName;
+    }
+
+    public void setOrganName(String organName) {
+        this.organName = organName;
+    }
+
     public String getId() {
         return id;
     }

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/SporadicChargeInfo.java

@@ -24,6 +24,9 @@ public class SporadicChargeInfo {
 
 	private BigDecimal amount;
 
+	//优惠金额
+	private BigDecimal discountAmount;
+
 	private BigDecimal balance;
 
 	private Integer userId;
@@ -165,4 +168,12 @@ public class SporadicChargeInfo {
 	public void setOperatorId(Integer operatorId) {
 		this.operatorId = operatorId;
 	}
+
+	public BigDecimal getDiscountAmount() {
+		return discountAmount;
+	}
+
+	public void setDiscountAmount(BigDecimal discountAmount) {
+		this.discountAmount = discountAmount;
+	}
 }

+ 12 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentRegistration.java

@@ -11,6 +11,7 @@ import com.ym.mec.biz.dal.enums.ClassGroupStudentStatusEnum;
 import com.ym.mec.biz.dal.enums.KitPurchaseMethodEnum;
 import com.ym.mec.biz.dal.enums.PaymentStatusEnum;
 import com.ym.mec.biz.dal.enums.YesOrNoEnum;
+import com.ym.mec.biz.dal.entity.CooperationOrgan.OwnershipType;
 
 /**
  * 对应数据库表(student_registration):
@@ -109,6 +110,9 @@ public class StudentRegistration {
 
     private BigDecimal depositFee;
 
+    //乐团
+    private OwnershipType ownershipType;
+
     public BigDecimal getBalance() {
         return balance;
     }
@@ -371,4 +375,12 @@ public class StudentRegistration {
     public void setDepositFee(BigDecimal depositFee) {
         this.depositFee = depositFee;
     }
+
+    public OwnershipType getOwnershipType() {
+        return ownershipType;
+    }
+
+    public void setOwnershipType(OwnershipType ownershipType) {
+        this.ownershipType = ownershipType;
+    }
 }

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

@@ -49,6 +49,8 @@ public class VipGroupActivity {
 	
 	/** 薪水只读标识(1-只读 0-可写) */
 	private String salaryReadonlyFlag;
+
+	private String paymentReadonlyFlag;
 	
 	/** 赠送课时支付薪水标识(1-计课酬  0-不计课酬) */
 	private String giveClassPaySalaryFlag;
@@ -68,6 +70,14 @@ public class VipGroupActivity {
 
 	private Integer enable;
 
+	public String getPaymentReadonlyFlag() {
+		return paymentReadonlyFlag;
+	}
+
+	public void setPaymentReadonlyFlag(String paymentReadonlyFlag) {
+		this.paymentReadonlyFlag = paymentReadonlyFlag;
+	}
+
 	public Integer getEnable() {
 		return enable;
 	}

+ 71 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/EndCourseScheduleQueryInfo.java

@@ -1,15 +1,23 @@
 package com.ym.mec.biz.dal.page;
 
+import com.ym.mec.biz.dal.entity.CourseSchedule;
+import com.ym.mec.biz.dal.enums.ClassGroupTypeEnum;
+import com.ym.mec.biz.dal.enums.CourseStatusEnum;
 import com.ym.mec.biz.dal.enums.GroupType;
 import com.ym.mec.common.page.QueryInfo;
 import io.swagger.annotations.ApiModelProperty;
 
+import java.util.Date;
+
 /**
  * @Author Joburgess
  * @Date 2019/12/27
  */
 public class EndCourseScheduleQueryInfo extends QueryInfo {
 
+    @ApiModelProperty(value = "部门编号列表")
+    private String organIdList;
+
     @ApiModelProperty(value = "团体类型")
     private GroupType groupType;
 
@@ -25,6 +33,69 @@ public class EndCourseScheduleQueryInfo extends QueryInfo {
     @ApiModelProperty(value = "教师编号")
     private Integer teacherId;
 
+    @ApiModelProperty(value = "开始时间")
+    private Date startTime;
+
+    @ApiModelProperty(value = "结束时间")
+    private Date endTime;
+
+    @ApiModelProperty(value = "课程状态")
+    private CourseStatusEnum courseStatus;
+
+    @ApiModelProperty(value = "课程类型")
+    private CourseSchedule.CourseScheduleType courseType;
+
+    @ApiModelProperty(value = "班级类型")
+    private ClassGroupTypeEnum classGroupType;
+
+    public ClassGroupTypeEnum getClassGroupType() {
+        return classGroupType;
+    }
+
+    public void setClassGroupType(ClassGroupTypeEnum classGroupType) {
+        this.classGroupType = classGroupType;
+    }
+
+    public CourseStatusEnum getCourseStatus() {
+        return courseStatus;
+    }
+
+    public void setCourseStatus(CourseStatusEnum courseStatus) {
+        this.courseStatus = courseStatus;
+    }
+
+    public CourseSchedule.CourseScheduleType getCourseType() {
+        return courseType;
+    }
+
+    public void setCourseType(CourseSchedule.CourseScheduleType courseType) {
+        this.courseType = courseType;
+    }
+
+    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 String getOrganIdList() {
+        return organIdList;
+    }
+
+    public void setOrganIdList(String organIdList) {
+        this.organIdList = organIdList;
+    }
+
     public Integer getStudentId() {
         return studentId;
     }

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/MusicGroupStudentQueryInfo.java

@@ -17,12 +17,23 @@ public class MusicGroupStudentQueryInfo extends QueryInfo {
   @ApiModelProperty(value = "是否激活")
   private Boolean isActive;
 
+  @ApiModelProperty(value = "是否锁定")
+  private Integer isLock;
+
   @ApiModelProperty(value = "学员状态 NORMAL(NORMAL, 在读), LEAVE(LEAVE, 请假), QUIT(QUIT, 退班)",required = false)
   private String studentStatus;
 
   @ApiModelProperty(value = "缴费状态  PAID_COMPLETED(完成缴费), NON_PAYMENT(未缴费), PROCESSING(缴费中)",required = false)
   private String paymentStatus;
 
+  public Integer getIsLock() {
+    return isLock;
+  }
+
+  public void setIsLock(Integer isLock) {
+    this.isLock = isLock;
+  }
+
   public Boolean getIsActive() {
     return isActive;
   }

+ 6 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/MusicGroupStudentFeeService.java

@@ -25,4 +25,10 @@ public interface MusicGroupStudentFeeService extends BaseService<Long, MusicGrou
 	 * @return
 	 */
 	MusicGroupStudentFee findByUser(Integer userId,String musicGroupId);
+
+	/**
+	 * 修改学员缴费周期锁定状态
+	 * @param studentFeeDto
+	 */
+	void updateStudentFeeIsLock(UpdateStudentFeeDto studentFeeDto);
 }

+ 19 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/SchoolService.java

@@ -17,6 +17,16 @@ public interface SchoolService extends BaseService<Integer, School> {
     List<School> queryByOrganId(String organId);
 
     /**
+     * @describe 根据教师编号删除对应教学点
+     * @author Joburgess
+     * @date 2020/1/3
+     * @param schoolId: 教学点编号
+     * @param userId: 用户编号
+     * @return void
+     */
+    void deleteByTeacherAndId(Integer schoolId,Integer userId);
+
+    /**
      * @describe 获取教师vip课教学点
      * @author Joburgess
      * @date 2019/10/19
@@ -25,5 +35,14 @@ public interface SchoolService extends BaseService<Integer, School> {
      */
     List<School> findVipSchoolByTeacher(Integer teacherId,String organId,Integer isDefault);
 
+    /**
+     * @describe 获取教师vip课教学点
+     * @author Joburgess
+     * @date 2019/10/19
+     * @param teacherId:
+     * @return java.util.List<com.ym.mec.biz.dal.entity.School>
+     */
+    List<School> findVipSchoolByTeacher(Integer teacherId,String organId);
+
     PageInfo<School> queryPageDetail(SchoolQueryInfo queryInfo);
 }

+ 2 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/SporadicChargeInfoService.java

@@ -27,4 +27,6 @@ public interface SporadicChargeInfoService extends BaseService<Integer, Sporadic
      * @return
      */
     SporadicChargeInfo getDetail(Integer id);
+
+    SporadicChargeInfo findByOrganIdAndType(Integer organId,Integer type);
 }

+ 14 - 5
mec-biz/src/main/java/com/ym/mec/biz/service/StudentPaymentOrderService.java

@@ -9,9 +9,10 @@ import com.ym.mec.biz.dal.dto.StudentPaymentOrderExportDto;
 import com.ym.mec.biz.dal.entity.Goods;
 import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
 import com.ym.mec.biz.dal.enums.DealStatusEnum;
+import com.ym.mec.biz.dal.enums.GroupType;
 import com.ym.mec.biz.dal.enums.OrderDetailTypeEnum;
+import com.ym.mec.biz.dal.enums.OrderTypeEnum;
 import com.ym.mec.biz.dal.page.SporadicOrderQueryInfo;
-import com.ym.mec.biz.dal.page.StudentPaymentOrderQueryInfo;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.BaseService;
 
@@ -26,13 +27,23 @@ public interface StudentPaymentOrderService extends BaseService<Long, StudentPay
 	List<Goods> queryApplyGoodsList(String musicGroupId, OrderDetailTypeEnum type);
 
 	/**
-	 * 查询报名缴费订单
+	 * 查询订单列表
+	 * @param groupType
 	 * @param musicGroupId
+	 * @param userId
 	 * @param status
+	 * @param type
 	 * @return
 	 */
-	StudentPaymentOrder findMusicGroupApplyOrderByStatus(Integer userId,String musicGroupId, DealStatusEnum status);
+	List<StudentPaymentOrder> queryByCondition(GroupType groupType, String musicGroupId, Integer userId, DealStatusEnum status, OrderTypeEnum type);
 
+	/**
+	 * 查询报名缴费订单
+	 * @param musicGroupId
+	 * @param status
+	 * @return
+	 */
+	StudentPaymentOrder findMusicGroupApplyOrderByStatus(Integer userId, String musicGroupId, DealStatusEnum status);
 
 	/**
 	 * 根据orderNo查询订单
@@ -41,7 +52,6 @@ public interface StudentPaymentOrderService extends BaseService<Long, StudentPay
 	 */
 	StudentPaymentOrder findOrderByOrderNo(String orderNo);
 
-
 	/**
 	 * 查找支付成功和支付中订单
 	 * @return
@@ -56,7 +66,6 @@ public interface StudentPaymentOrderService extends BaseService<Long, StudentPay
 	 */
 	List<StudentPaymentOrder> findOrdersByStatus(DealStatusEnum status, String paymentChannel);
 
-
 	/**
 	 * 查询支付中超时的订单
 	 * @param orderNoList

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

@@ -27,11 +27,11 @@ public class UploadFileService {
 	private StoragePlugin storagePlugin;
 
 	/** 最大上传大小,单位kb */
-	@Value("${common.upload.maxSize:10240}")
+	@Value("${common.upload.maxSize:51200}")
 	private int maxSize;
 
 	/** 支持的扩展名 */
-	@Value("${common.upload.supportExtensions:jpg,jpeg,gif,png,mp3,mid,midi,aac,m4a}")
+	@Value("${common.upload.supportExtensions:jpg,jpeg,gif,png,mp3,mid,midi,aac,m4a,mp4}")
 	private String supportExtensions;
 
 	/** 文件根目录 */
@@ -62,7 +62,7 @@ public class UploadFileService {
 		File file = uploadFile(in, filePath, fileName);
 		if (maxSize > 0 && maxSize < file.length() / 1024) {
 			FileUtils.deleteQuietly(file);
-			uploadReturn.setMessage("超出允许的大小限制");
+			uploadReturn.setMessage("超出允许的大小(" + (maxSize / 1024) + "M)限制");
 			return uploadReturn;
 		}
 

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

@@ -186,7 +186,7 @@ public interface VipGroupService extends BaseService<Long, VipGroup> {
      * @param vipGroupId:
      * @return void
      */
-    void enableBuyVipGroup(Integer vipGroupId);
+    void enableBuyVipGroup(Integer vipGroupId, Integer userId);
 
     /**
      * @Author: Joburgess

+ 40 - 7
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java

@@ -1298,9 +1298,13 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         //检测新排课冲突
         courseScheduleService.checkNewCourseSchedules(courseScheduleList, false);
         //老师结算表
-        courseScheduleTeacherSalaryService.batchInsert(courseScheduleTeacherSalaryList);
+        if(courseScheduleTeacherSalaryList.size() > 0) {
+            courseScheduleTeacherSalaryService.batchInsert(courseScheduleTeacherSalaryList);
+        }
         //学生结算表
-        courseScheduleStudentPaymentDao.batchInsert(courseScheduleStudentPaymentList);
+        if(courseScheduleStudentPaymentList.size() > 0) {
+            courseScheduleStudentPaymentDao.batchInsert(courseScheduleStudentPaymentList);
+        }
         return classGroup;
     }
 
@@ -1538,10 +1542,14 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         }
 
         //老师结算表
-        courseScheduleTeacherSalaryService.batchInsert(courseScheduleTeacherSalaryList);
+        if(courseScheduleTeacherSalaryList.size() > 0) {
+            courseScheduleTeacherSalaryService.batchInsert(courseScheduleTeacherSalaryList);
+        }
 
         //学生结算表
-        courseScheduleStudentPaymentDao.batchInsert(courseScheduleStudentPaymentList);
+        if(courseScheduleStudentPaymentList.size() > 0) {
+            courseScheduleStudentPaymentDao.batchInsert(courseScheduleStudentPaymentList);
+        }
         return classGroup;
     }
 
@@ -1788,10 +1796,14 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         courseScheduleService.checkSnapCourseShchedules(courseScheduleList);
 
         //老师结算表
-        courseScheduleTeacherSalaryService.batchInsert(courseScheduleTeacherSalaryList);
+        if(courseScheduleTeacherSalaryList.size() > 0) {
+            courseScheduleTeacherSalaryService.batchInsert(courseScheduleTeacherSalaryList);
+        }
 
         //学生结算表
-        courseScheduleStudentPaymentDao.batchInsert(courseScheduleStudentPaymentList);
+        if(courseScheduleStudentPaymentList.size() > 0) {
+            courseScheduleStudentPaymentDao.batchInsert(courseScheduleStudentPaymentList);
+        }
         return classGroup;
     }
 
@@ -2214,7 +2226,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         MapUtil.populateMap(params, queryInfo);
 
         if(StringUtils.isNotBlank(queryInfo.getSearch())){
-            List<Group> groups = groupDao.searchGroups(queryInfo.getSearch());
+            List<Group> groups = groupDao.searchGroups(params);
             if(!CollectionUtils.isEmpty(groups)){
                 params.put("groups", groups);
             }
@@ -2233,11 +2245,16 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
             params.put("offset", pageInfo.getOffset());
             results = classGroupDao.superFindClassGroups(params);
             List<Group> groups=new ArrayList<>();
+            List<Integer> classGroupIds=new ArrayList<>();
             groups.add(null);
             for (SuperClassGroupDto result : results) {
                 Group group=new Group(result.getMusicGroupId(),result.getGroupType());
                 groups.add(group);
+                classGroupIds.add(result.getId());
             }
+            List<ClassGroupTeacherMapDto> classGroupTeacherMaps = classGroupTeacherMapperDao.findByClassGroupIds(classGroupIds);
+            Map<Integer, Map<TeachTypeEnum, List<ClassGroupTeacherMapDto>>> classTeacherTypeMaps = classGroupTeacherMaps.stream()
+                    .collect(Collectors.groupingBy(ClassGroupTeacherMapDto::getClassGroupId, Collectors.groupingBy(ClassGroupTeacherMapDto::getTeacherRole)));
             groups = groupDao.findByGroupIds(groups);
             Map<String, Map<GroupType, List<Group>>> groupsGroupByGroup = groups.stream().collect(Collectors.groupingBy(Group::getId, Collectors.groupingBy(Group::getGroupType)));
             results.forEach(result -> {
@@ -2246,6 +2263,22 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
                     List<Group> groupTemps = groupsTypeMap.get(result.getGroupType());
                     if(!CollectionUtils.isEmpty(groupTemps)){
                         result.setGroupName(groupTemps.get(0).getGroupName());
+                        result.setOrganName(groupTemps.get(0).getOrganName());
+                    }
+                }
+                Map<TeachTypeEnum, List<ClassGroupTeacherMapDto>> teachTypeEnumListMap = classTeacherTypeMaps.get(result.getId());
+                if(Objects.nonNull(teachTypeEnumListMap)){
+                    for (TeachTypeEnum teachType:teachTypeEnumListMap.keySet()){
+                        List<ClassGroupTeacherMapDto> classGroupTeachers=teachTypeEnumListMap.get(teachType);
+                        if(!CollectionUtils.isEmpty(classGroupTeachers)){
+                            List<String> userNames = classGroupTeachers.stream().map(ClassGroupTeacherMapDto::getUserName).collect(Collectors.toList());
+                            if(teachType.equals(TeachTypeEnum.BISHOP)){
+                                result.setBishopTeacherNames(StringUtils.join(userNames.toArray(),","));
+                            }
+                            if(teachType.equals(TeachTypeEnum.TEACHING)){
+                                result.setTeachingTeacherNames(StringUtils.join(userNames.toArray(),","));
+                            }
+                        }
                     }
                 }
             });

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

@@ -407,7 +407,7 @@ public class ContractServiceImpl implements ContractService, InitializingBean {
 		// 课程费用
 		StudentRegistration studentRegistration = studentRegistrationService.queryByUserIdAndMusicGroupId(userId, musicGroupId);
 		if (studentRegistration == null) {
-			throw new BizException("用户 报名信息不存在");
+			throw new BizException("用户报名信息不存在");
 		}
 		MusicGroupStudentFee musicGroupStudentFee = musicGroupStudentFeeDao.findByUser(userId, musicGroupId);
 		if (musicGroupStudentFee == null) {

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

@@ -93,6 +93,8 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
     private SysConfigService sysConfigService;
     @Autowired
     private GroupDao groupDao;
+    @Autowired
+    private TeacherDao teacherDao;
 
     private final Logger LOGGER = LoggerFactory
             .getLogger(this.getClass());
@@ -1115,6 +1117,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
         Map<Integer, Map<String, Integer>> holiday = new HashMap<>();
 
         classGroupCourseSchedulesWithDate.sort(Comparator.comparing(CourseSchedule::getStartClassTime));
+
         for (int i=0;i<classGroupCourseSchedulesWithDate.size();i++) {
             CourseSchedule courseSchedule=classGroupCourseSchedulesWithDate.get(i);
             calendar.setTime(courseSchedule.getClassDate());
@@ -2149,10 +2152,14 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
         Map<String, Object> params = new HashMap<>(16);
         MapUtil.populateMap(params, queryInfo);
 
-        if(StringUtils.isNotBlank(queryInfo.getSearch())){
-            List<Group> groups = groupDao.searchGroups(queryInfo.getSearch());
+        if(StringUtils.isNotBlank(queryInfo.getSearch())||StringUtils.isNotBlank(queryInfo.getOrganIdList())){
+            List<Group> groups = groupDao.searchGroups(params);
             if(!CollectionUtils.isEmpty(groups)){
                 params.put("groups", groups);
+            }else{
+                if(StringUtils.isNotBlank(queryInfo.getOrganIdList())){
+                    return pageInfo;
+                }
             }
             List<Integer> studentCourseIds=courseScheduleDao.findCourseIdsByStudent(queryInfo.getSearch());
             List<Integer> teacherCourseIds=courseScheduleDao.findCourseIdsByTeacher(queryInfo.getSearch());
@@ -2168,21 +2175,45 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
             pageInfo.setTotal(count);
             params.put("offset", pageInfo.getOffset());
             results = courseScheduleDao.endFindCourseSchedules(params);
+            List<Long> courseScheduleIds = results.stream().map(CourseScheduleEndDto::getId).collect(Collectors.toList());
+            List<TeacherAttendance> teacherAttendances = teacherAttendanceDao.findTeacherIdByCourseSchedule(courseScheduleIds);
+            Map<Long, List<TeacherAttendance>> courseTeacherAttendanceMap = teacherAttendances.stream().collect(Collectors.groupingBy(TeacherAttendance::getCourseScheduleId));
+            List<Map<Integer, Integer>> studentNumCourseMaps = studentAttendanceDao.countStudentAttendancesByCourses(courseScheduleIds);
+            Map<Integer, Long> studentNumCourseMap = MapUtil.convertIntegerMap(studentNumCourseMaps);
             List<Group> groups=new ArrayList<>();
             groups.add(null);
+            List<Integer> teacherIds=new ArrayList<>();
             for (CourseScheduleEndDto courseScheduleEndDto : results) {
                 Group group=new Group(courseScheduleEndDto.getMusicGroupId(),courseScheduleEndDto.getGroupType());
                 groups.add(group);
+                teacherIds.add(courseScheduleEndDto.getActualTeacherId());
             }
+            List<Map<Integer, String>> nameIdMaps = teacherDao.queryUsernameByIds(teacherIds);
+            Map<Integer, String> nameIdMap=MapUtil.convertIntegerMap(nameIdMaps);
             groups = groupDao.findByGroupIds(groups);
             Map<String, Map<GroupType, List<Group>>> groupsGroupByGroup = groups.stream().collect(Collectors.groupingBy(Group::getId, Collectors.groupingBy(Group::getGroupType)));
             results.forEach(result -> {
                 Map<GroupType, List<Group>> groupsTypeMap = groupsGroupByGroup.get(result.getMusicGroupId());
+                result.setTeacher(null);
                 if(Objects.nonNull(groupsTypeMap)){
                     List<Group> groupTemps = groupsTypeMap.get(result.getGroupType());
                     if(!CollectionUtils.isEmpty(groupTemps)){
                         result.setGroupName(groupTemps.get(0).getGroupName());
+                        result.setOrganName(groupTemps.get(0).getOrganName());
                     }
+                    result.setTeacherName(nameIdMap.get(result.getActualTeacherId()));
+                }
+                List<TeacherAttendance> courseTeacherAttendances = courseTeacherAttendanceMap.get(result.getId());
+                if(!CollectionUtils.isEmpty(courseTeacherAttendances)){
+                    TeacherAttendance teacherAttendance=courseTeacherAttendances.get(0);
+                    result.setIsSignIn(Objects.isNull(teacherAttendance.getSignInStatus())?3:teacherAttendance.getSignInStatus().getCode());
+                    result.setIsSignOut(Objects.isNull(teacherAttendance.getSignOutStatus())?3:teacherAttendance.getSignOutStatus().getCode());
+                }
+                Long studentNum = studentNumCourseMap.get(result.getId());
+                if (Objects.nonNull(studentNum)) {
+                    result.setIsCallNames(studentNum > 0 ? 0 : 1);
+                } else {
+                    result.setIsCallNames(1);
                 }
             });
         }

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

@@ -1,5 +1,16 @@
 package com.ym.mec.biz.service.impl;
 
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.auth.api.enums.YesOrNoEnum;
@@ -21,16 +32,6 @@ import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.im.ImFeignService;
 import com.ym.mec.util.collection.MapUtil;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
 
 @Service
 public class EmployeeServiceImpl extends BaseServiceImpl<Integer, Employee>  implements EmployeeService {
@@ -72,6 +73,8 @@ public class EmployeeServiceImpl extends BaseServiceImpl<Integer, Employee>  imp
 			}else{
 				throw new BizException("员工已存在");
 			}
+		} else {
+			employee.setUserType(SysUserType.SYSTEM.getCode());
 		}
 		employee.setPassword(new BCryptPasswordEncoder().encode(ParamEnum.INIT_PASSWORD.getCode().toString()));
 		employee.setUserType("SYSTEM");

+ 7 - 6
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderServiceImpl.java

@@ -1,11 +1,11 @@
 package com.ym.mec.biz.service.impl;
 
-import java.io.Serializable;
-import java.util.*;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Date;
+import java.util.List;
 import java.util.stream.Collectors;
 
-import com.ym.mec.biz.dal.entity.MusicGroupStudentFee;
-import io.swagger.models.auth.In;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -13,6 +13,7 @@ import org.springframework.transaction.annotation.Transactional;
 
 import com.ym.mec.biz.dal.dao.MusicGroupPaymentCalenderDao;
 import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender;
+import com.ym.mec.biz.dal.entity.MusicGroupStudentFee;
 import com.ym.mec.biz.service.MusicGroupPaymentCalenderService;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
@@ -47,8 +48,8 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
 			String paymentPeriodList = fee.getPaymentPeriodList();
 			if(StringUtils.isEmpty(paymentPeriodList)){
 				return null;
-			}else {
-				months = new ArrayList(Arrays.asList(paymentPeriodList.split(",")));
+			} else {
+				months = Arrays.asList(paymentPeriodList.split(",")).stream().map(x -> Integer.parseInt(x)).collect(Collectors.toList());
 				Collections.sort(months);
 			}
 		}else {

File diff suppressed because it is too large
+ 418 - 440
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java


+ 19 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupStudentFeeServiceImpl.java

@@ -1,6 +1,7 @@
 package com.ym.mec.biz.service.impl;
 
 import com.ym.mec.biz.dal.dao.MusicGroupDao;
+import com.ym.mec.biz.dal.dao.MusicGroupPaymentCalenderDao;
 import com.ym.mec.biz.dal.dao.MusicGroupStudentFeeDao;
 import com.ym.mec.biz.dal.dao.SysConfigDao;
 import com.ym.mec.biz.dal.dto.UpdateStudentFeeDto;
@@ -8,14 +9,17 @@ import com.ym.mec.biz.dal.entity.MusicGroup;
 import com.ym.mec.biz.dal.entity.MusicGroupStudentFee;
 import com.ym.mec.biz.dal.entity.MusicGroupStudentFee.PaymentStatus;
 import com.ym.mec.biz.dal.enums.MessageTypeEnum;
+import com.ym.mec.biz.service.MusicGroupPaymentCalenderService;
 import com.ym.mec.biz.service.MusicGroupStudentFeeService;
 import com.ym.mec.biz.service.SysConfigService;
 import com.ym.mec.biz.service.SysMessageService;
 import com.ym.mec.common.dal.BaseDAO;
+import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.thirdparty.message.MessageSenderPluginContext.MessageSender;
 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.*;
@@ -36,6 +40,9 @@ public class MusicGroupStudentFeeServiceImpl extends BaseServiceImpl<Long, Music
 	@Autowired
 	private SysMessageService sysMessageService;
 
+	@Autowired
+	private MusicGroupPaymentCalenderService musicGroupPaymentCalenderService;
+
 	@Override
 	public BaseDAO<Long, MusicGroupStudentFee> getDAO() {
 		return musicGroupStudentFeeDao;
@@ -80,9 +87,16 @@ public class MusicGroupStudentFeeServiceImpl extends BaseServiceImpl<Long, Music
 	}
 
 	@Override
+	@Transactional(rollbackFor = Exception.class)
 	public void updateStudentFee(UpdateStudentFeeDto studentFeeDto) {
 		//修改学员缴费周期和是否锁定z
 		musicGroupStudentFeeDao.updateStudentFee(studentFeeDto);
+		MusicGroupStudentFee fee = musicGroupStudentFeeDao.findByUser(studentFeeDto.getStudentId(), studentFeeDto.getMusicGroupId());
+		if(fee == null){
+			throw new BizException("学员缴费信息不存在");
+		}
+		fee.setNextPaymentDate(musicGroupPaymentCalenderService.getNextPaymentDate(studentFeeDto.getMusicGroupId(),null,fee));
+		musicGroupStudentFeeDao.update(fee);
 	}
 
 	@Override
@@ -90,4 +104,9 @@ public class MusicGroupStudentFeeServiceImpl extends BaseServiceImpl<Long, Music
 		return musicGroupStudentFeeDao.findByUser(userId,musicGroupId);
 	}
 
+	@Override
+	public void updateStudentFeeIsLock(UpdateStudentFeeDto studentFeeDto) {
+		musicGroupStudentFeeDao.updateStudentFeeIsLock(studentFeeDto);
+	}
+
 }

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

@@ -97,7 +97,7 @@ public class PayServiceImpl implements PayService {
         String company = "daya";
         if (userId != null) {
             MusicGroup musicGroup = musicGroupDao.findUserMusicGroup(userId);
-            if (musicGroup != null && musicGroup.getOwnershipType().equals(CooperationOrgan.OwnershipType.COOPERATION)) {
+            if (musicGroup != null && musicGroup.getOwnershipType() != null && musicGroup.getOwnershipType().equals(CooperationOrgan.OwnershipType.COOPERATION)) {
                 company = "yadie";
             }
         }

+ 26 - 9
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SchoolServiceImpl.java

@@ -1,23 +1,24 @@
 package com.ym.mec.biz.service.impl;
 
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.stream.Collectors;
-
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
 import com.ym.mec.biz.dal.dao.OrganizationDao;
 import com.ym.mec.biz.dal.dao.SchoolDao;
 import com.ym.mec.biz.dal.entity.School;
 import com.ym.mec.biz.dal.page.SchoolQueryInfo;
 import com.ym.mec.biz.service.SchoolService;
 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 org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Set;
+import java.util.stream.Collectors;
 
 @Service
 public class SchoolServiceImpl extends BaseServiceImpl<Integer, School>  implements SchoolService {
@@ -38,11 +39,27 @@ public class SchoolServiceImpl extends BaseServiceImpl<Integer, School>  impleme
 	}
 
 	@Override
+	public void deleteByTeacherAndId(Integer schoolId, Integer userId) {
+		School school = schoolDao.get(schoolId);
+		if(Objects.isNull(school)){
+			throw new BizException("此教学点不存在");
+		}
+		if(Objects.nonNull(school.getUserId())&&school.getUserId().equals(userId)){
+			schoolDao.delete(schoolId);
+		}
+	}
+
+	@Override
 	public List<School> findVipSchoolByTeacher(Integer teacherId,String organId,Integer isDefault) {
 		return schoolDao.findVipSchoolByUserId(teacherId,organId,isDefault);
 	}
 
 	@Override
+	public List<School> findVipSchoolByTeacher(Integer teacherId,String organId) {
+		return schoolDao.findVipSchoolByUserId2(teacherId,organId);
+	}
+
+	@Override
 	public PageInfo<School> queryPageDetail(SchoolQueryInfo queryInfo) {
 		PageInfo<School> schoolPageInfo = queryPage(queryInfo);
 		List<School> rows = schoolPageInfo.getRows();

+ 17 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SporadicChargeInfoImpl.java

@@ -43,6 +43,8 @@ public class SporadicChargeInfoImpl extends BaseServiceImpl<Integer, SporadicCha
 	private OrganizationDao organizationDao;
 	@Autowired
 	private TeacherDao teacherDao;
+	@Autowired
+	private SysUserCashAccountService sysUserCashAccountService;
 
 	@Override
 	public BaseDAO<Integer, SporadicChargeInfo> getDAO() {
@@ -68,9 +70,19 @@ public class SporadicChargeInfoImpl extends BaseServiceImpl<Integer, SporadicCha
 					studentPaymentOrder.getActualAmount(),info.getTitle());
 			sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.YIMEI, MessageTypeEnum.SMS_SPORADIC_PAYMENT_SUCCESS, yimei, null, 0, "1",
 					studentPaymentOrder.getActualAmount(),info.getTitle());
+
+			//活动,增加课程余额
+			if(info.getChargeType().equals("6")){
+				sysUserCashAccountService.appendCourseBalance(userId,info.getAmount());
+			}
+
 			return true;
 		}
 		if(studentPaymentOrder.getStatus() == DealStatusEnum.CLOSE || studentPaymentOrder.getStatus() == DealStatusEnum.FAILED){
+			if(studentPaymentOrder.getBalancePaymentAmount() != null && studentPaymentOrder.getBalancePaymentAmount().compareTo(BigDecimal.ZERO) >0 ){
+				sysUserCashAccountService.updateBalance(studentPaymentOrder.getUserId(), studentPaymentOrder.getBalancePaymentAmount(),PlatformCashAccountDetailTypeEnum.REFUNDS,info.getTitle()+"支付失败");
+			}
+
 			sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.SMS_SPORADIC_PAYMENT_FAILED, map, null, 0,"",
 					studentPaymentOrder.getActualAmount(),info.getTitle());
 			sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.YIMEI, MessageTypeEnum.SMS_SPORADIC_PAYMENT_FAILED, yimei, null, 0, "",
@@ -111,4 +123,9 @@ public class SporadicChargeInfoImpl extends BaseServiceImpl<Integer, SporadicCha
 		}
 		return sporadicChargeInfo;
 	}
+
+	@Override
+	public SporadicChargeInfo findByOrganIdAndType(Integer organId, Integer type) {
+		return sporadicChargeInfoDao.findByOrganIdAndType(organId,type);
+	}
 }

+ 18 - 16
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentAttendanceServiceImpl.java

@@ -162,18 +162,20 @@ public class StudentAttendanceServiceImpl extends BaseServiceImpl<Long, StudentA
 
 		//是否在范围内
 		boolean isInScore = true;
-		if(StringUtils.isBlank(school.getLongitudeLatitude())){
-			if(studentAttendanceInfos.getUpdate().equals(YesOrNoEnum.YES.getCode())){
-				school.setLongitudeLatitude(studentAttendanceInfos.getSignInLongitudeLatitude());
-				schoolDao.update(school);
-			}
-		}else{
-			SysConfig sysConfig = sysConfigService.findByParamName(SysConfigService.ATTENDANCE_RANGE);
-			double attendanceRange = Double.valueOf(sysConfig.getParanValue());
-			double distance = MapUtil.distance(studentAttendanceInfos.getSignInLongitudeLatitude(),
-					school.getLongitudeLatitude());
-			if(distance>attendanceRange){
-				isInScore=false;
+		if(Objects.nonNull(school)){
+			if(StringUtils.isBlank(school.getLongitudeLatitude())){
+				if(studentAttendanceInfos.getUpdate().equals(YesOrNoEnum.YES.getCode())){
+					school.setLongitudeLatitude(studentAttendanceInfos.getSignInLongitudeLatitude());
+					schoolDao.update(school);
+				}
+			}else{
+				SysConfig sysConfig = sysConfigService.findByParamName(SysConfigService.ATTENDANCE_RANGE);
+				double attendanceRange = Double.valueOf(sysConfig.getParanValue());
+				double distance = MapUtil.distance(studentAttendanceInfos.getSignInLongitudeLatitude(),
+						school.getLongitudeLatitude());
+				if(distance>attendanceRange){
+					isInScore=false;
+				}
 			}
 		}
 
@@ -269,14 +271,14 @@ public class StudentAttendanceServiceImpl extends BaseServiceImpl<Long, StudentA
 
 		Date date = new Date();
 		
-		int days = 1;
+		int hours = 4;
 		String str = sysConfigDao.findConfigValue(SysConfigService.ADVANCE_LEAVE_HOURS);
 		if (StringUtils.isNotBlank(str)) {
-			days = Integer.parseInt(str);
+			hours = Integer.parseInt(str);
 		}
 
-		if(DateUtil.addDays1(date, days).after(courseSchedule.getStartClassTime())){
-			throw new BizException("开课{}天之前才可以请假",days);
+		if(DateUtil.addHours(date, hours).after(courseSchedule.getStartClassTime())){
+			throw new BizException("开课{}小时之前才可以请假",hours);
 		}
 		
 		StudentAttendance studentAttendance  = studentAttendanceDao.findByStatusAndCourseScheduleId(userId,courseScheduleId.intValue());

+ 3 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentOrderDetailServiceImpl.java

@@ -145,6 +145,9 @@ public class StudentPaymentOrderDetailServiceImpl extends BaseServiceImpl<Long,
                 goodsIdsStr += studentPaymentOrderDetail.getGoodsIdList() + ",";
             }
         }
+        if(goodsIdsStr.isEmpty()){
+            return null;
+        }
         goodsIdsStr = goodsIdsStr.substring(0, goodsIdsStr.length() - 1);
 
         String[] goodSIdArr = goodsIdsStr.split(",");

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

@@ -21,6 +21,7 @@ import com.ym.mec.biz.dal.dto.StudentPaymentOrderExportDto;
 import com.ym.mec.biz.dal.entity.Goods;
 import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
 import com.ym.mec.biz.dal.enums.DealStatusEnum;
+import com.ym.mec.biz.dal.enums.GroupType;
 import com.ym.mec.biz.dal.enums.OrderDetailTypeEnum;
 import com.ym.mec.biz.dal.enums.OrderTypeEnum;
 import com.ym.mec.biz.dal.page.SporadicOrderQueryInfo;
@@ -66,6 +67,11 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
     }
 
     @Override
+	public List<StudentPaymentOrder> queryByCondition(GroupType groupType, String musicGroupId, Integer userId, DealStatusEnum status, OrderTypeEnum type) {
+		return studentPaymentOrderDao.queryByCondition(groupType, musicGroupId, userId, status, type);
+	}
+
+	@Override
     public StudentPaymentOrder findMusicGroupApplyOrderByStatus(Integer userId, String musicGroupId, DealStatusEnum status) {
         return studentPaymentOrderDao.findMusicGroupApplyOrderByStatus(userId, musicGroupId, status);
     }

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

@@ -436,6 +436,9 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
         //关闭老订单
         oldOrder.setStatus(DealStatusEnum.CLOSE);
         studentPaymentOrderService.update(oldOrder);
+        if(oldOrder.getBalancePaymentAmount() != null && oldOrder.getBalancePaymentAmount().compareTo(BigDecimal.ZERO) >0 ){
+            sysUserCashAccountService.updateBalance(oldOrder.getUserId(), oldOrder.getBalancePaymentAmount(),PlatformCashAccountDetailTypeEnum.REFUNDS,"关闭订单");
+        }
         Date date = new Date();
         StudentPaymentOrder studentPaymentOrder = new StudentPaymentOrder();
         studentPaymentOrder.setUserId(userId);
@@ -649,6 +652,7 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
             musicGroupStudentFeeDao.insert(new MusicGroupStudentFee(musicGroupId,
                     userId, studentRegistration.getSubjectId(), studentAddDto.getCourseFee(),
                     nextPaymentDate, studentAddDto.getTemporaryCourseFee(),paymentStatus));
+            musicGroupStudentFeeDao.updateCalender(userId,musicGroupId);
             studentPaymentOrder.setExpectAmount(reduce);
             //当前学员是否以前存在过当前乐团
             if(phoneAndMusicGroupId != null){
@@ -880,6 +884,10 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
                     throw new BizException("减去缴费人数失败");
                 }
             }
+            if(studentPaymentOrder.getBalancePaymentAmount() != null && studentPaymentOrder.getBalancePaymentAmount().compareTo(BigDecimal.ZERO) >0 ){
+                sysUserCashAccountService.updateBalance(studentPaymentOrder.getUserId(), studentPaymentOrder.getBalancePaymentAmount(),PlatformCashAccountDetailTypeEnum.REFUNDS,"报名缴费失败");
+            }
+
             //发送缴费成功通知(短信 + push)
             String studentApplyUrl = sysConfigDao.findConfigValue(SysConfigService.STUDENT_APPLY_URL) + studentRegistration.getMusicGroupId();
 

+ 31 - 15
mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java

@@ -24,6 +24,7 @@ import com.ym.mec.im.ImFeignService;
 import com.ym.mec.thirdparty.message.MessageSenderPluginContext;
 import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.date.DateUtil;
+
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -251,8 +252,8 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 //		}
 
 		//如果默认课酬与实际课酬不匹配则需要审批
-		if(costInfo.get("offlineTeacherSalary").compareTo(vipGroupApplyBaseInfoDto.getOfflineTeacherSalary())>0||
-			costInfo.get("onlineTeacherSalary").compareTo(vipGroupApplyBaseInfoDto.getOnlineTeacherSalary())>0
+		if(costInfo.get("offlineTeacherSalary").compareTo(vipGroupApplyBaseInfoDto.getOfflineTeacherSalary())<0||
+			costInfo.get("onlineTeacherSalary").compareTo(vipGroupApplyBaseInfoDto.getOnlineTeacherSalary())<0
 			&&StringUtils.isBlank(studentIds)){
 			vipGroupApplyBaseInfoDto.setAuditStatus(AuditStatusEnum.ING);
 		}else{
@@ -892,11 +893,17 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
     }
 
 	@Override
-	public void enableBuyVipGroup(Integer vipGroupId) {
+	public void enableBuyVipGroup(Integer vipGroupId, Integer userId) {
 		if (Objects.isNull(vipGroupId)){
 			throw new BizException("请指定VIP课");
 		}
 		VipGroup vipGroup = get(vipGroupId.longValue());
+		if(Objects.nonNull(vipGroup.getStudentIdList())){
+			Set<Integer> userIds = Arrays.asList(vipGroup.getStudentIdList().split(",")).stream().mapToInt(Integer::parseInt).boxed().collect(Collectors.toSet());
+			if(!userIds.contains(userId)){
+				throw new BizException("您无法购买此课程");
+			}
+		}
 		List<CourseSchedule> courseSchedules = JSON.parseArray(vipGroup.getCourseSchedulesJson(),CourseSchedule.class);
 		courseScheduleService.checkNewCourseSchedules(courseSchedules,false);
 	}
@@ -980,7 +987,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 
 	@Transactional(rollbackFor = Exception.class)
 	@Override
-	public Map buyVipGroup(VipGroupBuyParamsDto vipGroupBuyParams) throws Exception {
+	public Map buyVipGroup(VipGroupBuyParamsDto vipGroupBuyParams) {
 		SysUser user = sysUserFeignService.queryUserInfo();
 		if(user == null){
 			throw new BizException("用户信息获取失败");
@@ -1000,20 +1007,23 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 			throw new BizException("该课程已结束报名!");
 		}
 
-		StudentPaymentOrder oldOrder = studentPaymentOrderDao.findNotFailedOrderByStudentVipGroup(vipGroupBuyParams.getVipGroupId(),
+		if(Objects.nonNull(vipGroup.getStudentIdList())){
+			Set<Integer> userIds = Arrays.asList(vipGroup.getStudentIdList().split(",")).stream().mapToInt(Integer::parseInt).boxed().collect(Collectors.toSet());
+			if(!userIds.contains(user.getId())){
+				throw new BizException("您无法购买此课程");
+			}
+		}
+
+		List<StudentPaymentOrder> oldOrders = studentPaymentOrderDao.findNotFailedOrderByStudentVipGroup(vipGroupBuyParams.getVipGroupId(),
 				user.getId());
+		Map<DealStatusEnum, Long> statusCountMap = oldOrders.stream().collect(Collectors.groupingBy(StudentPaymentOrder::getStatus, Collectors.counting()));
 
-		if(Objects.nonNull(oldOrder)&&oldOrder.getStatus().equals(DealStatusEnum.SUCCESS)){
+		if(Objects.nonNull(statusCountMap.get(DealStatusEnum.SUCCESS))&&statusCountMap.get(DealStatusEnum.SUCCESS)>0){
 			if("36".equals(user.getOrganId())){
 				throw new BizException("您已预约过此课程");
 			}
 			throw new BizException("您已购买过此课程");
-		}else if(Objects.nonNull(oldOrder)&&oldOrder.getStatus().equals(DealStatusEnum.ING)){
-			if("36".equals(user.getOrganId())){
-				throw new BizException("您已预约过此课程,请等待处理结果");
-			}
-			throw new BizException("您有处理中的订单,请等待处理结果");
-		}else{
+		}else if(CollectionUtils.isEmpty(oldOrders)||Objects.isNull(statusCountMap.get(DealStatusEnum.ING))){
 			if(classGroup.getStudentNum()>=classGroup.getExpectStudentNum()){
 				throw new BizException("该课程人数已达上限");
 			}
@@ -1081,7 +1091,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 				return result;
 			}else{
 				if (userCashAccount.getBalance().doubleValue() > 0) {
-					sysUserCashAccountService.updateBalance(user.getId(), userCashAccount.getBalance().negate(), PlatformCashAccountDetailTypeEnum.PAY_FEE, "乐团续费");
+					sysUserCashAccountService.updateBalance(user.getId(), userCashAccount.getBalance().negate(), PlatformCashAccountDetailTypeEnum.PAY_FEE, "VIP课购买");
 					amount = amount.subtract(userCashAccount.getBalance());
 					studentPaymentOrder.setActualAmount(amount);
 					studentPaymentOrder.setBalancePaymentAmount(userCashAccount.getBalance());
@@ -1110,7 +1120,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 					amount,
 					orderNo,
 					baseApiUrl+"/api-student/studentOrder/notify",
-					baseApiUrl+"/#/paymentresult?orderNo=" + orderNo,
+					baseApiUrl+"/api-student/studentOrder/paymentResult?orderNo=" + orderNo,
 					"vip课购买",
 					vipGroup.getName(),
 					user.getId(),
@@ -1157,11 +1167,17 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		if(!isOk){
 			updateVipGroupStudentNumAndStatus(vipGroupId,classGroup,-1,false);
 			classGroupStudentMapperDao.deleteStudentByMusicGroupId(vipGroupId.toString(),userId);
+			if (studentPaymentOrder.getBalancePaymentAmount() != null && studentPaymentOrder.getBalancePaymentAmount().doubleValue() > 0) {
+				sysUserCashAccountService.updateBalance(userId, studentPaymentOrder.getBalancePaymentAmount(), PlatformCashAccountDetailTypeEnum.REFUNDS,
+						"VIP课购买失败");
+			}
 			return;
 		}
 
 		try {
-			updateVipGroupStudentNumAndStatus(vipGroupId, classGroup,0,true);
+			if(classGroup.getDelFlag()==1){
+				updateVipGroupStudentNumAndStatus(vipGroupId, classGroup,0,true);
+			}
 		} catch (Exception e) {
 			LOGGER.error("小课[{}]开课失败:{}",vipGroupId,e.getCause());
 		}

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

@@ -110,10 +110,10 @@
 1、乙方所借用的乐器为甲方资产,乐器所有权归属甲方所有,甲方有权在必要时向乙方收回借用乐器并退还押金。<br/>
 2、甲方所提供乐器为全新的KEY品牌乐器。在乙方签订本协议、交纳乐器使用押金后,甲方即将乐器交付给乙方供其在学校乐团期间免费使用。<br/>
         3、乙方归还乐器时,双方当面当场验收,经甲方维修技师检验确认乐器无人为损坏、可正常使用后,甲方在七个工作日内全额不计息退还乙方已交纳的押金。<br/>
-        4、如乙方已购买甲方乐器保养服务,甲方需在乙方借用期间协助乙方处理乐器维修和保养问题。
+        4、如乙方已购买甲方乐器维护服务,甲方需在乙方借用期间协助乙方处理乐器维修和保养问题。
         <h2>二、乙方权利与义务:</h2>
         1、乙方在签订本协议、交纳乐器使用押金¥${depositFee?string("0.00")}元(大写人民币${depositFeeFmt})后,享有所借用乐器在学校乐团期间的免费使用权。乙方应当爱惜乐器并妥善保管,不得将该乐器转租、借用、出售、典当、质押或抵押,也不得将乐器交于非专业人士使用。乐器借用政策,每位团员仅可享受一次,退团后再次加入乐团的,将无法享受乐器借用政策。<br/>
-        2、乐器日常维护由乙方自行完成,每次练习完毕后需按老师要求对乐器进行擦拭并装箱保管。如因人为原因(包括但不限于磕、碰、摔等)造成乐器损坏的,乙方需自行承担维修费用;如因非甲方原因导致乐器无法正常使用(正常使用磨损除外)或乐器毁损、灭失、遗失的,乙方须按本协议中明示的乐器团购价格进行赔付。<br/>
+        2、乐器日常维护由乙方自行完成,每次练习完毕后需按老师要求对乐器进行擦拭并装箱保管。如因人为原因(包括但不限于磕、碰、摔等)造成乐器损坏的,乙方需自行承担维修费用;如因非甲方原因导致乐器无法正常使用(正常使用磨损除外)或乐器毁损、灭失、遗失的,乙方须按本协议中明示的乐器价格进行赔付。<br/>
         3、当乙方决定不再继续乐团学习时,应在退团之日起1日内将其借用的乐器归还甲方,双方当面当场验收,经甲方维修技师检验确认乐器无人为损坏、可正常使用后,乙方可按照本协议约定获得已交纳的押金;经甲方维修技师检验,乐器存在损坏的,乙方应承担相应的维修费用,如乐器已经无法正常使用的,乙方须按本协议中明示的乐器团购价格进行赔付,甲方有权从应退还乙方的押金中先行扣除维修费用、赔付费用,如甲方扣除押金后仍然不足以弥补维修费用、赔付费用的,甲方有权继续要求乙方支付剩余费用。<br/>
         4、乙方终止乐团学习2个月内,仍未将乐器归还给甲方的,则视为乙方违约,乙方所交押金甲方有权不予退还,同时乙方须按乐器团购价格进行赔付。
         <h2>三、乐器标准:</h2> 
@@ -123,7 +123,7 @@
         </div>
         <div class="iInfo">
             <span>型号:<#if (goodsList?size > 0)> ${goodsList[0].specification} </#if></span>
-            <span>团购价格:<#if (goodsList?size > 0)> ${goodsList[0].groupPurchasePrice?string("0.00")}元 </#if></span>
+            <span>乐器价格:<#if (goodsList?size > 0)> ${goodsList[0].groupPurchasePrice?string("0.00")}元 </#if></span>
         </div>
 
         <h2>四、违约责任</h2>  

+ 17 - 2
mec-biz/src/main/resources/config/mybatis/ClassGroupMapper.xml

@@ -928,13 +928,13 @@
         <where>
             <if test="search != null">
                 AND (cg.name_ LIKE CONCAT('%',#{search},'%') OR cg.id_ = #{search}
-                <if test="groups != null">
+                <if test="groups != null and organIdList==null">
                     OR cg.music_group_id_ IN
                     <foreach collection="groups" item="group" open="(" close=")" separator=",">
                         #{group.id}
                     </foreach>
                 </if>
-                <if test="classGroupIds != null">
+                <if test="classGroupIds != null and organIdList==null">
                     OR cg.id_ IN
                     <foreach collection="classGroupIds" item="classGroupId" open="(" close=")" separator=",">
                         #{classGroupId}
@@ -942,6 +942,18 @@
                 </if>
                 )
             </if>
+            <if test="groups != null and organIdList!=null">
+                AND cg.music_group_id_ IN
+                <foreach collection="groups" item="group" open="(" close=")" separator=",">
+                    #{group.id}
+                </foreach>
+            </if>
+            <if test="classGroupIds != null and organIdList!=null">
+                AND cg.id_ IN
+                <foreach collection="classGroupIds" item="classGroupId" open="(" close=")" separator=",">
+                    #{classGroupId}
+                </foreach>
+            </if>
             <if test="groupType != null">
                 AND cg.group_type_=#{groupType, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
             </if>
@@ -951,6 +963,9 @@
             <if test="classGroupId != null">
                 AND cg.id_=#{classGroupId}
             </if>
+            <if test="classGroupType!=null">
+                AND cg.type_=#{classGroupType, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
+            </if>
         </where>
     </sql>
     <select id="superFindClassGroups" resultMap="SuperClassGroupInfo">

+ 16 - 0
mec-biz/src/main/resources/config/mybatis/ClassGroupTeacherMapperMapper.xml

@@ -17,6 +17,10 @@
         <result column="update_time_" property="updateTime"/>
     </resultMap>
 
+    <resultMap id="ClassGroupTeacherMapDto" type="com.ym.mec.biz.dal.dto.ClassGroupTeacherMapDto" extends="ClassGroupTeacherMapper">
+        <result column="username_" property="userName"/>
+    </resultMap>
+
     <!-- 根据主键查询一条记录 -->
     <select id="get" resultMap="ClassGroupTeacherMapper">
         SELECT *
@@ -153,6 +157,18 @@
     <select id="findByClassGroup" resultMap="ClassGroupTeacherMapper">
         SELECT * FROM class_group_teacher_mapper WHERE class_group_id_=#{classGroupId}
     </select>
+    <select id="findByClassGroupIds" resultMap="ClassGroupTeacherMapDto">
+        SELECT
+            cgtm.*,
+            su.real_name_ username_
+        FROM
+            class_group_teacher_mapper cgtm
+            LEFT JOIN sys_user su ON cgtm.user_id_ = su.id_
+        WHERE cgtm.class_group_id_ IN
+        <foreach collection="classGroupIds" item="classGroupId" open="(" close=")" separator=",">
+            #{classGroupId}
+        </foreach>
+    </select>
 
     <!-- 删除对应班级老师关联关系 -->
     <delete id="delClassGroupTeacherMapper">

+ 35 - 5
mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml

@@ -1272,7 +1272,7 @@
         SELECT DISTINCT cgsm.music_group_id_ FROM class_group_student_mapper cgsm
         LEFT JOIN music_group mg ON mg.id_ = cgsm.music_group_id_ AND cgsm.group_type_ = 'MUSIC'
         LEFT JOIN vip_group vg ON vg.id_ = cgsm.music_group_id_ AND cgsm.group_type_ = 'VIP'
-        WHERE cgsm.user_id_ = #{userId} AND cgsm.status_ != 'QUIT' AND (mg.status_ = 'PROGRESS' OR vg.status_ = 2 OR vg.status_=5)
+        WHERE cgsm.user_id_ = #{userId} AND cgsm.status_ != 'QUIT' AND (mg.status_ = 'PROGRESS' OR vg.status_ = 2 OR vg.status_=5 OR vg.status_=1)
         ORDER BY cgsm.music_group_id_
         <include refid="global.limit"/>
     </select>
@@ -1288,7 +1288,7 @@
         LEFT JOIN class_group cg ON cgsm.class_group_id_ = cg.id_
         WHERE spo.type_ != 'OTHER' AND spo.music_group_id_ IS NOT NULL
         AND spo.user_id_ = #{userId} AND spo.status_='SUCCESS' AND cgsm.status_ != 'QUIT'
-        AND IF(spo.group_type_ = 'VIP', (vg.status_ = 4 OR vg.status_ = 3),0)=0 AND cg.del_flag_ = 0
+        AND IF(spo.group_type_ = 'VIP', (vg.status_ = 4 OR vg.status_ = 3 ),0)=0 AND cg.del_flag_ = 0
         <include refid="global.limit"/>
     </select>
 
@@ -1855,13 +1855,13 @@
         <where>
             <if test="search != null">
                 AND (cs.name_ LIKE CONCAT('%',#{search},'%') OR cs.id_ = #{search}
-                  <if test="groups != null">
+                  <if test="groups != null and organIdList==null">
                       OR cs.music_group_id_ IN
                       <foreach collection="groups" item="group" open="(" close=")" separator=",">
                           #{group.id}
                       </foreach>
                   </if>
-                  <if test="courseIds != null">
+                  <if test="courseIds != null and organIdList==null">
                     OR cs.id_ IN
                     <foreach collection="courseIds" item="courseId" open="(" close=")" separator=",">
                         #{courseId}
@@ -1869,6 +1869,18 @@
                   </if>
                 )
             </if>
+            <if test="groups != null and organIdList!=null">
+                AND cs.music_group_id_ IN
+                <foreach collection="groups" item="group" open="(" close=")" separator=",">
+                    #{group.id}
+                </foreach>
+            </if>
+            <if test="courseIds != null and organIdList!=null">
+                AND cs.id_ IN
+                <foreach collection="courseIds" item="courseId" open="(" close=")" separator=",">
+                    #{courseId}
+                </foreach>
+            </if>
             <if test="groupType != null">
                 AND cs.group_type_=#{groupType, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
             </if>
@@ -1878,6 +1890,21 @@
             <if test="classGroupId != null">
                 AND cs.class_group_id_=#{classGroupId}
             </if>
+            <if test="startTime!=null and endTime==null">
+                AND CONCAT(cs.class_date_,' ',cs.start_class_time_) &gt; #{startTime}
+            </if>
+            <if test="startTime==null and endTime!=null">
+                AND CONCAT(cs.class_date_,' ',cs.start_class_time_) &lt; #{endTime}
+            </if>
+            <if test="startTime!=null and endTime!=null">
+                AND CONCAT(cs.class_date_,' ',cs.start_class_time_) BETWEEN #{startTime} AND #{endTime}
+            </if>
+            <if test="courseStatus!=null">
+                AND cs.status_ = #{courseStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
+            </if>
+            <if test="courseType!=null">
+                AND cs.type_ = #{courseType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
+            </if>
         </where>
     </sql>
 
@@ -1894,10 +1921,13 @@
             cs.actual_teacher_id_,
             cs.teach_mode_,
             cs.type_,
-            cs.schoole_id_
+            cs.schoole_id_,
+            cg.name_ class_group_name_,
+            s.name_ schoole_name_
         FROM
           course_schedule cs
           LEFT JOIN class_group cg ON cg.id_=cs.class_group_id_
+          LEFT JOIN school s ON cs.schoole_id_=s.id_
         <include refid="endFindCourseSchedulesCondition"/>
           ORDER BY course_start_time_
         <include refid="global.limit"/>

+ 29 - 4
mec-biz/src/main/resources/config/mybatis/GroupMapper.xml

@@ -7,17 +7,40 @@
 <mapper namespace="com.ym.mec.biz.dal.dao.GroupDao">
 
     <resultMap type="com.ym.mec.biz.dal.entity.Group" id="Group">
+        <result column="organ_id_" property="organId"/>
+        <result column="organ_name_" property="organName"/>
         <result column="id_" property="id"/>
         <result column="group_name_" property="groupName"/>
         <result column="group_type_" property="groupType" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
     </resultMap>
 
+    <sql id="searchGroupsCondition">
+        <where>
+            <if test="search!=null">
+                AND g.id_ = #{search} OR g.name_ LIKE CONCAT( '%', #{search}, '%' )
+            </if>
+            <if test="organIdList!=null">
+                AND FIND_IN_SET(g.organ_id_,#{organIdList})
+            </if>
+        </where>
+    </sql>
+
     <select id="searchGroups" resultMap="Group">
-        ( SELECT id_, name_ group_name_, 'MUSIC' group_type_ FROM music_group WHERE id_ = #{search} OR name_ LIKE CONCAT( '%', #{search}, '%' ) ) UNION
-        ( SELECT id_, name_ group_name_, 'VIP' group_type_ FROM vip_group WHERE id_ = #{search} OR name_ LIKE CONCAT( '%', #{search}, '%' ) );
+        ( SELECT o.id_ organ_id_,o.name_ organ_name_,g.id_, g.name_ group_name_, 'MUSIC' group_type_
+        FROM music_group g
+        LEFT JOIN organization o ON g.organ_id_ = o.id_
+        <include refid="searchGroupsCondition"/> )
+        UNION
+        ( SELECT o.id_ organ_id_,o.name_ organ_name_,g.id_, g.name_ group_name_, 'VIP' group_type_
+        FROM vip_group g
+        LEFT JOIN organization o ON g.organ_id_ = o.id_
+        <include refid="searchGroupsCondition"/> );
     </select>
     <select id="findByGroupIds" resultMap="Group">
-      ( SELECT id_, name_ group_name_, 'MUSIC' group_type_ FROM music_group WHERE id_ IN
+      ( SELECT o.id_ organ_id_,o.name_ organ_name_,g.id_, g.name_ group_name_, 'MUSIC' group_type_
+        FROM music_group g
+        LEFT JOIN organization o ON g.organ_id_ = o.id_
+        WHERE g.id_ IN
         <foreach collection="groups" item="group" open="(" close=")" separator=",">
             <if test="group != null and group.groupType == @com.ym.mec.biz.dal.enums.GroupType@MUSIC">
                 #{group.id}
@@ -28,7 +51,9 @@
         </foreach>
       )
       UNION
-      ( SELECT id_, name_ group_name_, 'VIP' group_type_ FROM vip_group WHERE id_ IN
+      ( SELECT o.id_ organ_id_,o.name_ organ_name_,g.id_, g.name_ group_name_, 'VIP' group_type_
+      FROM vip_group g LEFT JOIN organization o ON g.organ_id_ = o.id_
+      WHERE g.id_ IN
         <foreach collection="groups" item="group" open="(" close=")" separator=",">
             <if test="group != null and group.groupType == @com.ym.mec.biz.dal.enums.GroupType@VIP">
                 #{group.id}

+ 31 - 39
mec-biz/src/main/resources/config/mybatis/MusicGroupStudentFeeMapper.xml

@@ -36,8 +36,8 @@
     <!-- 向数据库增加一条记录 -->
     <insert id="insert" parameterType="com.ym.mec.biz.dal.entity.MusicGroupStudentFee" useGeneratedKeys="true"
             keyColumn="id" keyProperty="id">
-		INSERT INTO music_group_student_fee_ (id_,music_group_id_,user_id_,course_fee_,create_time_,update_time_,next_payment_date_,latest_paid_time_,continuous_absenteeism_times_,subject_id_,payment_status_,temporary_course_fee_,is_lock_,payment_period_list_)
-		VALUES(#{id},#{musicGroupId},#{userId},#{courseFee},now(),now(),#{nextPaymentDate},#{latestPaidTime},#{continuousAbsenteeismTimes},#{subjectId},#{paymentStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{temporaryCourseFee},#{isLock},#{paymentPeriodList})
+		INSERT INTO music_group_student_fee_ (id_,music_group_id_,user_id_,course_fee_,create_time_,update_time_,next_payment_date_,latest_paid_time_,continuous_absenteeism_times_,subject_id_,payment_status_,temporary_course_fee_,payment_period_list_)
+		VALUES(#{id},#{musicGroupId},#{userId},#{courseFee},now(),now(),#{nextPaymentDate},#{latestPaidTime},#{continuousAbsenteeismTimes},#{subjectId},#{paymentStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{temporaryCourseFee},#{paymentPeriodList})
 	</insert>
 
     <insert id="batchInsert" parameterType="com.ym.mec.biz.dal.entity.MusicGroupStudentFee">
@@ -165,6 +165,7 @@
     <select id="countStudentNoPayNum" resultType="java.lang.Integer">
         SELECT COUNT(DISTINCT sr.id_) FROM student_registration sr LEFT JOIN music_group_student_fee_ sf ON sr.user_id_ = sf.user_id_
         WHERE sr.music_group_id_ = #{musicGroupId} AND sr.music_group_status_ != 'QUIT' AND sf.payment_status_ != 'PAID_COMPLETED'
+        AND sr.music_group_id_ = sf.music_group_id_
     </select>
 
     <select id="findContinuousAbsenteeismTimesByUsersAndMusicGroup" resultType="map">
@@ -196,41 +197,12 @@
     <update id="batchUpdate" parameterType="java.util.List">
     	<foreach collection="list" item="item" index="index" open="" close="" separator=";">
         UPDATE music_group_student_fee_
-        <set>
-            <if test="item.userId != null">
-                user_id_ = #{item.userId},
-            </if>
-            <if test="item.subjectId != null">
-                subject_id_ = #{item.subjectId},
-            </if>
-            <if test="item.updateTime != null">
-                update_time_ = #{item.updateTime},
-            </if>
-            <if test="item.courseFee != null">
-                course_fee_ = #{item.courseFee},
-            </if>
-            <if test="item.musicGroupId != null">
-                music_group_id_ = #{item.musicGroupId},
-            </if>
-            <if test="item.nextPaymentDate != null">
-                next_payment_date_ = #{item.nextPaymentDate},
-            </if>
-            <if test="item.latestPaidTime != null">
-                latest_paid_time_ = #{item.latestPaidTime},
-            </if>
-            <if test="item.continuousAbsenteeismTimes != null">
-                continuous_absenteeism_times_ = #{item.continuousAbsenteeismTimes},
-            </if>
-            <if test="item.paymentStatus != null">
-                payment_status_ = #{item.paymentStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
-            </if>
-            <if test="item.temporaryCourseFee != null">
-                temporary_course_fee_ = #{item.temporaryCourseFee},
-            </if>
-            <if test="item.paymentPeriodList != null">
-                payment_period_list_ = #{item.paymentPeriodList},
-            </if>
-        </set>
+        SET update_time_ = NOW(),payment_period_list_ = #{item.paymentPeriodList},
+            next_payment_date_ = #{item.nextPaymentDate},subject_id_ = #{item.subjectId},
+            course_fee_ = #{item.courseFee},latest_paid_time_ = #{item.latestPaidTime},
+            continuous_absenteeism_times_ = #{item.continuousAbsenteeismTimes},
+            payment_status_ = #{item.paymentStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+            temporary_course_fee_ = #{item.temporaryCourseFee}
         WHERE id_ = #{item.id}
         </foreach>
     </update>
@@ -240,7 +212,27 @@
     </update>
     <update id="updateStudentFee">
         UPDATE music_group_student_fee_
-        SET course_fee_ = #{courseFee},is_lock_ = #{isLock},payment_period_list_ = #{paymentPeriodList}
-        WHERE music_group_id_ = #{musicGroupId} AND user_id_ = #{userId}
+        SET course_fee_ = #{fee.amount},payment_period_list_ = #{fee.month},update_time_ = NOW()
+        WHERE music_group_id_ = #{fee.musicGroupId} AND user_id_ = #{fee.studentId}
+    </update>
+    <update id="updateStudentFeeIsLock">
+        UPDATE music_group_student_fee_
+        SET is_lock_ = #{fee.isLock},update_time_ = NOW()
+        WHERE music_group_id_ = #{fee.musicGroupId} AND user_id_ = #{fee.studentId}
+    </update>
+    <update id="batchUpdateCalender">
+        UPDATE music_group_student_fee_
+        SET payment_period_list_ = #{month},update_time_ = NOW()
+        WHERE music_group_id_ = #{musicGroupId} AND is_lock_ = 0
+    </update>
+    <update id="batchUpdateCalenders">
+        UPDATE music_group_student_fee_ mgsf SET mgsf.payment_period_list_ = (
+        SELECT GROUP_CONCAT(mgpc.payment_month_) FROM music_group_payment_calender mgpc WHERE mgpc.music_group_id_ = mgsf.music_group_id_)
+        WHERE mgsf.music_group_id_ = #{musicGroupId}
+    </update>
+    <update id="updateCalender">
+        UPDATE music_group_student_fee_ mgsf SET mgsf.payment_period_list_ = (
+        SELECT GROUP_CONCAT(mgpc.payment_month_) FROM music_group_payment_calender mgpc WHERE mgpc.music_group_id_ = mgsf.music_group_id_)
+        WHERE mgsf.music_group_id_ = #{musicGroupId} AND mgsf.user_id_ = #{userId}
     </update>
 </mapper>

+ 4 - 0
mec-biz/src/main/resources/config/mybatis/SchoolMapper.xml

@@ -141,4 +141,8 @@
         AND ((FIND_IN_SET(organ_id_,#{organId}) and user_id_ is NULL) or user_id_ = #{userId})
         </if>
     </select>
+    <select id="findVipSchoolByUserId2" resultMap="School">
+        SELECT * FROM school WHERE del_flag_ != 1
+            AND FIND_IN_SET(organ_id_,#{organId}) AND user_id_ = #{userId}
+    </select>
 </mapper>

+ 10 - 2
mec-biz/src/main/resources/config/mybatis/SporadicChargeInfo.xml

@@ -9,6 +9,7 @@
 		<result column="charge_type_" property="chargeType"/>
 		<result column="organ_id_" property="organId"/>
 		<result column="amount_" property="amount" />
+		<result column="discount_amount_" property="discountAmount" />
 		<result column="detail_" property="detail" />
 		<result column="create_time_" property="createTime" />
 		<result column="update_time_" property="updateTime" />
@@ -32,8 +33,8 @@
 	<insert id="insert" parameterType="com.ym.mec.biz.dal.entity.SporadicChargeInfo"
 		useGeneratedKeys="true" keyColumn="id" keyProperty="id">
 		INSERT INTO sporadic_charge_info
-		(title_,charge_type_,organ_id_,amount_,detail_,create_time_,update_time_,operator_id_,user_id_)
-		VALUES(#{title},#{chargeType},#{organId},#{amount},#{detail},now(),now(),#{operatorId},#{userId})
+		(title_,charge_type_,organ_id_,amount_,discount_amount_,detail_,create_time_,update_time_,operator_id_,user_id_)
+		VALUES(#{title},#{chargeType},#{organId},#{amount},#{discountAmount},#{detail},now(),now(),#{operatorId},#{userId})
 	</insert>
 
 	<!-- 根据主键查询一条记录 -->
@@ -52,6 +53,9 @@
 			<if test="amount != null">
 				amount_ = #{amount},
 			</if>
+			<if test="discountAmount != null">
+				discount_amount_ = #{discountAmount},
+			</if>
 			<if test="detail != null">
 				detail_ = #{detail},
 			</if>
@@ -112,4 +116,8 @@
 	<select id="findInfoById" resultMap="SporadicChargeInfo">
 		SELECT * FROM sporadic_charge_info where id_ = #{id}
 	</select>
+	<!-- 根据类型和分部id查询活动 -->
+	<select id="findByOrganIdAndType" resultMap="SporadicChargeInfo">
+		SELECT * FROM sporadic_charge_info where organ_id_=#{organId} AND charge_type_=#{chargeType} AND del_flag_=0
+	</select>
 </mapper>

+ 11 - 7
mec-biz/src/main/resources/config/mybatis/StudentManageDao.xml

@@ -380,6 +380,9 @@
             <if test="paymentStatus != null">
                 AND mgsf.payment_status_ = #{paymentStatus}
             </if>
+            <if test="isLock != null">
+                AND mgsf.is_lock_ = #{isLock}
+            </if>
             <if test="musicGroupId != null and musicGroupId != ''">
                 AND sr.music_group_id_ = #{musicGroupId}
             </if>
@@ -406,11 +409,13 @@
         <result property="courseFee" column="course_fee_"/>
         <result property="nextPaymentDate" column="next_payment_date_"/>
         <result property="isActive" column="isActive_"/>
+        <result property="isLock" column="is_lock_"/>
+        <result property="paymentPeriodList" column="payment_period_list_"/>
     </resultMap>
     <select id="queryMusicGroupStudent" resultMap="MusicGroupStudentsDto">
         SELECT sr.user_id_,su.username_ real_name_,su.gender_,su.phone_ parents_phone_,sr.current_grade_,mgsf.payment_status_,
-        sr.current_class_,sr.music_group_status_,mgsf.next_payment_date_,mgsf.course_fee_,
-        s.name_ subject_name_,sr.music_group_id_,case when su.password_ is null then 0 else 1 end isActive_,
+        sr.current_class_,sr.music_group_status_,mgsf.next_payment_date_,mgsf.course_fee_,mgsf.payment_period_list_,
+        s.name_ subject_name_,sr.music_group_id_,case when su.password_ is null then 0 else 1 end isActive_,mgsf.is_lock_,
         IF(DATE_FORMAT(sr.create_time_,'%Y-%m-%d') > DATE_FORMAT(mg.payment_expire_date_,'%Y-%m-%d'),1,0) is_new_student_
         FROM student_registration sr
         LEFT JOIN sys_user su ON sr.user_id_ = su.id_
@@ -513,20 +518,20 @@
         <result property="totalClassTimes" column="total_class_times_"/>
     </resultMap>
     <select id="findStudentVipGroupClass" resultMap="StudentManageVipGroupClassDto">
-        SELECT vg.id_,vg.name_ vip_group_name_,vg.status_,cgtm.user_id_,cg.student_num_,
+        SELECT vg.id_,vg.name_ vip_group_name_,vg.status_,vg.user_id_,cg.student_num_,
         vgc.name_,vg.courses_start_date,cg.current_class_times_,cg.total_class_times_
         FROM class_group_student_mapper cgsm
         LEFT JOIN class_group cg ON cgsm.class_group_id_ = cg.id_
         LEFT JOIN vip_group vg ON cg.music_group_id_ = vg.id_
-        LEFT JOIN class_group_teacher_mapper cgtm ON cgtm.class_group_id_ = cg.id_
         LEFT JOIN vip_group_activity vgc ON vgc.id_ = vg.vip_group_activity_id_
-        WHERE cg.group_type_ = 'VIP' AND cgtm.teacher_role_ = 'BISHOP' AND cgsm.user_id_ = #{studentId} AND vg.status_ != 3
+        WHERE cg.group_type_ = 'VIP' AND cgsm.user_id_ = #{studentId} AND vg.status_ != 3
         <if test="vipGroupName != null">
             AND vg.name_ LIKE CONCAT('%',#{vipGroupName},'%')
         </if>
         <if test="vipGroupStatus != null">
             AND vg.status_ = #{vipGroupStatus}
         </if>
+        ORDER BY vg.create_time_ DESC
         <include refid="global.limit"/>
     </select>
     <select id="countStudentVipGroupClass" resultType="java.lang.Integer">
@@ -534,8 +539,7 @@
         FROM class_group_student_mapper cgsm
         LEFT JOIN class_group cg ON cgsm.class_group_id_ = cg.id_
         LEFT JOIN vip_group vg ON cg.music_group_id_ = vg.id_
-        LEFT JOIN class_group_teacher_mapper cgtm ON cgtm.class_group_id_ = cg.id_
-        WHERE cg.group_type_ = 'VIP' AND cgtm.teacher_role_ = 'BISHOP' AND cgsm.user_id_ = #{studentId} AND vg.status_ != 3
+        WHERE cg.group_type_ = 'VIP' AND cgsm.user_id_ = #{studentId} AND vg.status_ != 3
         <if test="vipGroupName != null">
             AND vg.name_ LIKE CONCAT('%',#{vipGroupName},'%')
         </if>

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

@@ -247,6 +247,7 @@
         AND spo.music_group_id_=#{musicGroupId}
         AND spo.status_=#{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
         AND spo.group_type_ = #{groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
+        and spo.type_ = #{type,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
     </select>
     <select id="findByStudentVipGroup" resultMap="StudentPaymentOrder">
         SELECT
@@ -372,6 +373,7 @@
         FROM student_payment_order
         WHERE group_type_ = #{groupType}
           AND music_group_id_ = #{musicGroupId}
+          AND status_='SUCCESS'
     </select>
     <select id="findStudentPaymentOrder" resultMap="StudentPaymentOrder">
         SELECT *

+ 6 - 1
mec-biz/src/main/resources/config/mybatis/VipGroupActivityMapper.xml

@@ -21,6 +21,7 @@
 		<result column="attribute2_" property="attribute2" />
 		<result column="attribute3_" property="attribute3" />
 		<result column="salary_readonly_flag_" property="salaryReadonlyFlag" />
+		<result column="payment_readonly_flag_" property="paymentReadonlyFlag" />
 		<result column="give_class_pay_salary_flag_" property="giveClassPaySalaryFlag" />
 		<result column="create_time_" property="createTime" />
 		<result column="update_time_" property="updateTime" />
@@ -47,7 +48,8 @@
 		SELECT SEQ_WSDEFINITION_ID.nextval AS ID FROM DUAL 
 		</selectKey>
 		-->
-		INSERT INTO vip_group_activity (id_,name_,description_,vip_group_category_id_list_,start_time_,end_time_,organ_id_,courses_start_time_,courses_end_time_,type_,attribute1_,attribute2_,attribute3_,salary_readonly_flag_,give_class_pay_salary_flag_,create_time_,update_time_,salary_settlement_json_,del_flag_) VALUES(#{id},#{name},#{description},#{vipGroupCategoryIdList},#{startTime},#{endTime},#{organId},#{coursesStartTime},#{coursesEndTime},#{type},#{attribute1},#{attribute2},#{attribute3},#{salaryReadonlyFlag},#{giveClassPaySalaryFlag},now(),now(),#{salarySettlementJson},#{delFlag})
+		INSERT INTO vip_group_activity (id_,name_,description_,vip_group_category_id_list_,start_time_,end_time_,organ_id_,courses_start_time_,courses_end_time_,type_,attribute1_,attribute2_,attribute3_,salary_readonly_flag_,give_class_pay_salary_flag_,create_time_,update_time_,salary_settlement_json_,del_flag_,payment_readonly_flag_)
+		VALUES(#{id},#{name},#{description},#{vipGroupCategoryIdList},#{startTime},#{endTime},#{organId},#{coursesStartTime},#{coursesEndTime},#{type},#{attribute1},#{attribute2},#{attribute3},#{salaryReadonlyFlag},#{giveClassPaySalaryFlag},now(),now(),#{salarySettlementJson},#{delFlag},#{paymentReadonlyFlag})
 	</insert>
 	
 	<!-- 根据主键查询一条记录 -->
@@ -110,6 +112,9 @@
 			<if test="delFlag != null">
 			del_flag_ = #{delFlag},
 			</if>
+			<if test="paymentReadonlyFlag != null">
+				payment_readonly_flag_ = #{paymentReadonlyFlag},
+			</if>
 			</set> WHERE id_ = #{id}
 	</update>
 	

+ 4 - 1
mec-gateway/mec-gateway-web/src/main/resources/application.yml

@@ -19,7 +19,10 @@ spring:
 
   servlet:
     multipart:
-      max-file-size: 10MB
+      # 最大支持文件大小
+      max-file-size: 50MB
+      # 最大支持请求大小
+      max-request-size: 50MB
 
 eureka:
   client:

+ 17 - 2
mec-student/src/main/java/com/ym/mec/student/controller/MusicGroupController.java

@@ -7,21 +7,27 @@ import com.ym.mec.biz.dal.dto.RegisterPayDto;
 import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.entity.MusicGroupStudentFee.PaymentStatus;
 import com.ym.mec.biz.dal.enums.DealStatusEnum;
+import com.ym.mec.biz.dal.enums.GroupType;
+import com.ym.mec.biz.dal.enums.OrderTypeEnum;
 import com.ym.mec.biz.dal.enums.PaymentStatusEnum;
 import com.ym.mec.biz.service.*;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.exception.BizException;
+
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
+
 import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.ui.ModelMap;
 import org.springframework.web.bind.annotation.*;
+
 import javax.annotation.Resource;
+
 import java.math.BigDecimal;
 import java.util.HashMap;
 import java.util.List;
@@ -123,6 +129,7 @@ public class MusicGroupController extends BaseController {
         if (!studentRegistration.getPaymentStatus().equals(PaymentStatusEnum.OPEN)) {
             return failed("乐团还未开启缴费,请等待通知");
         }
+        studentRegistration.setOwnershipType(musicGroup.getOwnershipType());
 
         return succeed(studentRegistration);
     }
@@ -171,13 +178,21 @@ public class MusicGroupController extends BaseController {
 	@GetMapping("/renew")
 	@ApiImplicitParams({ @ApiImplicitParam(name = "musicGroupId", value = "乐团id", required = true, dataType = "String"),
 			@ApiImplicitParam(name = "isUseBalancePayment", value = "是否使用余额付款", required = true, dataType = "Boolean") })
-	public HttpResponseResult renew(String musicGroupId, Boolean isUseBalancePayment) throws Exception {
+	public HttpResponseResult renew(String musicGroupId, Boolean isUseBalancePayment, boolean isRepeatPay) throws Exception {
 		SysUser sysUser = sysUserFeignService.queryUserInfo();
 		Integer userId = sysUser.getId();
-		
+
 		if (isUseBalancePayment == null) {
 			isUseBalancePayment = false;
 		}
+		if (isRepeatPay == false) {
+            // 判断是否存在支付中的记录
+            List<StudentPaymentOrder> list = studentPaymentOrderService.queryByCondition(GroupType.MUSIC, musicGroupId, userId, DealStatusEnum.ING,
+                    OrderTypeEnum.RENEW);
+			if (list.size() > 0) {
+				return failed(HttpStatus.CONTINUE, "您有待支付的订单");
+			}
+		}
 		return succeed(musicGroupService.renew(musicGroupId, userId, isUseBalancePayment));
 	}
 

+ 62 - 34
mec-student/src/main/java/com/ym/mec/student/controller/SporadicChargeInfoController.java

@@ -5,8 +5,11 @@ import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.SysUserCashAccountDao;
 import com.ym.mec.biz.dal.dto.SporadicPayDto;
 import com.ym.mec.biz.dal.entity.SporadicChargeInfo;
+import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
 import com.ym.mec.biz.dal.entity.SysUserCashAccount;
 import com.ym.mec.biz.dal.enums.DealStatusEnum;
+import com.ym.mec.biz.dal.enums.GroupType;
+import com.ym.mec.biz.dal.enums.OrderTypeEnum;
 import com.ym.mec.biz.service.MusicGroupService;
 import com.ym.mec.biz.service.SporadicChargeInfoService;
 import com.ym.mec.biz.service.StudentPaymentOrderService;
@@ -15,9 +18,12 @@ import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.exception.BizException;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import org.apache.poi.util.Internal;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
 import java.util.Map;
 
 @RequestMapping("sporadicChargeInfo")
@@ -25,36 +31,36 @@ import java.util.Map;
 @RestController
 public class SporadicChargeInfoController extends BaseController {
 
-	@Autowired
-	private SporadicChargeInfoService sporadicChargeInfoService;
-	@Autowired
-	private SysUserFeignService sysUserFeignService;
-	@Autowired
-	private SysUserCashAccountDao sysUserCashAccountDao;
-	@Autowired
-	private StudentPaymentOrderService studentPaymentOrderService;
-	@Autowired
-	private MusicGroupService musicGroupService;
+    @Autowired
+    private SporadicChargeInfoService sporadicChargeInfoService;
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+    @Autowired
+    private SysUserCashAccountDao sysUserCashAccountDao;
+    @Autowired
+    private StudentPaymentOrderService studentPaymentOrderService;
+    @Autowired
+    private MusicGroupService musicGroupService;
 
-	@ApiOperation(value = "单查询")
-	@GetMapping("/get")
-	public Object get(Integer id,Integer userId) {
-		if(userId == null){
-			SysUser sysUser = sysUserFeignService.queryUserInfo();
-			if (sysUser == null || sysUser.getId() == null) {
-				return failed("用户不存在");
-			}
-			userId = sysUser.getId();
-		}
-		SporadicChargeInfo chargeInfo = sporadicChargeInfoService.get(id);
-		if(chargeInfo != null){
-			SysUserCashAccount locked = sysUserCashAccountDao.getLocked(userId);
-			chargeInfo.setBalance(locked.getBalance());
-		}else {
-			throw new BizException("信息不存在");
-		}
-		return succeed(chargeInfo);
-	}
+    @ApiOperation(value = "单查询")
+    @GetMapping("/get")
+    public Object get(Integer id, Integer userId) {
+        if (userId == null) {
+            SysUser sysUser = sysUserFeignService.queryUserInfo();
+            if (sysUser == null || sysUser.getId() == null) {
+                return failed("用户不存在");
+            }
+            userId = sysUser.getId();
+        }
+        SporadicChargeInfo chargeInfo = sporadicChargeInfoService.get(id);
+        if (chargeInfo != null) {
+            SysUserCashAccount locked = sysUserCashAccountDao.getLocked(userId);
+            chargeInfo.setBalance(locked.getBalance());
+        } else {
+            throw new BizException("信息不存在");
+        }
+        return succeed(chargeInfo);
+    }
 
 
 	@ApiOperation(value = "零星支付")
@@ -75,15 +81,37 @@ public class SporadicChargeInfoController extends BaseController {
 			}
 			sporadicPayDto.setUserId(sysUser.getId());
 		}
-		Integer ingOrder = studentPaymentOrderService.findOrderByGroupType(sporadicPayDto.getUserId(),sporadicPayDto.getSporadicId(),"SPORADIC", DealStatusEnum.ING);
-		if (ingOrder != null && ingOrder > 0){
-			return failed("您有支付中的订单");
-		}
+		if (sporadicPayDto.getIsRepeatPay() == false) {
+            Integer ingOrder = studentPaymentOrderService.findOrderByGroupType(sporadicPayDto.getUserId(), sporadicPayDto.getSporadicId(), "SPORADIC", DealStatusEnum.ING);
+            if (ingOrder != null && ingOrder > 0) {
+                return failed(HttpStatus.CONTINUE, "您有待支付的订单");
+            }
+        }
 		Map payMap = musicGroupService.sporadicPay(sporadicPayDto);
 		if(payMap.containsKey("tradeState")){
-			return failed(HttpStatus.CREATED, "恭喜您,购买成功!");
+			return failed(HttpStatus.CREATED, "恭喜您,支付成功!");
 		}
 		return succeed(payMap);
 	}
 
+
+    @ApiOperation(value = "福袋活动信息")
+    @RequestMapping("/activityInfo")
+    public HttpResponseResult activityInfo(Integer type) throws Exception {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null || sysUser.getId() == null) {
+            return failed("请先登录");
+        }
+        if (sysUser.getOrganId() == null || sysUser.getOrganId().isEmpty()) {
+            return failed("用户信息有误,没有分部信息");
+        }
+        Integer organId = Integer.parseInt(sysUser.getOrganId());
+
+        if (type == null || type <= 0) {
+            return failed("参数不合法");
+        }
+        SporadicChargeInfo chargeInfo = sporadicChargeInfoService.findByOrganIdAndType(organId, type);
+        return succeed(chargeInfo);
+    }
+
 }

+ 24 - 1
mec-student/src/main/java/com/ym/mec/student/controller/StudentVipGroupController.java

@@ -5,7 +5,12 @@ import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dto.ConditionDto;
 import com.ym.mec.biz.dal.dto.QueryConditionDto;
 import com.ym.mec.biz.dal.dto.VipGroupBuyParamsDto;
+import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
+import com.ym.mec.biz.dal.enums.DealStatusEnum;
+import com.ym.mec.biz.dal.enums.GroupType;
+import com.ym.mec.biz.dal.enums.OrderTypeEnum;
 import com.ym.mec.biz.dal.page.StudentVipGroupQueryInfo;
+import com.ym.mec.biz.service.StudentPaymentOrderService;
 import com.ym.mec.biz.service.SubjectService;
 import com.ym.mec.biz.service.VipGroupCategoryService;
 import com.ym.mec.biz.service.VipGroupService;
@@ -39,6 +44,8 @@ public class StudentVipGroupController extends BaseController {
     private SysUserFeignService sysUserFeignService;
     @Autowired
     private VipGroupCategoryService vipGroupCategoryService;
+    @Autowired
+    private StudentPaymentOrderService studentPaymentOrderService;
 
     @ApiOperation(value = "获取vip课列表筛选条件")
     @GetMapping(value = "/findQueryCondition")
@@ -81,13 +88,29 @@ public class StudentVipGroupController extends BaseController {
         if (null == sysUser) {
             return failed(HttpStatus.FORBIDDEN, "请登录");
         }
-        vipGroupService.enableBuyVipGroup(vipGroupId);
+        vipGroupService.enableBuyVipGroup(vipGroupId,sysUser.getId());
         return succeed();
     }
 
     @ApiOperation(value = "vip课购买")
     @PostMapping("/buyVipGroup")
     public Object buyVipGroup(VipGroupBuyParamsDto vipGroupBuyParams) throws Exception {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (null == sysUser) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        if(!vipGroupBuyParams.isRepeatPay()){
+            // 判断是否存在支付中的记录
+            List<StudentPaymentOrder> list = studentPaymentOrderService
+                    .queryByCondition(GroupType.VIP,
+                            vipGroupBuyParams.getVipGroupId().toString(),
+                            sysUser.getId(),
+                            DealStatusEnum.ING,
+                            OrderTypeEnum.SMALL_CLASS_TO_BUY);
+            if (list.size() > 0) {
+                return failed(HttpStatus.CONTINUE, "您有待支付的订单");
+            }
+        }
         return succeed(vipGroupService.buyVipGroup(vipGroupBuyParams));
     }
 

+ 4 - 1
mec-student/src/main/resources/application.yml

@@ -26,7 +26,10 @@ spring:
     
   servlet:
     multipart:
-      max-file-size: 5MB
+      # 最大支持文件大小
+      max-file-size: 50MB
+      # 最大支持请求大小
+      max-request-size: 50MB
     
   datasource:
     name: test

+ 22 - 0
mec-teacher/src/main/java/com/ym/mec/teacher/controller/TeacherCourseScheduleController.java

@@ -9,14 +9,17 @@ import com.ym.mec.biz.dal.entity.SysConfig;
 import com.ym.mec.biz.dal.enums.StudentAttendanceStatusEnum;
 import com.ym.mec.biz.dal.page.CourseHomeworkQueryInfo;
 import com.ym.mec.biz.dal.page.CourseScheduleQueryInfo;
+import com.ym.mec.biz.dal.page.EndCourseScheduleQueryInfo;
 import com.ym.mec.biz.dal.page.StudentAttendanceQueryInfo;
 import com.ym.mec.biz.service.CourseScheduleService;
 import com.ym.mec.biz.service.StudentAttendanceService;
 import com.ym.mec.biz.service.SysConfigService;
 import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.util.date.DateUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
+import org.apache.commons.lang3.time.DateUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.MediaType;
@@ -149,6 +152,19 @@ public class TeacherCourseScheduleController extends BaseController {
         if(Objects.isNull(classDateAdjustDto.getClassGroupId())){
             classDateAdjustDto.setClassGroupId(oldCourseSchedule.getClassGroupId());
         }
+        Date now=new Date();
+        if(DateUtils.isSameDay(now,oldCourseSchedule.getClassDate())){
+            return failed("不能调整今天的课程");
+        }
+        Date tomorrow = DateUtil.addDays1(now, 1);
+        if(DateUtils.isSameDay(tomorrow,oldCourseSchedule.getClassDate())){
+            Calendar calendar=Calendar.getInstance();
+            calendar.setTime(now);
+            System.out.println(calendar.get(Calendar.HOUR_OF_DAY));
+            if(calendar.get(Calendar.HOUR_OF_DAY)>22){
+                return failed("当前时间不可对此课程进行课程调整");
+            }
+        }
         List<CourseSchedule> courseSchedules=new ArrayList<>();
         courseSchedules.add(classDateAdjustDto);
         scheduleService.courseAdjust(courseSchedules);
@@ -177,4 +193,10 @@ public class TeacherCourseScheduleController extends BaseController {
         return succeed(studentAttendanceService.statisticsList(queryInfo));
     }
 
+    @ApiOperation(value = "终极课表获取")
+    @GetMapping("/superFindCourseSchedules")
+    public Object superFindCourseSchedules(EndCourseScheduleQueryInfo queryInfo){
+        return succeed(scheduleService.endFindCourseSchedules(queryInfo));
+    }
+
 }

+ 24 - 1
mec-teacher/src/main/java/com/ym/mec/teacher/controller/TeacherSchoolController.java

@@ -54,7 +54,11 @@ public class TeacherSchoolController extends BaseController {
     @ApiOperation(value = "删除学校")
     @PostMapping("/del")
     public Object del(@ApiParam(value = "学校编号", required = true) Integer id){
-        schoolService.delete(id);
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if(sysUser == null){
+            return failed(HttpStatus.FORBIDDEN,"请登录");
+        }
+        schoolService.deleteByTeacherAndId(id,sysUser.getId());
         return succeed();
     }
 
@@ -81,6 +85,25 @@ public class TeacherSchoolController extends BaseController {
 		if (StringUtils.isNoneBlank(teacher.getFlowOrganRange())) {
 			organIdList = organIdList + "," + teacher.getFlowOrganRange();
 		}
+        return succeed(schoolService.findVipSchoolByTeacher(sysUser.getId(),organIdList));
+    }
+
+    @ApiOperation(value = "获取教师vip课教学点")
+    @GetMapping("/findVipSchoolByTeacher2")
+    public Object findVipSchoolByTeacher2(Integer isDefault){
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if(sysUser == null){
+            return failed(HttpStatus.FORBIDDEN,"请登录");
+        }
+        Teacher teacher = teacherDao.get(sysUser.getId());
+        if(teacher == null){
+            return failed("非法访问");
+        }
+
+        String organIdList = teacher.getOrganId();
+        if (StringUtils.isNoneBlank(teacher.getFlowOrganRange())) {
+            organIdList = organIdList + "," + teacher.getFlowOrganRange();
+        }
         return succeed(schoolService.findVipSchoolByTeacher(sysUser.getId(),organIdList,isDefault));
     }
 }

+ 6 - 0
mec-web/src/main/java/com/ym/mec/web/controller/SporadicChargeInfoController.java

@@ -86,6 +86,12 @@ public class SporadicChargeInfoController extends BaseController {
 			}
 			sporadicChargeInfo.setOrganId(user.getOrganId());
 		}
+		if(sporadicChargeInfo.getChargeType().equals("6")){
+			SporadicChargeInfo info = sporadicChargeInfoService.findByOrganIdAndType(sporadicChargeInfo.getOrganId(), Integer.parseInt(sporadicChargeInfo.getChargeType()));
+			if(info != null){
+				return failed("分部活动已存在,请勿重复创建");
+			}
+		}
 		return succeed(sporadicChargeInfoService.insert(sporadicChargeInfo));
 	}
 

+ 18 - 2
mec-web/src/main/java/com/ym/mec/web/controller/StudentManageController.java

@@ -190,9 +190,9 @@ public class StudentManageController extends BaseController {
      * 修改学员缴费金额和缴费周期
      * @return
      */
-    @GetMapping(value = "/updateStudentFee")
+    @PostMapping(value = "/updateStudentFee")
     @PreAuthorize("@pcs.hasPermissions('studentManage/updateStudentFee')")
-    public Object updateStudentFee(@RequestBody UpdateStudentFeeDto studentFeeDto) {
+    public Object updateStudentFee(UpdateStudentFeeDto studentFeeDto) {
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         if(sysUser == null){
             throw new BizException("用户信息获取失败");
@@ -203,6 +203,22 @@ public class StudentManageController extends BaseController {
     }
 
     /**
+     * 修改学员缴费周期锁定状态
+     * @return
+     */
+    @PostMapping(value = "/updateStudentFeeIsLock")
+    @PreAuthorize("@pcs.hasPermissions('studentManage/updateStudentFeeIsLock')")
+    public Object updateStudentFeeIsLock(UpdateStudentFeeDto studentFeeDto) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if(sysUser == null){
+            throw new BizException("用户信息获取失败");
+        }
+        LOGGER.info("修改学员缴费周期锁定状态,user:{},参数:{}",sysUser.getId(),studentFeeDto);
+        musicGroupStudentFeeService.updateStudentFeeIsLock(studentFeeDto);
+        return succeed();
+    }
+
+    /**
      * 获取学员缴费日历信息
      * @return
      */

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