VIP改版

This commit is contained in:
wuchunlei
2025-02-21 15:47:50 +08:00
parent 0e8b4d2e0e
commit 6908c092a5
38 changed files with 973 additions and 1797 deletions

View File

@@ -1,7 +1,27 @@
package com.peanut.modules.common.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.peanut.modules.common.entity.BuyOrder;
import com.peanut.modules.common.entity.MyUserEntity;
import com.peanut.modules.common.entity.UserVip;
import java.util.List;
import java.util.Set;
public interface UserVipService extends IService<UserVip> {
boolean noMedicalVip();
boolean isMedicalVip();
boolean isAcupunctureVip();
boolean istumorVip();
boolean isSociologyVip();
boolean isPsycheVip();
//是否是这门课的vip
UserVip ownCourseCatalogueByVip(int courseId);
Set getCourseVipModule(int catalogueId);
UserVip ownCourseCatalogueByVip(MyUserEntity u, int catalogueId);
void bottomLabel(int labelId, List list);
void openVipForUser(BuyOrder buyOrder);
}

View File

@@ -0,0 +1,9 @@
package com.peanut.modules.common.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.peanut.modules.common.entity.VipBuyConfigEntity;
public interface VipBuyConfigService extends IService<VipBuyConfigEntity> {
}

View File

@@ -3,7 +3,6 @@ package com.peanut.modules.common.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import com.peanut.common.utils.ExpressOrderUtil;
@@ -17,7 +16,6 @@ import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
@@ -49,7 +47,6 @@ public class BuyOrderServiceImpl extends ServiceImpl<BuyOrderDao, BuyOrder> impl
MyUserEntity userEntity = userDao.selectById(prepareOrderDto.getUid());
UserBaseVo userBaseVo = new UserBaseVo();
userBaseVo.setId(userEntity.getId());
userBaseVo.setVip(Integer.valueOf(userEntity.getVip()));
userBaseVo.setPeanutCoin(userEntity.getPeanutCoin());
userBaseVo.setJf(userEntity.getJf());
flag.put("user",userBaseVo);

View File

