zouxuan 4 rokov pred
rodič
commit
e690641fbe

+ 15 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MusicGroupDao.java

@@ -4,6 +4,7 @@ import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.entity.CooperationOrgan;
 import com.ym.mec.biz.dal.entity.MusicGroup;
+import com.ym.mec.biz.dal.entity.MusicMemberDto;
 import com.ym.mec.biz.dal.entity.School;
 import com.ym.mec.biz.dal.enums.ClassGroupTypeEnum;
 import com.ym.mec.biz.dal.enums.MusicGroupStatusEnum;
@@ -436,4 +437,18 @@ public interface MusicGroupDao extends BaseDAO<String, MusicGroup> {
      * @return
      */
     List<MusicGroupRegAndMoneyDto> getMusicGroupByStatus(@Param("organId") String organId, @Param("cooperationOrganIds") List<Integer> cooperationOrganIds, @Param("musicGroupName") String musicGroupName);
+
+    /**
+     * 获取乐团已经过期或者即将过期的学员列表
+     * @param params
+     * @return
+     */
+    int countMusicMemberList(Map<String, Object> params);
+
+    /**
+     * 获取乐团已经过期或者即将过期的学员列表
+     * @param params
+     * @return
+     */
+    List<MusicMemberDto> queryMusicMemberList(Map<String, Object> params);
 }

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

@@ -0,0 +1,70 @@
+package com.ym.mec.biz.dal.entity;
+
+import com.ym.mec.biz.dal.enums.KitGroupPurchaseTypeEnum;
+import io.swagger.annotations.ApiModelProperty;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+
+import java.math.BigDecimal;
+
+public class MusicMemberDto {
+
+	private Integer userId;
+
+	private String username;
+
+	private String organName;
+
+	private String musicGroupName;
+
+	private String musicGroupId;
+
+	private Integer memberDay;
+
+	public Integer getUserId() {
+		return userId;
+	}
+
+	public void setUserId(Integer userId) {
+		this.userId = userId;
+	}
+
+	public String getUsername() {
+		return username;
+	}
+
+	public void setUsername(String username) {
+		this.username = username;
+	}
+
+	public String getOrganName() {
+		return organName;
+	}
+
+	public void setOrganName(String organName) {
+		this.organName = organName;
+	}
+
+	public String getMusicGroupName() {
+		return musicGroupName;
+	}
+
+	public void setMusicGroupName(String musicGroupName) {
+		this.musicGroupName = musicGroupName;
+	}
+
+	public String getMusicGroupId() {
+		return musicGroupId;
+	}
+
+	public void setMusicGroupId(String musicGroupId) {
+		this.musicGroupId = musicGroupId;
+	}
+
+	public Integer getMemberDay() {
+		return memberDay;
+	}
+
+	public void setMemberDay(Integer memberDay) {
+		this.memberDay = memberDay;
+	}
+}

+ 39 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/MusicMemberQueryInfo.java

@@ -0,0 +1,39 @@
+package com.ym.mec.biz.dal.page;
+
+import com.ym.mec.common.page.QueryInfo;
+import io.swagger.annotations.ApiModelProperty;
+
+public class MusicMemberQueryInfo extends QueryInfo {
+
+	@ApiModelProperty(value = "0已过期,1即将过期", required = false)
+	private Integer hasMember;
+
+	private String memberEndAutoQuitMusic;
+
+    @ApiModelProperty(value = "分部", required = false)
+    private String organId;
+
+	public String getMemberEndAutoQuitMusic() {
+		return memberEndAutoQuitMusic;
+	}
+
+	public void setMemberEndAutoQuitMusic(String memberEndAutoQuitMusic) {
+		this.memberEndAutoQuitMusic = memberEndAutoQuitMusic;
+	}
+
+	public Integer getHasMember() {
+		return hasMember;
+	}
+
+	public void setHasMember(Integer hasMember) {
+		this.hasMember = hasMember;
+	}
+
+	public String getOrganId() {
+		return organId;
+	}
+
+	public void setOrganId(String organId) {
+		this.organId = organId;
+	}
+}

