Kaynağa Gözat

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

zouxuan 4 yıl önce
ebeveyn
işleme
fe3a49a9eb

+ 7 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleDao.java

@@ -1867,6 +1867,13 @@ public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {
 
     /**
      * 获取预排课程列表
+     * @param classGroupIds
+     * @return
+     */
+    int queryPreCourseListByClassGroupIds(List<Integer> classGroupIds);
+
+    /**
+     * 获取预排课程列表
      * @param classGroupId
      * @return
      */

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

@@ -5,6 +5,7 @@ import io.swagger.annotations.ApiModelProperty;
 import org.apache.commons.lang3.builder.ToStringBuilder;
 
 import java.math.BigDecimal;
+import java.util.Date;
 
 public class MusicMemberDto {
 
@@ -22,6 +23,16 @@ public class MusicMemberDto {
 
 	private BigDecimal cloudTeacherAmount;
 
+	private Date visitTime;
+
+	public Date getVisitTime() {
+		return visitTime;
+	}
+
+	public void setVisitTime(Date visitTime) {
+		this.visitTime = visitTime;
+	}
+
 	public BigDecimal getCloudTeacherAmount() {
 		return cloudTeacherAmount;
 	}

+ 13 - 4
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java

@@ -1418,8 +1418,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         //删除班级未开始课程
         List<CourseSchedule> courseScheduleList = courseScheduleService.findNoStartCoursesByClassGroupId(classGroupId);
         if (courseScheduleList.size() > 0) {
-            List<CourseSchedule> courseSchedules = courseScheduleDao.queryPreCourseListByClassGroupId(classGroupId);
-            if(courseSchedules.size() > 0){
+            if(courseScheduleDao.queryPreCourseListByClassGroupId(classGroupId).size() > 0){
                 throw new BizException("操作失败:该班级存在预排课程");
             }
             List<Long> courseScheduleIds = courseScheduleList.stream().map(courseSchedule -> courseSchedule.getId()).collect(Collectors.toList());
@@ -1445,8 +1444,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         //删除班级未开始课程
         List<CourseSchedule> courseScheduleList = courseScheduleService.findNoStartCoursesByClassGroupId(classGroupId);
         if (courseScheduleList.size() > 0) {
-            List<CourseSchedule> courseSchedules = courseScheduleDao.queryPreCourseListByClassGroupId(classGroupId);
-            if(courseSchedules.size() > 0){
+            if(courseScheduleDao.queryPreCourseListByClassGroupId(classGroupId).size() > 0){
                 throw new BizException("操作失败:该班级存在预排课程");
             }
             List<Long> courseScheduleIds = courseScheduleList.stream().map(courseSchedule -> courseSchedule.getId()).collect(Collectors.toList());
@@ -2763,6 +2761,9 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         if (classGroup == null) {
             throw new BizException("班级不存在");
         }
+        if (classGroup.getLockFlag() == 1) {
+            throw new BizException("当前班级已冻结无法操作预排课");
+        }
         MusicGroup musicGroup = musicGroupDao.get(classGroup.getMusicGroupId());
 
         Boolean confirmGenerate = false;
@@ -4497,6 +4498,10 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         MusicGroupPaymentCalenderDto paymentCalenderDto = mergeClassSplitClassAffirmDto.getMusicGroupPaymentCalenderDtos().get(0);
         //主班
         Integer masterClassGroupId = mergeClassSplitClassAffirmDto.getMasterClassGroupId();
+        //是否有预排课
+        if(courseScheduleDao.queryPreCourseListByClassGroupId(masterClassGroupId).size() > 0){
+            throw new BizException("操作失败: 所选主班有预排课课程,请先完成预排课操作");
+        }
         //学员列表
         List<Integer> studentIds = mergeClassSplitClassAffirmDto.getStudentIds();
         //主班是否包含所选学员列表
@@ -4506,6 +4511,10 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         }
         //学员列表
         List<Integer> classGroupIds = mergeClassSplitClassAffirmDto.getClassGroupIds();
+        //是否有预排课
+        if(courseScheduleDao.queryPreCourseListByClassGroupIds(classGroupIds) > 0){
+            throw new BizException("操作失败: 所选从班班有预排课课程,请先完成预排课操作");
+        }
         //班级和学员关联
         List<Map<Integer, String>> classGroupStudents = mergeClassSplitClassAffirmDto.getClassGroupStudents();
         //获取默认的学员缴费详情

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

@@ -463,7 +463,10 @@ public class ClassGroupStudentMapperServiceImpl extends BaseServiceImpl<Long, Cl
         if (Objects.isNull(classGroup)) {
             throw new BizException("班级信息错误");
         }
-
+        //是否有预排课
+        if(courseScheduleDao.queryPreCourseListByClassGroupId(classGroupId.intValue()).size() > 0){
+            throw new BizException("调整失败:请先完成预排课操作");
+        }
         if (ClassGroupTypeEnum.MUSIC_NETWORK.equals(classGroup.getType())) {
             String subjectName = classGroup.getName().split("•")[0];
             List<String> studentNames = studentDao.getStudentNames(new ArrayList<>(studentIds));

+ 4 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CloudTeacherOrderServiceImpl.java

@@ -171,7 +171,8 @@ public class CloudTeacherOrderServiceImpl extends BaseServiceImpl<Long, CloudTea
             if (cloudTeacherOrder.getStatus().equals(3)) {
                 throw new BizException("云教练已退,请勿重复退");
             }
-            if (cloudTeacherOrder.getStatus().equals(2) && cloudTeacherOrder.getEndTime().compareTo(nowDate) <= 0) {
+            if (cloudTeacherOrder.getStatus().equals(2) && DateUtil.stringToDate(DateUtil.format(cloudTeacherOrder.getEndTime(),DateUtil.ISO_EXPANDED_DATE_FORMAT),DateUtil.ISO_EXPANDED_DATE_FORMAT).compareTo(
+                    DateUtil.stringToDate(DateUtil.format(nowDate,DateUtil.ISO_EXPANDED_DATE_FORMAT),DateUtil.ISO_EXPANDED_DATE_FORMAT)) < 0) {
                 throw new BizException("云教练已过服务期,不可退费");
             }
             Integer oldStatus = cloudTeacherOrder.getStatus();
@@ -207,7 +208,8 @@ public class CloudTeacherOrderServiceImpl extends BaseServiceImpl<Long, CloudTea
         if (cloudOrder.getStatus().equals(3)) {
             throw new BizException("云教练已退,请勿重复退");
         }
-        if (cloudOrder.getStatus().equals(2) && cloudOrder.getEndTime().compareTo(nowDate) <= 0) {
+        if (cloudOrder.getStatus().equals(2) && DateUtil.stringToDate(DateUtil.format(cloudOrder.getEndTime(),DateUtil.ISO_EXPANDED_DATE_FORMAT),DateUtil.ISO_EXPANDED_DATE_FORMAT).compareTo(
+                DateUtil.stringToDate(DateUtil.format(nowDate,DateUtil.ISO_EXPANDED_DATE_FORMAT),DateUtil.ISO_EXPANDED_DATE_FORMAT)) < 0) {
             throw new BizException("云教练已过服务期,不可退费");
         }
         Integer oldStatus = cloudOrder.getStatus();

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

@@ -160,8 +160,7 @@
         WHERE order_id_ IN (
         SELECT id_
         FROM student_payment_order
-        WHERE music_group_id_ = #{musicGroupId}
-        AND status_ = 'SUCCESS'
+        WHERE status_ = 'SUCCESS'
         AND user_id_ IN
         <foreach collection="studentIds" item="studentId" open="(" close=")" separator=",">
             #{studentId}
@@ -181,8 +180,7 @@
         WHERE order_id_ IN (
             SELECT id_
             FROM student_payment_order
-            WHERE music_group_id_ = #{musicGroupId}
-              AND status_ = 'SUCCESS'
+            WHERE status_ = 'SUCCESS'
               AND user_id_ = #{studentId}
         )
           AND student_id_ = #{studentId}

+ 9 - 0
mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml

@@ -3902,6 +3902,15 @@
         AND is_lock_ = 1 AND pre_course_flag_ = 1
     </select>
 
+    <select id="queryPreCourseListByClassGroupIds" resultType="int">
+        SELECT COUNT(cs.id_) FROM course_schedule cs
+        WHERE class_group_id_ IN
+        <foreach collection="classGroupIds" open="(" item="classGroupId" separator="," close=")">
+            #{classGroupId}
+        </foreach>
+        AND is_lock_ = 1 AND pre_course_flag_ = 1
+    </select>
+
     <select id="queryPreCourseListByMusicGroupId" resultMap="CourseSchedule">
         SELECT * FROM course_schedule WHERE music_group_id_ = #{musicGroupId} AND group_type_ = 'MUSIC' AND is_lock_ = 1 AND pre_course_flag_ = 1
     </select>

+ 12 - 2
mec-biz/src/main/resources/config/mybatis/MusicGroupMapper.xml

@@ -824,11 +824,12 @@
     </select>
     <select id="countMusicMemberList" resultType="java.lang.Integer">
         SELECT COUNT(c.user_id_) FROM
-        (SELECT sr.user_id_,su.username_,o.name_ organ_name_,mg.name_ music_group_name_,DATEDIFF(MAX(cto.end_time_),NOW()) member_day_,sr.music_group_id_ FROM student_registration sr
+        (SELECT sr.user_id_ FROM student_registration sr
         LEFT JOIN music_group mg ON mg.id_ = sr.music_group_id_
         LEFT JOIN cloud_teacher_order cto ON cto.student_id_ = sr.user_id_
         LEFT JOIN sys_user su ON su.id_ = sr.user_id_
         LEFT JOIN organization o ON o.id_ = mg.organ_id_
+        LEFT JOIN student_visit sv ON sv.student_id_ = sr.user_id_ AND sv.purpose_ = '会员续费'
         <include refid="queryMusicMemberListSql"/>
         GROUP BY cto.student_id_ HAVING MIN(cto.status_) != 1
         <if test="hasMember != null">
@@ -838,6 +839,9 @@
             <if test="hasMember == 1">
                 AND DATEDIFF(MAX(cto.end_time_),NOW()) &lt;= #{memberEndAutoQuitMusic} AND DATEDIFF(MAX(cto.end_time_),NOW()) >= 0
             </if>
+        </if>
+        <if test="visitStartTime != null">
+            AND MAX(sv.visit_time_) BETWEEN #{visitStartTime} AND #{visitEndTime}
         </if>) c
     </select>
     <resultMap id="MusicMemberDto" type="com.ym.mec.biz.dal.entity.MusicMemberDto">
@@ -847,13 +851,16 @@
         <result property="userId" column="user_id_"/>
         <result property="username" column="username_"/>
         <result property="memberDay" column="member_day_"/>
+        <result property="visitTime" column="visit_time_"/>
     </resultMap>
     <select id="queryMusicMemberList" resultMap="MusicMemberDto">
-        SELECT sr.user_id_,su.username_,o.name_ organ_name_,mg.name_ music_group_name_,DATEDIFF(MAX(cto.end_time_),NOW()) + 1 member_day_,sr.music_group_id_ FROM student_registration sr
+        SELECT sr.user_id_,su.username_,o.name_ organ_name_,mg.name_ music_group_name_,
+        DATEDIFF(MAX(cto.end_time_),NOW()) + 1 member_day_,sr.music_group_id_,MAX(sv.visit_time_) visit_time_ FROM student_registration sr
         LEFT JOIN music_group mg ON mg.id_ = sr.music_group_id_
         LEFT JOIN cloud_teacher_order cto ON cto.student_id_ = sr.user_id_
         LEFT JOIN sys_user su ON su.id_ = sr.user_id_
         LEFT JOIN organization o ON o.id_ = mg.organ_id_
+        LEFT JOIN student_visit sv ON sv.student_id_ = sr.user_id_ AND sv.purpose_ = '会员续费'
         <include refid="queryMusicMemberListSql"/>
         GROUP BY cto.student_id_ HAVING MIN(cto.status_) != 1
         <if test="hasMember != null">
@@ -864,6 +871,9 @@
                 AND DATEDIFF(MAX(cto.end_time_),NOW()) &lt;= #{memberEndAutoQuitMusic} AND DATEDIFF(MAX(cto.end_time_),NOW()) >= 0
             </if>
         </if>
+        <if test="visitStartTime != null">
+            AND MAX(sv.visit_time_) BETWEEN #{visitStartTime} AND #{visitEndTime}
+        </if>
         <include refid="global.limit"/>
     </select>
     <sql id="queryMusicMemberListSql">

+ 2 - 1
mec-biz/src/main/resources/config/mybatis/StudentManageDao.xml

@@ -72,6 +72,7 @@
         <result column="grade_type_" property="gradeType" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
         <result column="cooperation_organ_id_" property="cooperationOrganId"/>
         <result column="cooperation_organ_name_" property="cooperationOrganName"/>
+        <result column="membershipEndTime" property="membership_end_time_"/>
     </resultMap>
 
     <sql id="queryCondition">
@@ -163,7 +164,7 @@
 		tu.`real_name_` teacher_name_,CASE s.service_tag_ WHEN 2 THEN 0 ELSE s.service_tag_ END service_tag_ ,s.`operating_tag_` ,
         s.care_package_, s.come_on_package_, suca.`course_balance_` ,suca.balance_,
 		sub.`name_` music_group_subject_ ,su.birthdate_,s.subject_id_list_,s.teacher_id_,s.current_grade_num_,s.current_class_,s.member_rank_setting_id_,
-        CASE WHEN su.password_ IS NULL THEN FALSE ELSE TRUE END isActive_,s.is_new_user_,CASE WHEN sut.user_id_ IS NULL THEN 0 ELSE 1 END is_signed_contract_,
+        CASE WHEN su.password_ IS NULL THEN FALSE ELSE TRUE END isActive_,s.is_new_user_,s.membership_end_time_,CASE WHEN sut.user_id_ IS NULL THEN 0 ELSE 1 END is_signed_contract_,
         s.cooperation_organ_id_,co.name_ cooperation_organ_name_
 		FROM `student` s LEFT JOIN `sys_user` su ON s.`user_id_` = su.`id_`
 		LEFT JOIN `organization` o ON o.`id_` = su.`organ_id_`

+ 30 - 22
mec-web/src/main/java/com/ym/mec/web/controller/MusicGroupController.java

@@ -1,43 +1,36 @@
 package com.ym.mec.web.controller;
 
+import com.ym.mec.auth.api.client.SysUserFeignService;
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.dao.EmployeeDao;
 import com.ym.mec.biz.dal.dto.CloseMusicGroupDto;
 import com.ym.mec.biz.dal.dto.MusicGroupRegsDto;
+import com.ym.mec.biz.dal.dto.SubFeeSettingDto;
+import com.ym.mec.biz.dal.dto.UpdateExpectedNumDto;
+import com.ym.mec.biz.dal.entity.Employee;
 import com.ym.mec.biz.dal.entity.MusicGroup;
 import com.ym.mec.biz.dal.entity.MusicMemberDto;
 import com.ym.mec.biz.dal.entity.StudentRegistration;
+import com.ym.mec.biz.dal.page.MusicGroupQueryInfo;
 import com.ym.mec.biz.dal.page.MusicMemberQueryInfo;
+import com.ym.mec.biz.service.MusicGroupService;
 import com.ym.mec.biz.service.OrganizationService;
+import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
-
+import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.page.PageInfo;
+import com.yonge.log.model.AuditLogAnnotation;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
-
-import java.util.*;
-
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
-import com.ym.mec.auth.api.client.SysUserFeignService;
-import com.ym.mec.auth.api.entity.SysUser;
-import com.ym.mec.biz.dal.dao.EmployeeDao;
-import com.ym.mec.biz.dal.dto.SubFeeSettingDto;
-import com.ym.mec.biz.dal.dto.UpdateExpectedNumDto;
-import com.ym.mec.biz.dal.entity.Employee;
-import com.ym.mec.biz.dal.page.MusicGroupQueryInfo;
-import com.ym.mec.biz.service.MusicGroupService;
-import com.ym.mec.common.controller.BaseController;
-import com.ym.mec.common.exception.BizException;
-import com.yonge.log.model.AuditLogAnnotation;
+import java.util.*;
 
 @RequestMapping("musicGroup")
 @Api(tags = "乐团服务")
@@ -345,7 +338,22 @@ public class MusicGroupController extends BaseController {
 	@ApiOperation(value = "获取乐团已经过期或者即将过期的学员列表")
 	@GetMapping("/queryMusicMemberList")
 	@PreAuthorize("@pcs.hasPermissions('musicGroup/queryMusicMemberList')")
-	public HttpResponseResult<PageInfo<MusicMemberDto>> queryMusicMemberList(MusicMemberQueryInfo musicMemberQueryInfo) {
-		return succeed(musicGroupService.queryMusicMemberList(musicMemberQueryInfo));
+	public HttpResponseResult<PageInfo<MusicMemberDto>> queryMusicMemberList(MusicMemberQueryInfo queryInfo) {
+		SysUser sysUser = sysUserFeignService.queryUserInfo();
+		if (sysUser == null) {
+			return failed("用户信息获取失败");
+		}
+		Employee employee = employeeDao.get(sysUser.getId());
+		if (StringUtils.isEmpty(queryInfo.getOrganId())) {
+			queryInfo.setOrganId(employee.getOrganIdList());
+		}else if(StringUtils.isEmpty(employee.getOrganIdList())){
+			return failed("用户所在分部异常");
+		}else {
+			List<String> list = Arrays.asList(employee.getOrganIdList().split(","));
+			if(!list.containsAll(Arrays.asList(queryInfo.getOrganId().split(",")))){
+				return failed("非法请求");
+			}
+		}
+		return succeed(musicGroupService.queryMusicMemberList(queryInfo));
 	}
 }