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

更新VIP交易记录作业

上级 ad900a9b
......@@ -11,6 +11,7 @@ open module CoreImpl {
requires Member;
requires Event;
requires Utils;
requires java.persistence;
exports com.apobates.forum.core.impl;
exports com.apobates.forum.core.impl.service;
}
\ No newline at end of file
......@@ -8,6 +8,7 @@ open module LetterboxImpl {
requires Attention;
requires Utils;
requires Event;
requires java.persistence;
exports com.apobates.forum.letterbox.impl;
exports com.apobates.forum.letterbox.impl.service;
}
\ No newline at end of file
......@@ -2,7 +2,8 @@ package com.apobates.forum.member.impl;
import com.apobates.forum.member.impl.quartz.AutowiringSpringBeanJobFactory;
import com.apobates.forum.member.impl.quartz.DuplicateOLRecordsQuartzJob;
import com.apobates.forum.member.impl.quartz.PenalizeQuartzJob;
import com.apobates.forum.member.impl.quartz.PenalizeResetMemberStatusQuartzJob;
import com.apobates.forum.member.impl.quartz.VipExchangeResetMemberGroupQuartzJob;
import java.io.IOException;
import java.util.Properties;
import javax.sql.DataSource;
......@@ -32,13 +33,24 @@ import org.springframework.scheduling.quartz.SimpleTriggerFactoryBean;
@Configuration
public class MemberTaskScheduleConfig {
private final static Logger logger = LoggerFactory.getLogger(MemberTaskScheduleConfig.class);
//
//loop Job
@Bean("vipExchangeJob")
public JobDetailFactoryBean vipExchangeScheduleJob(){
JobDetailFactoryBean factoryBean = new JobDetailFactoryBean();
factoryBean.setJobClass(VipExchangeResetMemberGroupQuartzJob.class);
factoryBean.setDurability(true);
return factoryBean;
}
@Bean(name = "vipExchangeJobTrigger")
public SimpleTriggerFactoryBean vipExchangeScheduleJobTrigger(@Qualifier("vipExchangeJob") JobDetail jobDetail) {
return createTrigger(jobDetail, 60000);
}
//loop Job
@Bean("penalizeJob")
public JobDetailFactoryBean penalizeScheduleJob() {
JobDetailFactoryBean factoryBean = new JobDetailFactoryBean();
factoryBean.setJobClass(PenalizeQuartzJob.class);
// job has to be durable to be stored in DB:
factoryBean.setJobClass(PenalizeResetMemberStatusQuartzJob.class);
factoryBean.setDurability(true);
return factoryBean;
}
......@@ -46,6 +58,8 @@ public class MemberTaskScheduleConfig {
public SimpleTriggerFactoryBean penalizeScheduleJobTrigger(@Qualifier("penalizeJob") JobDetail jobDetail) {
return createTrigger(jobDetail, 60000);
}
//loop Job
@Bean("duplicateOLRecordsJob")
public JobDetailFactoryBean duplicateOLRecordsScheduleJob() {
JobDetailFactoryBean factoryBean = new JobDetailFactoryBean();
......@@ -71,14 +85,15 @@ public class MemberTaskScheduleConfig {
DataSource dataSource,
JobFactory jobFactory,
@Qualifier("penalizeJobTrigger") SimpleTriggerFactoryBean penalizeJobTrigger,
@Qualifier("duplicateOLRecordsJobTrigger") SimpleTriggerFactoryBean duplicateOLRecordsJobTrigger) throws IOException {
@Qualifier("duplicateOLRecordsJobTrigger") SimpleTriggerFactoryBean duplicateOLRecordsJobTrigger,
@Qualifier("vipExchangeJobTrigger") SimpleTriggerFactoryBean vipExchangeScheduleJobTrigger) throws IOException {
SchedulerFactoryBean factory = new SchedulerFactoryBean();
// this allows to update triggers in DB when updating settings in config file:
factory.setOverwriteExistingJobs(true);
factory.setDataSource(dataSource);
factory.setJobFactory(jobFactory);
factory.setQuartzProperties(quartzProperties());
factory.setTriggers(penalizeJobTrigger.getObject(), duplicateOLRecordsJobTrigger.getObject());
factory.setTriggers(penalizeJobTrigger.getObject(), duplicateOLRecordsJobTrigger.getObject(), vipExchangeScheduleJobTrigger.getObject());
return factory;
}
@Bean
......
......@@ -8,18 +8,13 @@ import com.apobates.forum.member.entity.MemberStatusEnum;
import com.apobates.forum.utils.Commons;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.EnumMap;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.Map.Entry;
import java.util.Optional;
import java.util.TreeMap;
import java.util.stream.Stream;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
......@@ -166,7 +161,19 @@ public class MemberDaoImpl implements MemberDao {
}
return affect;
}
@Transactional(propagation = Propagation.REQUIRED)
@Override
public int editMemberGroup(Set<Long> updateMemberIds) {
int affect = 0;
for (Long memberId : updateMemberIds) {
if (editMemberGroup(memberId, MemberGroupEnum.CARD)) {
affect += 1;
}
}
return affect;
}
@Override
public Optional<String> getAvatar(long id) {
try {
......
package com.apobates.forum.member.impl.dao;
import com.apobates.forum.member.dao.MemberDao;
import com.apobates.forum.member.dao.MemberPenalizeRecordsDao;
import com.apobates.forum.member.entity.MemberPenalizeRecords;
import com.apobates.forum.member.entity.MemberStatusEnum;
import com.apobates.forum.utils.persistence.Page;
import com.apobates.forum.utils.persistence.Pageable;
import java.time.LocalDateTime;
import java.util.Collection;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Stream;
import javax.persistence.EntityManager;
......@@ -17,7 +14,6 @@ import javax.persistence.Query;
import javax.persistence.TypedQuery;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
......@@ -78,7 +74,7 @@ public class MemberPenalizeRecordsDaoImpl implements MemberPenalizeRecordsDao{
}
@Override
public Stream<MemberPenalizeRecords> findAll(LocalDateTime start, LocalDateTime finish) {
public Stream<MemberPenalizeRecords> findAllByExpire(LocalDateTime start, LocalDateTime finish) {
final String SQL = "SELECT mpr FROM MemberPenalizeRecords mpr WHERE mpr.status = :sta AND mpr.rebirthDateTime BETWEEN :art AND :ish";
return entityManager.createQuery(SQL, MemberPenalizeRecords.class)
.setParameter("sta", true)
......
......@@ -26,14 +26,14 @@ import org.springframework.beans.factory.annotation.Value;
* @author xiaofanku
* @since 20200611
*/
public class PenalizeQuartzJob implements Job{
public class PenalizeResetMemberStatusQuartzJob implements Job{
@Autowired
private MemberPenalizeRecordsDao memberPenalizeRecordsDao;
@Autowired
private MemberDao memberDao;
@Value("${site.appname}")
private String appName;
private final static Logger logger = LoggerFactory.getLogger(PenalizeQuartzJob.class);
private final static Logger logger = LoggerFactory.getLogger(PenalizeResetMemberStatusQuartzJob.class);
@Override
public void execute(JobExecutionContext jec) throws JobExecutionException {
......@@ -41,7 +41,7 @@ public class PenalizeQuartzJob implements Job{
LocalDateTime finish = LocalDateTime.now();
LocalDateTime start = DateTimeUtils.beforeMinuteForDate(finish, 1); //作业的执行周期
//
List<MemberPenalizeRecords> data = memberPenalizeRecordsDao.findAll(start, finish).collect(Collectors.toList());
List<MemberPenalizeRecords> data = memberPenalizeRecordsDao.findAllByExpire(start, finish).collect(Collectors.toList());
if (data.isEmpty()) { //没有结果
logger.info("[QuartzTask][Member][1]没有惩罚记录,作业退出");
return;
......
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.
}
}
package com.apobates.forum.member.impl.quartz;
import com.apobates.forum.member.dao.MemberDao;
import com.apobates.forum.member.dao.MemberVipExchangeRecordsDao;
import com.apobates.forum.member.entity.MemberVipExchangeRecords;
import com.apobates.forum.utils.DateTimeUtils;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import java.time.LocalDateTime;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
/**
* Vip会员到期后复位会员的组
*
* @author xiaofanku
* @since 20200921
*/
public class VipExchangeResetMemberGroupQuartzJob implements Job{
@Autowired
private MemberVipExchangeRecordsDao memberVipExchangeRecordsDao;
@Autowired
private MemberDao memberDao;
@Value("${site.appname}")
private String appName;
private final static Logger logger = LoggerFactory.getLogger(VipExchangeResetMemberGroupQuartzJob.class);
@Override
public void execute(JobExecutionContext jec) throws JobExecutionException {
logger.info(String.format("[%s][QuartzTask][Member][3]VIP交易记录作业开始", appName));
LocalDateTime finish = LocalDateTime.now();
LocalDateTime start = DateTimeUtils.beforeMinuteForDate(finish, 1); //作业的执行周期
//
List<MemberVipExchangeRecords> data = memberVipExchangeRecordsDao.findAllByExpire(start, finish).collect(Collectors.toList());
if (data.isEmpty()) { //没有结果
logger.info("[QuartzTask][Member][3]没有VIP交易记录,作业退出");
return;
}
//
Set<Long> exchangeIds = new HashSet<>();
Set<Long> memberIds = new HashSet<>();
//
for (MemberVipExchangeRecords ver : data) {
exchangeIds.add(ver.getId());
memberIds.add(ver.getMemberId());
}
memberVipExchangeRecordsDao.expired(exchangeIds);
memberDao.editMemberGroup(memberIds);
logger.info("[QuartzTask][Member][3]VIP交易记录作业结束");
}
}
......@@ -9,6 +9,7 @@ open module MemberImpl {
requires org.aspectj.runtime;
requires spring.context.support;
requires Event;
requires java.persistence;
exports com.apobates.forum.member.impl;
exports com.apobates.forum.member.impl.event;
exports com.apobates.forum.member.impl.event.listener;
......
......@@ -5,10 +5,7 @@ import com.apobates.forum.member.entity.MemberGroupEnum;
import com.apobates.forum.member.entity.MemberRoleEnum;
import com.apobates.forum.member.entity.MemberStatusEnum;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.TreeMap;
import java.util.*;
import java.util.stream.Stream;
/**
......@@ -91,7 +88,15 @@ public interface MemberDao {
* @return
*/
int editMemberStatus(Map<Long, MemberStatusEnum> status);
/**
* 将指定的会员的组更新为MemberGroupEnum.CARD
*
* @param updateMemberIds 更新的会员ID集合
* @return
*/
int editMemberGroup(Set<Long> updateMemberIds);
/**
* 查看会员的头像
*
......
......@@ -36,13 +36,13 @@ public interface MemberPenalizeRecordsDao extends PagingAndSortingRepository<Mem
Stream<MemberPenalizeRecords> findAllByMember(long memberId);
/**
* 查看指定日期范围内可用的惩罚记录
* 查看指定日期范围内可用的惩罚记录,MemberPenalizeRecords.rebirthDateTime为参考
*
* @param start 开始日期
* @param finish 结束日期
* @return
*/
Stream<MemberPenalizeRecords> findAll(LocalDateTime start, LocalDateTime finish);
Stream<MemberPenalizeRecords> findAllByExpire(LocalDateTime start, LocalDateTime finish);
/**
* 将指定惩罚记录的作废
......
......@@ -43,7 +43,7 @@ public interface MemberVipExchangeRecordsDao extends PagingAndSortingRepository<
Stream<MemberVipExchangeRecords> findAllOfRecent(int size);
/**
* 查看即将到期的VIP交易记录
* 查看即将到期的VIP交易记录,以MemberVipExchangeRecords.lapseDateTime为参考
*
* @param lapseDateStart 到期日期的开始(凌晨)
* @param lapseDateFinish 到期日期的结束(午夜)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册