@@ -12,6 +12,7 @@ import com.peanut.config.DelayQueueConfig;
import com.peanut.modules.common.dao.*;
import com.peanut.modules.common.entity.*;
import com.peanut.modules.common.service.ClassEntityService;
import com.peanut.modules.common.service.UserVipService;
import com.peanut.modules.sys.dao.SysUserDao;
import com.peanut.modules.sys.entity.SysUserEntity;
import lombok.extern.slf4j.Slf4j;
@@ -62,6 +63,8 @@ public class ClassEntityServiceImpl extends ServiceImpl<ClassEntityDao, ClassEnt
private UserCertificateDao userCertificateDao;
@Autowired
private StringRedisTemplate redisTemplate;
@Autowired
private UserVipService userVipService;
@Override
public Page getClassModelList(Map<String, Object> params) {
@@ -304,12 +307,13 @@ public class ClassEntityServiceImpl extends ServiceImpl<ClassEntityDao, ClassEnt
if (userList.size() > 0) {
for (ClassUser classUser:userList){
MyUserEntity user = myUserDao.selectById(classUser.getUserId());
if ("0".equals(user.getVip())||"3".equals(user.getVip())){
//不是vip查询每门课是否购买
boolean flag = false;
List<ClassCourse> courses = classCourseDao.selectList(new LambdaQueryWrapper<ClassCourse>()
.eq(ClassCourse::getModelId,classEntity.getModelId()));
for (ClassCourse classCourse:courses){
boolean flag = false;
List<ClassCourse> courses = classCourseDao.selectList(new LambdaQueryWrapper<ClassCourse>()
.eq(ClassCourse::getModelId,classEntity.getModelId()));
for (ClassCourse classCourse:courses){
UserVip userVip = userVipService.ownCourseCatalogueByVip(user,classCourse.getCourseId());
if (userVip==null){
//不是vip查询每门课是否购买
List<CourseCatalogueEntity> catalogues = courseCatalogueDao.selectList(new LambdaQueryWrapper<CourseCatalogueEntity>()
.eq(CourseCatalogueEntity::getCourseId,classCourse.getCourseId()));
for (CourseCatalogueEntity catalog:catalogues){
@@ -325,9 +329,9 @@ public class ClassEntityServiceImpl extends ServiceImpl<ClassEntityDao, ClassEnt
}
}
}
if (flag) {
return R.error(sb.toString());
}
}
if (flag) {
return R.error(sb.toString());
}
}
}
@@ -576,11 +580,12 @@ public class ClassEntityServiceImpl extends ServiceImpl<ClassEntityDao, ClassEnt
Map<String, Object> map = new HashMap<>();
map.put("student",user);
StringBuilder sb = new StringBuilder();
if ("1".equals(user.getVip())||"2".equals(user.getVip())){
sb.append("会员 ");
}else {
if (courses.size() > 0){
for (CourseEntity course : courses) {
if (courses.size() > 0){
for (CourseEntity course : courses) {
UserVip userVip = userVipService.ownCourseCatalogueByVip(user,course.getId());
if (userVip != null) {
sb.append("会员 ");
}else {
List<CourseCatalogueEntity> catalogues = courseCatalogueDao.selectList(new LambdaQueryWrapper<CourseCatalogueEntity>()
.eq(CourseCatalogueEntity::getCourseId,course.getId()));
for (CourseCatalogueEntity catalog:catalogues){
@@ -700,11 +705,12 @@ public class ClassEntityServiceImpl extends ServiceImpl<ClassEntityDao, ClassEnt
ClassEntity classEntity = this.baseMapper.selectById(params.get("classId").toString());
MyUserEntity user = ShiroUtils.getUser();
String msg = "";
if ("0".equals(user.getVip())||"3".equals(user.getVip())){
//不是vip查询每门课是否购买
List<ClassCourse> courses = classCourseDao.selectList(new LambdaQueryWrapper<ClassCourse>()
.eq(ClassCourse::getModelId,classEntity.getModelId()));
for (ClassCourse classCourse:courses){
List<ClassCourse> courses = classCourseDao.selectList(new LambdaQueryWrapper<ClassCourse>()
.eq(ClassCourse::getModelId,classEntity.getModelId()));
for (ClassCourse classCourse:courses){
UserVip userVip = userVipService.ownCourseCatalogueByVip(classCourse.getCourseId());
if (userVip == null) {
//不是vip查询每门课是否购买
List<CourseCatalogueEntity> catalogues = courseCatalogueDao.selectList(new LambdaQueryWrapper<CourseCatalogueEntity>()
.eq(CourseCatalogueEntity::getCourseId,classCourse.getCourseId()));
for (CourseCatalogueEntity catalog:catalogues){

View File

@@ -1,13 +1,307 @@
package com.peanut.modules.common.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.peanut.modules.common.dao.UserVipDao;
import com.peanut.modules.common.entity.UserVip;
import com.peanut.common.utils.ShiroUtils;
import com.peanut.modules.common.dao.*;
import com.peanut.modules.common.entity.*;
import com.peanut.modules.common.service.UserVipService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.time.DateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.*;
@Slf4j
@Service("commonUserVipService")
public class UserVipServiceImpl extends ServiceImpl<UserVipDao, UserVip> implements UserVipService {
@Autowired
private UserVipDao userVipDao;
@Autowired
private CourseMedicineDao courseMedicineDao;
@Autowired
private CourseToMedicineDao courseToMedicalDao;
@Autowired
private CourseToSociologyDao courseToSociologyDao;
@Autowired
private CourseToPsycheDao courseToPsycheDao;
@Autowired
private VipBuyConfigDao vipBuyConfigDao;
@Override
public boolean noMedicalVip() {
List<UserVip> userVipList = userVipDao.selectList(new LambdaQueryWrapper<UserVip>()
.eq(UserVip::getUserId, ShiroUtils.getUId())
.eq(UserVip::getState,0)
.in(UserVip::getType,4,5,6));
if (userVipList.size() > 0) {
return false;
}else {
return true;
}
}
@Override
public boolean isMedicalVip() {
return isVip(4);
}
@Override
public boolean isAcupunctureVip() {
return isVip(5);
}
@Override
public boolean istumorVip() {
return isVip(6);
}
@Override
public boolean isSociologyVip() {
return isVip(7);
}
@Override
public boolean isPsycheVip() {
return isVip(8);
}
public boolean isVip(int type) {
List<UserVip> userVipList = userVipDao.selectList(new LambdaQueryWrapper<UserVip>()
.eq(UserVip::getUserId, ShiroUtils.getUId())
.eq(UserVip::getState,0)
.eq(UserVip::getType,type));
if (userVipList.size() > 0) {
return true;
}else {
return false;
}
}
public UserVip ownCourseCatalogueByVip(MyUserEntity u,int courseId) {
List<UserVip> userVipList = userVipDao.selectList(new LambdaQueryWrapper<UserVip>()
.eq(UserVip::getUserId, u==null?ShiroUtils.getUId():u.getId())
.eq(UserVip::getState,0));
for (UserVip userVip : userVipList) {
if (userVip.getType()==4||userVip.getType()==5||userVip.getType()==6) {
List<CourseToMedicine> list = courseToMedicalDao.selectList(new LambdaQueryWrapper<CourseToMedicine>()
.eq(CourseToMedicine::getCourseId,courseId));
for (CourseToMedicine ctm:list) {
CourseMedicine cm = topLabel(ctm.getMedicalId());
if (cm != null){
if ((cm.getId()==1&&userVip.getType()==4)||//中医学
(cm.getId()==2&&userVip.getType()==5)||//针灸学
(cm.getId()==5&&userVip.getType()==6)){//肿瘤学
return userVip;
}
}
}
}else if (userVip.getType()==7){//国学
List<CourseToSociologyEntity> list = courseToSociologyDao.selectList(new LambdaQueryWrapper<CourseToSociologyEntity>()
.eq(CourseToSociologyEntity::getCourseId,courseId));
if (list.size() > 0) {
return userVip;
}
}else if (userVip.getType()==8){//心理学
List<CourseToPsyche> list = courseToPsycheDao.selectList(new LambdaQueryWrapper<CourseToPsyche>()
.eq(CourseToPsyche::getCourseId,courseId));
if (list.size() > 0) {
return userVip;
}else {
List<CourseToMedicine> l2 = courseToMedicalDao.selectList(new LambdaQueryWrapper<CourseToMedicine>()
.eq(CourseToMedicine::getCourseId,courseId));
for (CourseToMedicine ctm:l2) {
CourseMedicine cm = topLabel(ctm.getMedicalId());
if (cm != null){
if ((cm.getId()==4&&userVip.getType()==8)){//心理学
return userVip;
}
}
}
}
}
}
return null;
}
@Override
public UserVip ownCourseCatalogueByVip(int courseId) {
return ownCourseCatalogueByVip(null,courseId);
}
@Override
public Set getCourseVipModule(int courseId) {
Set set = new HashSet();
List<CourseToMedicine> mlist = courseToMedicalDao.selectList(new LambdaQueryWrapper<CourseToMedicine>()
.eq(CourseToMedicine::getCourseId,courseId));
for (CourseToMedicine ctm:mlist) {
CourseMedicine cm = topLabel(ctm.getMedicalId());
if (cm.getId()==1){//中医学
set.add(4);
}else if (cm.getId() == 2) {//针灸学
set.add(5);
}else if (cm.getId() == 5) {//肿瘤学
set.add(6);
}else if (cm.getId() == 4) {//心身医学
set.add(8);
}
}
List<CourseToSociologyEntity> slist = courseToSociologyDao.selectList(new LambdaQueryWrapper<CourseToSociologyEntity>()
.eq(CourseToSociologyEntity::getCourseId,courseId));
if (slist.size()>0){
set.add(7);
}
List<CourseToPsyche> plist = courseToPsycheDao.selectList(new LambdaQueryWrapper<CourseToPsyche>()
.eq(CourseToPsyche::getCourseId,courseId));
if (plist.size()>0){
set.add(8);
}
return set;
}
public CourseMedicine topLabel(int labelId) {
CourseMedicine cm = courseMedicineDao.selectById(labelId);
if (cm != null) {
CourseMedicine pcm = courseMedicineDao.selectById(cm.getPid());
if (pcm != null) {
if (pcm.getPid()==0){
return pcm;
}else {
return topLabel(pcm.getId());
}
}
}
return null;
}
@Override
public void bottomLabel(int labelId,List list) {
CourseMedicine cm = courseMedicineDao.selectById(labelId);
if (cm != null) {
if (cm.getIsLast()==1){
list.add(cm.getId());
}else {
List<CourseMedicine> cms = courseMedicineDao.selectList(new LambdaQueryWrapper<CourseMedicine>()
.eq(CourseMedicine::getPid,cm.getId()));
for (CourseMedicine ccm:cms){
bottomLabel(ccm.getId(),list);
}
}
}
}
@Override
public void openVipForUser(BuyOrder buyOrder) {
VipBuyConfigEntity vipBuyConfigEntity = vipBuyConfigDao.selectById(buyOrder.getVipBuyConfigId());
if(vipBuyConfigEntity.getType()==1){//医学超级
List<UserVip> userVipList = userVipDao.selectList(new LambdaQueryWrapper<UserVip>()
.eq(UserVip::getUserId,buyOrder.getUserId()).eq(UserVip::getState,0).in(UserVip::getType,4,5,6));
for (int i=4;i<=6;i++){
UserVip userVip = new UserVip();
userVip.setUserId(buyOrder.getUserId());
userVip.setType(i);
boolean flag = false;
for (UserVip uv:userVipList){
if (uv.getType()==i){
flag = true;
userVip = uv;
userVip.setEndTime(DateUtils.addYears(uv.getEndTime(),vipBuyConfigEntity.getYear()));
userVipDao.updateById(userVip);
break;
}
}
if (!flag) {
userVip.setStartTime(new Date());
userVip.setEndTime(DateUtils.addYears(userVip.getStartTime(),vipBuyConfigEntity.getYear()));
userVipDao.insert(userVip);
}
}
}else if(vipBuyConfigEntity.getType()==11){//延期医学超级
for (int i=4;i<7;i++){
List<UserVip> userVipList = userVipDao.selectList(new LambdaQueryWrapper<UserVip>()
.eq(UserVip::getUserId,buyOrder.getUserId()).eq(UserVip::getType,i).orderByDesc(UserVip::getEndTime));
UserVip userVip = userVipList.get(0);
if (userVip.getState()==0) {
userVip.setEndTime(DateUtils.addYears(userVip.getEndTime(),vipBuyConfigEntity.getYear()));
userVipDao.updateById(userVip);
}else {
UserVip uv = new UserVip();
uv.setUserId(buyOrder.getUserId());
uv.setType(i);
uv.setStartTime(new Date());
uv.setEndTime(DateUtils.addYears(uv.getStartTime(),vipBuyConfigEntity.getYear()));
userVipDao.insert(uv);
}
}
}else if (vipBuyConfigEntity.getType()==2){//国心超级
List<UserVip> userVipList = userVipDao.selectList(new LambdaQueryWrapper<UserVip>()
.eq(UserVip::getUserId,buyOrder.getUserId()).eq(UserVip::getState,0).in(UserVip::getType,7,8));
for (int i=7;i<=8;i++){
UserVip userVip = new UserVip();
userVip.setUserId(buyOrder.getUserId());
userVip.setType(i);
boolean flag = false;
for (UserVip uv:userVipList){
if (uv.getType()==i){
flag = true;
userVip = uv;
userVip.setEndTime(DateUtils.addYears(uv.getEndTime(),vipBuyConfigEntity.getYear()));
userVipDao.updateById(userVip);
break;
}
}
if (!flag) {
userVip.setStartTime(new Date());
userVip.setEndTime(DateUtils.addYears(userVip.getStartTime(),vipBuyConfigEntity.getYear()));
userVipDao.insert(userVip);
}
}
}else if(vipBuyConfigEntity.getType()==21){//延期国心超级
for (int i=7;i<9;i++){
List<UserVip> userVipList = userVipDao.selectList(new LambdaQueryWrapper<UserVip>()
.eq(UserVip::getUserId,buyOrder.getUserId()).eq(UserVip::getType,i).orderByDesc(UserVip::getEndTime));
UserVip userVip = userVipList.get(0);
if (userVip.getState()==0) {
userVip.setEndTime(DateUtils.addYears(userVip.getEndTime(),vipBuyConfigEntity.getYear()));
userVipDao.updateById(userVip);
}else {
UserVip uv = new UserVip();
uv.setUserId(buyOrder.getUserId());
uv.setType(i);
uv.setStartTime(new Date());
uv.setEndTime(DateUtils.addYears(uv.getStartTime(),vipBuyConfigEntity.getYear()));
userVipDao.insert(uv);
}
}
}else if (vipBuyConfigEntity.getType()==4||vipBuyConfigEntity.getType()==5||vipBuyConfigEntity.getType()==6||
vipBuyConfigEntity.getType()==7||vipBuyConfigEntity.getType()==8){
UserVip userVip = new UserVip();
userVip.setUserId(buyOrder.getUserId());
userVip.setType(vipBuyConfigEntity.getType());
userVip.setStartTime(new Date());
userVip.setEndTime(DateUtils.addYears(userVip.getStartTime(),vipBuyConfigEntity.getYear()));
userVipDao.insert(userVip);
}else if (vipBuyConfigEntity.getType()==41||vipBuyConfigEntity.getType()==51||vipBuyConfigEntity.getType()==61||
vipBuyConfigEntity.getType()==71||vipBuyConfigEntity.getType()==81){
List<UserVip> userVipList = userVipDao.selectList(new LambdaQueryWrapper<UserVip>()
.eq(UserVip::getUserId,buyOrder.getUserId())
.eq(UserVip::getType,vipBuyConfigEntity.getType().toString().substring(0,1))
.orderByDesc(UserVip::getEndTime));
UserVip userVip = userVipList.get(0);
if (userVip.getState()==0) {
userVip.setEndTime(DateUtils.addYears(userVip.getEndTime(),vipBuyConfigEntity.getYear()));
userVipDao.updateById(userVip);
}else {
UserVip uv = new UserVip();
uv.setUserId(buyOrder.getUserId());
uv.setType(userVip.getType());
uv.setStartTime(new Date());
uv.setEndTime(DateUtils.addYears(uv.getStartTime(),vipBuyConfigEntity.getYear()));
userVipDao.insert(uv);
}
}
}
}

View File

@@ -0,0 +1,16 @@
package com.peanut.modules.common.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.peanut.modules.common.dao.VipBuyConfigDao;
import com.peanut.modules.common.entity.VipBuyConfigEntity;
import com.peanut.modules.common.service.VipBuyConfigService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@Slf4j
@Service("commonVipBuyConfigService")
public class VipBuyConfigServiceImpl extends ServiceImpl<VipBuyConfigDao, VipBuyConfigEntity> implements VipBuyConfigService {
}