提交 b09906b1 编写于 作者: 街头小贩's avatar 街头小贩

更新MemberVipExchangeRecords相关api方法

上级 349b22e1
......@@ -26,22 +26,84 @@ public class MemberVipExchangeRecordsDaoImpl implements MemberVipExchangeRecords
@PersistenceContext
private EntityManager entityManager;
private final static Logger logger = LoggerFactory.getLogger(MemberVipExchangeRecordsDaoImpl.class);
@Override
public Page<MemberVipExchangeRecords> findAllByMember(long memberId) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
public Page<MemberVipExchangeRecords> findAllByMember(long memberId, Pageable pageable) {
final long total = findAllByMemberCount(memberId);
if (total == 0) {
return emptyResult();
}
final String SQL = "SELECT ver FROM MemberVipExchangeRecords ver WHERE ver.memberId = ?1 ORDER BY ver.entryDateTime DESC";
TypedQuery<MemberVipExchangeRecords> query = entityManager.createQuery(SQL, MemberVipExchangeRecords.class).setParameter(1, memberId);
query.setFirstResult(pageable.getOffset());
query.setMaxResults(pageable.getPageSize());
final Stream<MemberVipExchangeRecords> result = query.getResultStream();
return new Page<MemberVipExchangeRecords>() {
@Override
public long getTotalElements() {
return total;
}
@Override
public Stream<MemberVipExchangeRecords> getResult() {
return result;
}
};
}
private long findAllByMemberCount(long memberId){
try {
return entityManager.createQuery("SELECT COUNT(ver) FROM MemberVipExchangeRecords ver WHERE ver.memberId = ?1", Long.class).setParameter(1, memberId).getSingleResult();
} catch (Exception e) {
if (logger.isDebugEnabled()) {
logger.debug("[findAllByMemberCount][MemberVipExchangeRecords]", e);
}
}
return 0L;
}
@Override
public Page<MemberVipExchangeRecords> findAll(LocalDateTime start, LocalDateTime finish) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
public Page<MemberVipExchangeRecords> findAll(LocalDateTime start, LocalDateTime finish, Pageable pageable) {
final long total = countByDateRange(start, finish);
if (total == 0) {
return emptyResult();
}
final String SQL = "SELECT ver FROM MemberVipExchangeRecords ver WHERE ver.activeDateTime >= ?1 AND ver.lapseDateTime <= ?2 ORDER BY ver.entryDateTime DESC";
TypedQuery<MemberVipExchangeRecords> query = entityManager.createQuery(SQL, MemberVipExchangeRecords.class).setParameter(1, start).setParameter(2, finish);
query.setFirstResult(pageable.getOffset());
query.setMaxResults(pageable.getPageSize());
final Stream<MemberVipExchangeRecords> result = query.getResultStream();
return new Page<MemberVipExchangeRecords>() {
@Override
public long getTotalElements() {
return total;
}
@Override
public Stream<MemberVipExchangeRecords> getResult() {
return result;
}
};
}
private long countByDateRange(LocalDateTime start, LocalDateTime finish){
try {
return entityManager.createQuery("SELECT COUNT(ver) FROM MemberVipExchangeRecords ver WHERE ver.activeDateTime >= ?1 AND ver.lapseDateTime <= ?2 ", Long.class)
.setParameter(1, start)
.setParameter(2, finish)
.getSingleResult();
} catch (Exception e) {
if (logger.isDebugEnabled()) {
logger.debug("[countByDateRange][MemberVipExchangeRecords]", e);
}
}
return 0L;
}
@Override
public Stream<MemberVipExchangeRecords> findAllOfRecent(int size) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
return entityManager.createQuery("SELECT ver FROM MemberVipExchangeRecords ver ORDER BY ver.entryDateTime DESC", MemberVipExchangeRecords.class).setMaxResults(size).getResultStream();
}
@Override
public Page<MemberVipExchangeRecords> findAll(Pageable pageable) {
final long total = count();
......@@ -52,42 +114,42 @@ public class MemberVipExchangeRecordsDaoImpl implements MemberVipExchangeRecords
TypedQuery<MemberVipExchangeRecords> query = entityManager.createQuery(SQL, MemberVipExchangeRecords.class);
query.setFirstResult(pageable.getOffset());
query.setMaxResults(pageable.getPageSize());
final Stream<MemberVipExchangeRecords> result = query.getResultStream();
return new Page<MemberVipExchangeRecords>() {
@Override
public long getTotalElements() {
return total;
}
@Override
public Stream<MemberVipExchangeRecords> getResult() {
return result;
}
};
}
@Transactional(propagation = Propagation.REQUIRED)
@Override
public void save(MemberVipExchangeRecords entity) {
entityManager.persist(entity);
}
@Override
public Optional<MemberVipExchangeRecords> findOne(Long primaryKey) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
return Optional.empty();
}
@Override
public Optional<Boolean> edit(MemberVipExchangeRecords updateEntity) {
return Optional.empty();
}
@Override
public Stream<MemberVipExchangeRecords> findAll() {
return Stream.empty();
}
@Override
public long count() {
try {
......@@ -99,9 +161,12 @@ public class MemberVipExchangeRecordsDaoImpl implements MemberVipExchangeRecords
}
return 0L;
}
@Override
public Stream<MemberVipExchangeRecords> findAllByExpire(LocalDateTime lapseDateStart, LocalDateTime lapseDateFinish) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
return entityManager.createQuery("SELECT ver FROM MemberVipExchangeRecords ver WHERE ver.lapseDateTime BETWEEN ?1 AND ?2 ORDER BY ver.entryDateTime DESC", MemberVipExchangeRecords.class)
.setParameter(1, lapseDateStart)
.setParameter(2, lapseDateFinish)
.getResultStream();
}
}
\ No newline at end of file
package com.apobates.forum.member.impl.quartz;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
/**
* Vip会员到期后复位会员的组
*
* @author xiaofanku
* @since 20200921
*/
public class ResetMemberGroupQuartzJob implements Job{
@Override
public void execute(JobExecutionContext jec) throws JobExecutionException {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
}
......@@ -4,18 +4,8 @@ import com.apobates.forum.event.elderly.ForumActionEnum;
import com.apobates.forum.event.elderly.MemberActionDescriptor;
import com.apobates.forum.member.MemberProfile;
import com.apobates.forum.member.MemberProfileBean;
import com.apobates.forum.member.dao.ForumScoreRoleDao;
import com.apobates.forum.member.dao.MemberActiveRecordsDao;
import com.apobates.forum.member.dao.MemberDao;
import com.apobates.forum.member.dao.MemberNamesProtectDao;
import com.apobates.forum.member.dao.RegisteInviteCodeDao;
import com.apobates.forum.member.entity.ForumScoreRole;
import com.apobates.forum.member.entity.Member;
import com.apobates.forum.member.entity.MemberGroupEnum;
import com.apobates.forum.member.entity.MemberNamesProtect;
import com.apobates.forum.member.entity.MemberRoleEnum;
import com.apobates.forum.member.entity.MemberStatusEnum;
import com.apobates.forum.member.entity.RegisteInviteCode;
import com.apobates.forum.member.dao.*;
import com.apobates.forum.member.entity.*;
import com.apobates.forum.member.exception.MemberNamesExistException;
import com.apobates.forum.member.exception.MemberNamesProtectException;
import com.apobates.forum.member.impl.MemberAction;
......@@ -70,6 +60,8 @@ public class MemberServiceImpl implements MemberService{
@Autowired
private MemberLevelService memberLevelService;
@Autowired
private MemberVipExchangeRecordsDao memberVipExchangeRecordsDao;
@Autowired
private MemberEventPublisher memberEventPublisher;
private final static Logger logger = LoggerFactory.getLogger(MemberServiceImpl.class);
......@@ -320,7 +312,28 @@ public class MemberServiceImpl implements MemberService{
}catch(IllegalArgumentException e){}
return Map.ofEntries(Map.entry("code", inviteCode), Map.entry("id", String.valueOf(inviteCodeId)));
}
@Override
public Optional<Boolean> exchangeVIP(long memberId, int duration, ForumCalendarUnitEnum unit)throws IllegalStateException, IllegalArgumentException {
if(memberId<=1){
return Optional.empty();
}
Member m = get(memberId).orElseThrow(()->new IllegalArgumentException("会员不存在或暂时无法访问"));
if(MemberGroupEnum.CARD != m.getMgroup()){
throw new IllegalArgumentException("不被支持的角色变更");
}
if(ForumCalendarUnitEnum.MONTH != unit && ForumCalendarUnitEnum.YEAR != unit ){
throw new IllegalArgumentException("支持的日期单位: Month or Year");
}
int limit = duration<=1?1:duration;
try{
memberVipExchangeRecordsDao.save(new MemberVipExchangeRecords(memberId, m.getNickname(), limit, unit));
return Optional.of(true);
}catch(Exception e){
throw new IllegalStateException("提升VIP操作失败");
}
}
private Optional<Member> securityMember(Member member) {
if (null == member) {
return Optional.empty();
......
......@@ -6,6 +6,7 @@ import com.apobates.forum.member.service.MemberVipExchangeRecordsService;
import com.apobates.forum.utils.persistence.Page;
import java.time.LocalDateTime;
import java.util.stream.Stream;
import com.apobates.forum.utils.persistence.Pageable;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -21,17 +22,17 @@ public class MemberVipExchangeRecordsServiceImpl implements MemberVipExchangeRec
@Autowired
private MemberVipExchangeRecordsDao memberVipExchangeRecordsDao;
private final static Logger logger = LoggerFactory.getLogger(MemberVipExchangeRecordsServiceImpl.class);
@Override
public Page<MemberVipExchangeRecords> getAll(LocalDateTime start, LocalDateTime finish) {
return memberVipExchangeRecordsDao.findAll(start, finish);
public Page<MemberVipExchangeRecords> getAll(LocalDateTime start, LocalDateTime finish, Pageable pageable) {
return memberVipExchangeRecordsDao.findAll(start, finish, pageable);
}
@Override
public Page<MemberVipExchangeRecords> getAll(long memberId) {
return memberVipExchangeRecordsDao.findAllByMember(memberId);
public Page<MemberVipExchangeRecords> getAll(long memberId, Pageable pageable) {
return memberVipExchangeRecordsDao.findAllByMember(memberId, pageable);
}
@Override
public Stream<MemberVipExchangeRecords> getRecent(int size) {
return memberVipExchangeRecordsDao.findAllOfRecent(size);
......
......@@ -14,6 +14,7 @@ open module MemberImpl {
requires spring.tx;
requires org.slf4j;
requires transitive Member;
requires quartz;
exports com.apobates.forum.member.impl;
exports com.apobates.forum.member.impl.service;
}
\ No newline at end of file
......@@ -2,6 +2,7 @@ package com.apobates.forum.member.dao;
import com.apobates.forum.member.entity.MemberVipExchangeRecords;
import com.apobates.forum.utils.persistence.Page;
import com.apobates.forum.utils.persistence.Pageable;
import com.apobates.forum.utils.persistence.PagingAndSortingRepository;
import java.time.LocalDateTime;
import java.util.stream.Stream;
......@@ -16,18 +17,20 @@ public interface MemberVipExchangeRecordsDao extends PagingAndSortingRepository<
* 查看指定会员的VIP交易记录
*
* @param memberId 会员ID
* @param pageable 分页请求参数
* @return
*/
Page<MemberVipExchangeRecords> findAllByMember(long memberId);
Page<MemberVipExchangeRecords> findAllByMember(long memberId, Pageable pageable);
/**
* 查看指定日期范围的VIP交易记录
*
* @param start 开始日期
* @param finish 结束日期
* @param pageable 分页请求参数
* @return
*/
Page<MemberVipExchangeRecords> findAll(LocalDateTime start, LocalDateTime finish);
Page<MemberVipExchangeRecords> findAll(LocalDateTime start, LocalDateTime finish, Pageable pageable);
/**
* 最近的VIP交易记录
......
......@@ -3,10 +3,7 @@ package com.apobates.forum.member.service;
import com.apobates.forum.event.elderly.ForumActionEnum;
import com.apobates.forum.event.elderly.MemberActionDescriptor;
import com.apobates.forum.member.MemberProfileBean;
import com.apobates.forum.member.entity.Member;
import com.apobates.forum.member.entity.MemberGroupEnum;
import com.apobates.forum.member.entity.MemberRoleEnum;
import com.apobates.forum.member.entity.MemberStatusEnum;
import com.apobates.forum.member.entity.*;
import com.apobates.forum.member.exception.MemberNamesExistException;
import com.apobates.forum.member.exception.MemberNamesProtectException;
import java.time.LocalDateTime;
......@@ -162,7 +159,17 @@ public interface MemberService {
* @return
*/
Optional<Boolean> signOut(String memberNames, Member member, MemberActionDescriptor actionDescriptor);
/**
* 将会员的默认组(CARD)提升至VIP
*
* @param memberId 会员ID
* @param duration 有效日期时长
* @param unit 有效日期单位,只接受ForumCalendarUnitEnum.MONTH(月),只接受ForumCalendarUnitEnum.YEAR(年)
* @return
*/
Optional<Boolean> exchangeVIP(long memberId, int duration, ForumCalendarUnitEnum unit)throws IllegalStateException, IllegalArgumentException;
/**
* 查看指定的会员
*
......
......@@ -2,6 +2,7 @@ package com.apobates.forum.member.service;
import com.apobates.forum.member.entity.MemberVipExchangeRecords;
import com.apobates.forum.utils.persistence.Page;
import com.apobates.forum.utils.persistence.Pageable;
import java.time.LocalDateTime;
import java.util.stream.Stream;
......@@ -16,17 +17,19 @@ public interface MemberVipExchangeRecordsService {
*
* @param start 开始日期
* @param finish 结束日期
* @param pageable 分页请求参数
* @return
*/
Page<MemberVipExchangeRecords> getAll(LocalDateTime start, LocalDateTime finish);
Page<MemberVipExchangeRecords> getAll(LocalDateTime start, LocalDateTime finish, Pageable pageable);
/**
* 查看指定会员的VIP交易记录
*
* @param memberId 会员ID
* @param pageable 分页请求参数
* @return
*/
Page<MemberVipExchangeRecords> getAll(long memberId);
Page<MemberVipExchangeRecords> getAll(long memberId, Pageable pageable);
/**
* 最近的VIP交易记录
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册