+ 9 - 5
mec-biz/src/main/java/com/ym/mec/biz/service/MusicGroupService.java

@@ -8,12 +8,9 @@ import java.util.Map;
 import java.util.Set;
 
 import com.ym.mec.biz.dal.dto.*;
-import com.ym.mec.biz.dal.entity.ApprovalStatus;
-import com.ym.mec.biz.dal.entity.MusicGroup;
-import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
-import com.ym.mec.biz.dal.entity.StudentPreRegistration;
-import com.ym.mec.biz.dal.entity.StudentRegistration;
+import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.page.MusicGroupQueryInfo;
+import com.ym.mec.biz.dal.page.MusicMemberQueryInfo;
 import com.ym.mec.common.entity.ImGroupMember;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.BaseService;
@@ -372,4 +369,11 @@ public interface MusicGroupService extends BaseService<String, MusicGroup> {
 	 * @return
 	 */
 	List<MusicGroup> findByCooperationId(Integer cooperationId);
+
+	/**
+	 * 获取乐团已经过期或者即将过期的学员列表
+	 * @param musicMemberQueryInfo
+	 * @return
+	 */
+	PageInfo<MusicMemberDto> queryMusicMemberList(MusicMemberQueryInfo musicMemberQueryInfo);
 }

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

@@ -2820,7 +2820,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
                     }
                 } else {
                     if(totalCourseMinutes > 44 * 45){
-                        throw new BizException("声部类型总时长不能超过最大限制(1980分钟)");
+                        throw new BizException("合奏类型总时长不能超过最大限制(1980分钟)");
                     }
                     totalMixCourseMinutes = totalCourseMinutes;
                     int maxMixCourseMinutes = musicGroupSchoolTermStudentCourseDetailDao.getMaxMixCourseMinutes(musicGroupSchoolTermCourseDetailId,studentIds);

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

@@ -434,6 +434,9 @@ public class CourseScheduleStudentPaymentServiceImpl extends BaseServiceImpl<Lon
 			for (Integer studentId : studentIds) {
 				int totalCourseDuration = 0;
 				for (CourseSchedule courseSchedule : typeCoursesEntry.getValue()) {
+					if(courseSchedule.getMemberFlag() == 1){
+						continue;
+					}
 					//课程时长
 					int courseDuration = DateUtil.minutesBetween(courseSchedule.getStartClassTime(), courseSchedule.getEndClassTime());
 					totalCourseDuration += courseDuration;

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

@@ -125,7 +125,7 @@ public class MusicGroupPaymentCalenderDetailServiceImpl extends BaseServiceImpl<
 					}else {
 						BigDecimal divide = studentDetail.getCourseCurrentPrice().divide(totalAmount, BigDecimal.ROUND_DOWN);
 						BigDecimal courseAmount = divide.multiply(expectAmount).setScale(0, BigDecimal.ROUND_DOWN);
-						subExpectAmount = expectAmount.subtract(courseAmount);
+						subExpectAmount = subExpectAmount.subtract(courseAmount);
 						musicGroupPaymentCalenderStudentDetailDao.updateByCourseType(studentDetail.getCourseType(),calender.getBatchNo(),studentIds,courseAmount);
 					}
 				}
@@ -141,7 +141,7 @@ public class MusicGroupPaymentCalenderDetailServiceImpl extends BaseServiceImpl<
 					}else {
 						BigDecimal divide = courseSettings.getCourseCurrentPrice().divide(totalAmount, BigDecimal.ROUND_DOWN);
 						BigDecimal courseAmount = divide.multiply(expectAmount).setScale(0, BigDecimal.ROUND_DOWN);
-						subExpectAmount = expectAmount.subtract(courseAmount);
+						subExpectAmount = subExpectAmount.subtract(courseAmount);
 						musicGroupPaymentStudentCourseDetailDao.updateByCourseType(courseSettings.getCourseType().getCode(),ids,courseAmount);
 					}
 				}

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

@@ -14,6 +14,7 @@ import java.util.stream.Collectors;
 import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.enums.*;
