Kaynağa Gözat

Merge branch 'feature/1022_vip' into test

刘俊驰 9 ay önce
ebeveyn
işleme
f09785d162

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

@@ -6,7 +6,7 @@ import com.ym.mec.common.enums.BaseEnum;
  * 周期
  */
 public enum PeriodEnum implements BaseEnum<String, PeriodEnum> {
-	DAY(""), MONTH("月"), QUARTERLY("季度"), YEAR_HALF("半年"), YEAR("年");
+	DAY(""), MONTH("月"), QUARTERLY("季度"), YEAR_HALF("半年"), YEAR("年");
 
 	private String msg;
 

+ 3 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/wrapper/MemberRankSettingWrapper.java

@@ -49,6 +49,9 @@ public class MemberRankSettingWrapper {
         @ApiModelProperty("移除ID")
         private List<Integer> removeIds;
 
+        @ApiModelProperty("学生ID")
+        private Integer studentId;
+
         public String jsonString() {
             return JSON.toJSONString(this);
         }

+ 4 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/StudentMemberTimeService.java

@@ -5,11 +5,15 @@ import com.ym.mec.biz.dal.entity.CloudTeacherOrder;
 import com.ym.mec.biz.dal.entity.StudentMemberTime;
 import com.ym.mec.biz.dal.entity.StudentMemberUpdateLog;
 
+import java.util.List;
+
 public interface StudentMemberTimeService extends IService<StudentMemberTime> {
 
     void saveToCloudTeacherOrder(CloudTeacherOrder cloudTeacherOrder);
 
     void saveToStudentMemberUpdateLog(StudentMemberUpdateLog studentMemberUpdateLog);
+
+    List<StudentMemberTime> queryByUserId(List<Integer> userIds);
 }
 
 

+ 12 - 7
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CloudTeacherOrderServiceImpl.java

@@ -447,26 +447,31 @@ public class CloudTeacherOrderServiceImpl extends BaseServiceImpl<Long, CloudTea
     public List<CloudTeacherOrderWrapper.StudentMemberDetail> getEffectiveCloudTeacherOrder(List<Integer> userIds) {
         //获取生效中的会员
         List<CloudTeacherOrderWrapper.StudentMemberDetail> studentMemberDetails = new ArrayList<>();
-        List<CloudTeacherOrder> activeCloudTeachers = cloudTeacherOrderDao.queryByUserIds(userIds,2);
-        if (CollectionUtils.isNotEmpty(activeCloudTeachers)) {
+        List<StudentMemberTime> studentMemberTimes = studentMemberTimeService.queryByUserId(userIds);
+        if (CollectionUtils.isNotEmpty(studentMemberTimes)) {
             //获取所有的会员列表
-            List<Integer> memberRankIds = activeCloudTeachers.stream().map(CloudTeacherOrder::getLevel).distinct().collect(Collectors.toList());
+            List<Integer> memberRankIds = studentMemberTimes.stream().map(StudentMemberTime::getMemberRankId).distinct().collect(Collectors.toList());
             Map<Integer, String> memberNameMap = memberRankSettingService.queryMemberName(memberRankIds);
             //按学员分组
-            Map<Integer, List<CloudTeacherOrder>> cloudTeacherOrderMap = activeCloudTeachers.stream().collect(Collectors.groupingBy(CloudTeacherOrder::getStudentId));
+            Map<Integer, List<StudentMemberTime>> cloudTeacherOrderMap = studentMemberTimes.stream().collect(Collectors.groupingBy(StudentMemberTime::getStudentId));
             cloudTeacherOrderMap.forEach((k, v) -> {
                 //按会员等级分组,同一个级别的会员,去最大的截止时间
-                Map<Integer, List<CloudTeacherOrder>> memberRankMap = v.stream().collect(Collectors.groupingBy(CloudTeacherOrder::getLevel));
+                Map<Integer, List<StudentMemberTime>> memberRankMap = v.stream().collect(Collectors.groupingBy(StudentMemberTime::getMemberRankId));
                 memberRankMap.forEach((key, value) -> {
                     CloudTeacherOrderWrapper.StudentMemberDetail studentMemberDetail = new CloudTeacherOrderWrapper.StudentMemberDetail();
                     studentMemberDetail.setStudentId(k);
                     //会员名称
                     studentMemberDetail.setMemberRankName(memberNameMap.get(key));
                     //获取最大的截止时间
-                    Date maxTime = value.stream().map(CloudTeacherOrder::getEndTime).max(Date::compareTo).get();
+                    Date maxTime = value.stream().map(StudentMemberTime::getEndTime).max(Date::compareTo).get();
                     studentMemberDetail.setEndTime(maxTime);
                     //剩余天数
-                    studentMemberDetail.setRemainingDays(DateUtil.daysBetween(new Date(), maxTime));
+                    if (maxTime.compareTo(new Date()) < 0) {
+                        studentMemberDetail.setRemainingDays(0);
+                    } else {
+                        int i = DateUtil.daysBetweenUp(new Date(), maxTime);
+                        studentMemberDetail.setRemainingDays(i);
+                    }
                     studentMemberDetail.setMemberRankId(key);
                     studentMemberDetails.add(studentMemberDetail);
                 });

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

@@ -12,6 +12,7 @@ import com.ym.mec.biz.dal.dto.Cloud2022ActivityDto;
 import com.ym.mec.biz.dal.dto.MemberPayParamDto;
 import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.enums.*;
+import com.ym.mec.biz.dal.wrapper.CloudTeacherOrderWrapper;
 import com.ym.mec.biz.dal.wrapper.LessonCoursewareWrapper;
 import com.ym.mec.biz.dal.wrapper.MemberRankSettingWrapper;
 import com.ym.mec.biz.dal.wrapper.MusicSheetWrapper;
@@ -952,7 +953,7 @@ public class MemberRankSettingServiceImpl extends BaseServiceImpl<Integer, Membe
                 //保存团练宝数据
                 CloudTeacherOrder cloudTeacherOrder = new CloudTeacherOrder();
                 cloudTeacherOrder.setOrderId(studentPaymentOrder.getId());
-                cloudTeacherOrder.setLevel(1);
+                cloudTeacherOrder.setLevel(activity.getGiveMemberRankId());
                 cloudTeacherOrder.setStatus(1);
                 cloudTeacherOrder.setType(activity.getPeriodEnum());
                 cloudTeacherOrder.setTime(studentPaymentOrder.getActivityBuyNum());
@@ -960,7 +961,7 @@ public class MemberRankSettingServiceImpl extends BaseServiceImpl<Integer, Membe
                 cloudTeacherOrder.setOrganId(studentPaymentOrder.getOrganId());
                 cloudTeacherOrder.setAmount(studentPaymentOrder.getExpectAmount());
                 cloudTeacherOrder.setOperatingAmount(studentPaymentOrder.getExpectAmount());
-                cloudTeacherOrderService.save(cloudTeacherOrder,tenantConfigService.autoActivationFlag(cloudTeacherOrder.getTenantId(),1));
+                cloudTeacherOrderService.save(cloudTeacherOrder,tenantConfigService.autoActivationFlag(cloudTeacherOrder.getTenantId(),activity.getGiveMemberRankId()));
 
                 Map<Integer, String> phoneMaps = MapUtil.convertMybatisMap(teacherDao.queryPhoneByIds(userId.toString()));
                 String baseApiUrl = sysConfigDao.findConfigValue(SysConfigService.BASE_API_URL);
@@ -1093,6 +1094,16 @@ public class MemberRankSettingServiceImpl extends BaseServiceImpl<Integer, Membe
         Map<String, Object> params = new HashMap<String, Object>();
         MapUtil.populateMap(params, queryInfo);
         List<MemberRankSetting> dataList = this.getDAO().queryPage(params);
+
+        // 根据学生ID,只返回可扣费的会员
+        if (Objects.nonNull(queryInfo.getStudentId()))  {
+            List<Integer> collect = cloudTeacherOrderService.getEffectiveCloudTeacherOrder(Lists.newArrayList(queryInfo.getStudentId())).stream()
+                .map(CloudTeacherOrderWrapper.StudentMemberDetail::getMemberRankId)
+                .distinct().collect(Collectors.toList());
+            // 过滤学生已经购买的会员
+            dataList = dataList.stream().filter(e -> collect.contains(e.getId())).collect(Collectors.toList());
+        }
+
         if (CollectionUtils.isEmpty(dataList)) {
             return new ArrayList<>();
         }

+ 27 - 5
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentMemberTimeServiceImpl.java

@@ -8,12 +8,16 @@ import com.ym.mec.biz.dal.entity.StudentMemberUpdateLog;
 import com.ym.mec.biz.dal.enums.PeriodEnum;
 import com.ym.mec.biz.service.StudentMemberTimeService;
 import com.ym.mec.util.date.DateUtil;
+import org.joda.time.DateTime;
+import org.joda.time.DateTimeUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.time.LocalDate;
 import java.util.Date;
+import java.util.List;
 
 @Service("studentMemberTimeService")
 public class StudentMemberTimeServiceImpl extends ServiceImpl<StudentMemberTimeDao, StudentMemberTime> implements StudentMemberTimeService {
@@ -39,22 +43,32 @@ public class StudentMemberTimeServiceImpl extends ServiceImpl<StudentMemberTimeD
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void saveToStudentMemberUpdateLog(StudentMemberUpdateLog studentMemberUpdateLog) {
-        StudentMemberTime one = this.lambdaQuery().eq(StudentMemberTime::getMemberRankId, studentMemberUpdateLog.getLevel()).last("limit 1").one();
+        StudentMemberTime one = this.lambdaQuery()
+            .eq(StudentMemberTime::getMemberRankId, studentMemberUpdateLog.getLevel())
+            .eq(StudentMemberTime::getStudentId, studentMemberUpdateLog.getStudentId())
+            .last("limit 1").one();
         //扣减
-        Date now = new Date();
+        LocalDate nowDate = LocalDate.now().plusDays(1);
+        // 转 Date
+        Date now = DateUtil.localDateToDate(nowDate);
         if(studentMemberUpdateLog.getBuyType() == 3){
             if (one == null) {
-                throw new RuntimeException("会员信息不存在");
+                throw new RuntimeException("学练宝信息不存在");
             }
             studentMemberUpdateLog.setOldEndTime(one.getEndTime());
-            if (one.getEndTime().after(now)) {
+            if (one.getEndTime().after(new Date())) {
+                int i = DateUtil.daysBetweenUp(new Date(), one.getEndTime());
+                if (i<studentMemberUpdateLog.getTime()) {
+                    throw new RuntimeException("学练宝剩余天数不足");
+                }
                 studentMemberUpdateLog.setOldEndTime(one.getEndTime());
                 one.setEndTime(addDays(one.getEndTime(), -studentMemberUpdateLog.getTime(), studentMemberUpdateLog.getType()));
                 this.updateById(one);
             }else {
-                throw new RuntimeException("会员已过期");
+                throw new RuntimeException("学练宝已过期");
             }
         }else {
+
             if (one == null) {
                 one = new StudentMemberTime();
                 one.setMemberRankId(studentMemberUpdateLog.getLevel());
@@ -75,6 +89,14 @@ public class StudentMemberTimeServiceImpl extends ServiceImpl<StudentMemberTimeD
         studentMemberUpdateLog.setNewEndTime(one.getEndTime());
     }
 
+    @Override
+    public List<StudentMemberTime> queryByUserId(List<Integer> userIds) {
+        return lambdaQuery()
+            .in(StudentMemberTime::getStudentId, userIds)
+            .gt(StudentMemberTime::getEndTime, new Date())
+            .list();
+    }
+
     private Date addDays(Date endTime, int time, PeriodEnum type) {
         switch (type) {
             case DAY:

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

@@ -1608,7 +1608,7 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
                     null,
                     0,
                     null,
-                    "STUDENT",param.getType()==3?"扣减":"获得",param.getNumber(),
+                    "STUDENT",param.getType()==3?"扣减":"获得",param.getNumber()+
                     param.getPeriodType().getMsg(),studentMemberUpdateLog.getName(),param.getMemo());
         }
     }

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

@@ -77,6 +77,11 @@ public class SysMusicScoreAccompanimentServiceImpl extends BaseServiceImpl<Strin
 					sysMusicScoreAccompaniment.setMetronomeUrl(sysMusicScoreAccompaniment.getUrl());
 				}
 			}
+            if (StringUtils.isBlank(sysMusicScoreAccompaniment.getRankIds())) {
+                sysMusicScoreAccompaniment.setUseStatus("FREE");
+            } else  {
+                sysMusicScoreAccompaniment.setUseStatus("LOCK");
+            }
 		}
 		return this.initAccompaniment(sysMusicScoreAccompaniments);
 	}
@@ -395,7 +400,11 @@ public class SysMusicScoreAccompanimentServiceImpl extends BaseServiceImpl<Strin
 			}
 		} else {
 			for (SysMusicScoreAccompaniment item : accompaniments) {
-				item.setUseStatus("UNLOCK");
+                if (StringUtils.isBlank(item.getRankIds())) {
+                    item.setUseStatus("FREE");
+                } else  {
+                    item.setUseStatus("LOCK");
+                }
 			}
 		}
 

+ 17 - 7
mec-biz/src/main/resources/config/mybatis/MemberRankSettingMapper.xml

@@ -155,7 +155,22 @@
     </select>
 
 	<select id="getByIdsAndType" resultMap="MemberRankSetting">
-        SELECT distinct mrs.* FROM member_rank_setting mrs
+        SELECT mrs.id_
+             , mrs.parent_id_
+             , mrs.name_
+             , mrs.intro_
+             , mrs.icon_
+             , mrs.experience_icon_
+             , mrs.create_time_
+             , mrs.update_time_
+             , mrs.operator_
+        <if test="type !=null and type == 'MUSIC'">
+            , sum(if(mrcm.category_id_ = #{typeId},1,0)) is_default_
+        </if>
+        <if test="type !=null and type == 'LESSON'">
+            , sum(if(mrctm.course_type_ = #{typeId},1,0)) is_default_
+        </if>
+        FROM member_rank_setting mrs
         <if test="type !=null and type == 'MUSIC'">
             left join member_rank_category_mapper mrcm on mrs.id_ = mrcm.rank_id_
         </if>
@@ -166,11 +181,6 @@
         <foreach collection="memberIds" item="id" open="(" close=")" separator=",">
             #{id}
         </foreach>
-        <if test="type !=null and type == 'MUSIC'">
-            and mrcm.category_id_ = #{typeId}
-        </if>
-        <if test="type !=null and type == 'LESSON'">
-            and mrctm.course_type_ = #{typeId}
-        </if>
+        group by mrs.id_
     </select>
 </mapper>

+ 17 - 0
mec-util/src/main/java/com/ym/mec/util/date/DateUtil.java

@@ -5,6 +5,7 @@ import org.apache.commons.lang3.StringUtils;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.time.DayOfWeek;
+import java.time.LocalDate;
 import java.time.ZoneId;
 import java.time.format.DateTimeFormatter;
 import java.time.temporal.WeekFields;
@@ -1316,6 +1317,22 @@ public class DateUtil {
 		}
     }
 
+    public static Date localDateToDate(LocalDate nowDate) {
+
+        return Date.from(nowDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
+    }
+
+    public static int daysBetweenUp(Date date, Date maxTime) {
+        long epochSecond = date.toInstant().getEpochSecond();
+        long epochSecond1 = maxTime.toInstant().getEpochSecond();
+        int i = (int) (epochSecond1 - epochSecond)/(24*60*60)  ;
+        int j = (int) (epochSecond1 - epochSecond)%(24*60*60)  ;
+        if (j >0) {
+            i++;
+        }
+        return i;
+    }
+
     /**
 	 * @describe 时间区段辅助类
 	 * @author Joburgess