+import com.ym.mec.biz.dal.page.MusicMemberQueryInfo;
 import com.ym.mec.biz.service.*;
 import com.ym.mec.thirdparty.message.MessageSenderPluginContext;
 
@@ -3311,4 +3312,37 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
     public List<MusicGroup> findByCooperationId(Integer cooperationId) {
         return musicGroupDao.findByCooperationId(cooperationId);
     }
+
+    @Override
+    public PageInfo<MusicMemberDto> queryMusicMemberList(MusicMemberQueryInfo queryInfo) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        //当前用户是否是分部经理
+        List<Integer> userRole = employeeDao.queryUserRole(sysUser.getId());
+        Integer educationUserId = null;
+        if (!sysUser.getIsSuperAdmin() && userRole.size() == 1 && userRole.contains(SysUserRole.EDUCATIONAL_TEACHER)) {
+            //获取教务老师关联的班级列表
+            educationUserId = sysUser.getId();
+        }
+        String configValue = sysConfigDao.findConfigValue(SysConfigService.PUSH_MEMBER_RENEW_QUIT);
+        if(StringUtils.isEmpty(configValue)){
+            configValue = "15";
+        }
+        queryInfo.setMemberEndAutoQuitMusic(configValue);
+        PageInfo<MusicMemberDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
+        Map<String, Object> params = new HashMap<String, Object>();
+        MapUtil.populateMap(params, queryInfo);
+        params.put("educationUserId",educationUserId);
+        List<MusicMemberDto> dataList = null;
+        int count = musicGroupDao.countMusicMemberList(params);
+        if (count > 0) {
+            pageInfo.setTotal(count);
+            params.put("offset", pageInfo.getOffset());
+            dataList = musicGroupDao.queryMusicMemberList(params);
+        }
+        if (count == 0) {
+            dataList = new ArrayList<>();
+        }
+        pageInfo.setRows(dataList);
+        return pageInfo;
+    }
 }

+ 58 - 0
mec-biz/src/main/resources/config/mybatis/MusicGroupMapper.xml

@@ -822,4 +822,62 @@
            AND mg.name_ LIKE CONCAT('%',#{musicGroupName},'%')
         </if>
     </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
+        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_
+        <include refid="queryMusicMemberListSql"/>
+        GROUP BY cto.student_id_ HAVING MIN(cto.status_) != 1
+        <if test="hasMember != null">
+            <if test="hasMember == 0">
+                AND DATEDIFF(MAX(cto.end_time_),NOW()) &lt; 0
+            </if>
+            <if test="hasMember == 1">
+                AND DATEDIFF(MAX(cto.end_time_),NOW()) &lt;= #{memberEndAutoQuitMusic} AND DATEDIFF(NOW(),MAX(cto.end_time_)) >= 0
+            </if>
+        </if>) c
+    </select>
+    <resultMap id="MusicMemberDto" type="com.ym.mec.biz.dal.entity.MusicMemberDto">
+        <result property="organName" column="organ_name_"/>
+        <result property="musicGroupName" column="music_group_name_"/>
+        <result property="musicGroupId" column="music_group_id_"/>
+        <result property="userId" column="user_id_"/>
+        <result property="username" column="username_"/>
+        <result property="memberDay" column="member_day_"/>
+    </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
+        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_
+        <include refid="queryMusicMemberListSql"/>
+        GROUP BY cto.student_id_ HAVING MIN(cto.status_) != 1
+        <if test="hasMember != null">
+            <if test="hasMember == 0">
+                AND DATEDIFF(MAX(cto.end_time_),NOW()) &lt; 0
+            </if>
+            <if test="hasMember == 1">
+                AND DATEDIFF(MAX(cto.end_time_),NOW()) &lt;= #{memberEndAutoQuitMusic} AND DATEDIFF(NOW(),MAX(cto.end_time_)) >= 0
+            </if>
+        </if>
+    </select>
+    <sql id="queryMusicMemberListSql">
+        <where>
+            sr.music_group_status_ != 'QUIT' AND mg.course_view_type_ = 1
+            AND mg.status_ = 'PROGRESS' AND cto.status_ IN (1,2)
+            <if test="search != null and search != ''">
+                AND (mg.name_ LIKE CONCAT('%',#{search},'%') OR mg.id_ LIKE CONCAT('%',#{search},'%') OR su.username_ LIKE CONCAT('%',#{search},'%') OR su.id_ = #{search})
+            </if>
+            <if test="organId != null and organId != ''">
+                AND FIND_IN_SET(mg.organ_id_,#{organId})
+            </if>
+            <if test="educationUserId != null">
+                AND mg.educational_teacher_id_ = #{educationUserId}
+            </if>
+        </where>
+    </sql>
 </mapper>

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

@@ -503,9 +503,9 @@
         MAX(mgpc.pay_user_type_) pay_user_type_,MAX(mgpc.memo_) memo_,MAX(mgpc.audit_memo_) audit_memo_,MAX(mgpc.status_) status_,
         CASE WHEN MAX(mgpc.payment_type_) = 'SPAN_GROUP_CLASS_ADJUST' THEN MAX(mgsca.master_class_course_times_) ELSE SUM(mgpccs.course_total_minuties_) END course_total_minuties_,
         CASE WHEN MAX(mgpc.payment_type_) = 'SPAN_GROUP_CLASS_ADJUST' THEN MAX(mgpc.payment_amount_) ELSE SUM(mgpccs.course_original_price_) END course_original_price_,
-        SUM(mgpccs.course_current_price_) course_current_price_,
-        SUM(mgpc.member_payment_amount_) member_payment_amount_,
-        SUM(mgpc.original_member_payment_amount_) original_member_payment_amount_,
+        MAX(mgpccs.course_current_price_) course_current_price_,
+        mgpc.member_payment_amount_,
+        mgpc.original_member_payment_amount_,
         MAX(mg.name_) music_group_name_,MAX(mg.organ_id_) organ_id_,MAX(mgpc.payment_pattern_)payment_pattern_
         FROM music_group_payment_calender mgpc
         LEFT JOIN music_group mg ON mg.id_ = mgpc.music_group_id_

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

@@ -1507,7 +1507,7 @@
         AND sr.user_id_ NOT IN (SELECT DISTINCT cgsm.user_id_ FROM class_group_student_mapper cgsm
         LEFT JOIN class_group cg ON cg.id_ = cgsm.class_group_id_
         WHERE cgsm.music_group_id_ = #{musicGroupId} AND cgsm.group_type_ = 'MUSIC'
-        AND cgsm.status_ != 'QUIT' AND cg.del_flag_ = 0 AND cg.type_ IN ('SNAP','NORMAL','MIX'))
+        AND cgsm.status_ != 'QUIT' AND cg.del_flag_ = 0 AND cg.type_ IN ('NORMAL','MIX'))
     </select>
     <select id="checkHasMemberGroup" resultType="java.lang.Boolean">
         SELECT COUNT(sr.id_) > 0 FROM student_registration sr

+ 9 - 0
mec-web/src/main/java/com/ym/mec/web/controller/MusicGroupController.java

@@ -3,10 +3,13 @@ package com.ym.mec.web.controller;
 import com.ym.mec.biz.dal.dto.CloseMusicGroupDto;
 import com.ym.mec.biz.dal.dto.MusicGroupRegsDto;
 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.MusicMemberQueryInfo;
 import com.ym.mec.biz.service.OrganizationService;
 import com.ym.mec.common.entity.HttpResponseResult;
 
+import com.ym.mec.common.page.PageInfo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
@@ -339,4 +342,10 @@ public class MusicGroupController extends BaseController {
 		return succeed(musicGroupService.findByCooperationId(cooperationId));
 	}
 
+	@ApiOperation(value = "获取乐团已经过期或者即将过期的学员列表")
+	@GetMapping("/queryMusicMemberList")
+	@PreAuthorize("@pcs.hasPermissions('musicGroup/queryMusicMemberList')")
+	public HttpResponseResult<PageInfo<MusicMemberDto>> queryMusicMemberList(MusicMemberQueryInfo musicMemberQueryInfo) {
+		return succeed(musicGroupService.queryMusicMemberList(musicMemberQueryInfo));
+	}
 }