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

增加MemberVipExchangeRecords作废方法

上级 cc7c8351
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;
......@@ -14,6 +17,7 @@ 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;
......@@ -84,8 +88,12 @@ public class MemberPenalizeRecordsDaoImpl implements MemberPenalizeRecordsDao{
}
@Transactional(propagation = Propagation.REQUIRED)
@Override
public Optional<Boolean> editStatus(long id, boolean status) {
int affect = entityManager.createQuery("UPDATE MemberPenalizeRecords mpr SET mpr.status = ?1 WHERE mpr.id = ?2").setParameter(1, status).setParameter(2, id).executeUpdate();
public Optional<Boolean> expired(long id) {
int affect = entityManager.createQuery("UPDATE MemberPenalizeRecords mpr SET mpr.status = ?1 WHERE mpr.id = ?2 AND mpr.status = ?3")
.setParameter(1, false)
.setParameter(2, id)
.setParameter(3, true)
.executeUpdate();
if (affect == 1) {
return Optional.of(true);
}
......@@ -93,15 +101,15 @@ public class MemberPenalizeRecordsDaoImpl implements MemberPenalizeRecordsDao{
}
@Transactional(propagation = Propagation.REQUIRED)
@Override
public int editStatus(Collection<Long> idList, boolean status) {
public int expired(Collection<Long> idList) {//, boolean status
int affect = 0;
Query query = entityManager.createQuery("UPDATE MemberPenalizeRecords mpr SET mpr.status = ?1 WHERE mpr.id = ?2");
Query query = entityManager.createQuery("UPDATE MemberPenalizeRecords mpr SET mpr.status = ?1 WHERE mpr.id = ?2 AND mpr.status = ?3");
for (Long id : idList) {
affect += query.setParameter(1, status).setParameter(2, id).executeUpdate();
affect += query.setParameter(1, false).setParameter(2, id).setParameter(3, true).executeUpdate();
}
return affect;
}
@Override
public long countForMember(long memberId) {
return entityManager.createQuery("SELECT COUNT(mpr) FROM MemberPenalizeRecords mpr WHERE mpr.memberId = ?1 AND mpr.status = ?2", Long.class)
......@@ -144,15 +152,10 @@ public class MemberPenalizeRecordsDaoImpl implements MemberPenalizeRecordsDao{
public Optional<MemberPenalizeRecords> findOne(Long primaryKey) {
return Optional.ofNullable(entityManager.find(MemberPenalizeRecords.class, primaryKey));
}
@Transactional(propagation = Propagation.REQUIRED)
@Override
public Optional<Boolean> edit(MemberPenalizeRecords updateEntity) {
try {
entityManager.merge(updateEntity);
return Optional.of(true);
} catch (Exception e) {
return Optional.empty();
}
return Optional.empty();
}
@Override
......
......@@ -5,10 +5,12 @@ 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.Collection;
import java.util.Optional;
import java.util.stream.Stream;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import javax.persistence.TypedQuery;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
......@@ -137,7 +139,7 @@ public class MemberVipExchangeRecordsDaoImpl implements MemberVipExchangeRecords
@Override
public Optional<MemberVipExchangeRecords> findOne(Long primaryKey) {
return Optional.empty();
return Optional.ofNullable(entityManager.find(MemberVipExchangeRecords.class, primaryKey));
}
@Override
......@@ -169,4 +171,28 @@ public class MemberVipExchangeRecordsDaoImpl implements MemberVipExchangeRecords
.setParameter(2, lapseDateFinish)
.getResultStream();
}
@Transactional(propagation = Propagation.REQUIRED)
@Override
public int expired(Collection<Long> idList) {
int affect = 0;
Query query = entityManager.createQuery("UPDATE MemberVipExchangeRecords ver SET ver.status = ?1 WHERE ver.id = ?2 AND ver.status = ?3");
for (Long id : idList) {
affect += query.setParameter(1, false).setParameter(2, id).setParameter(3, true).executeUpdate();
}
return affect;
}
@Transactional(propagation = Propagation.REQUIRED)
@Override
public Optional<Boolean> expired(long id) {
int affect = entityManager.createQuery("UPDATE MemberVipExchangeRecords ver SET ver.status = ?1 WHERE ver.id = ?2 AND ver.status = ?3")
.setParameter(1, false)
.setParameter(2, id)
.setParameter(3, true)
.executeUpdate();
if (affect == 1) {
return Optional.of(true);
}
return Optional.empty();
}
}
\ No newline at end of file
......@@ -54,7 +54,7 @@ public class PenalizeQuartzJob implements Job{
penalizeIds.add(mpr.getId());
memberStatus.put(mpr.getMemberId(), mpr.getOriginal()); //回到原来的状态
}
memberPenalizeRecordsDao.editStatus(penalizeIds, false);
memberPenalizeRecordsDao.expired(penalizeIds); //false
memberDao.editMemberStatus(memberStatus);
logger.info("[QuartzTask][Member][1]会员惩罚作业结束");
}
......
......@@ -37,10 +37,9 @@ public class MemberPenalizeRecordsServiceImpl implements MemberPenalizeRecordsSe
//是否正处于惩罚期
boolean isDoing = DateTimeUtils.isFeatureDate(obj.getRebirthDateTime());
if (isDoing) {
throw new IllegalStateException("会员惩罚进行中,不可以删除");
throw new IllegalStateException("会员惩罚进行中,不可以作废");
}
obj.setStatus(false);
Optional<Boolean> result = memberPenalizeRecordsDao.edit(obj);
Optional<Boolean> result = memberPenalizeRecordsDao.expired(obj.getId());
//编辑成功 && 惩罚进行时(会员的状态变了)
if (result.isPresent() && obj.isStatus()) {
memberDao.editMemberStatus(obj.getMemberId(), obj.getOriginal());
......
package com.apobates.forum.member.impl.service;
import com.apobates.forum.member.dao.MemberDao;
import com.apobates.forum.member.dao.MemberVipExchangeRecordsDao;
import com.apobates.forum.member.entity.MemberGroupEnum;
import com.apobates.forum.member.entity.MemberPenalizeRecords;
import com.apobates.forum.member.entity.MemberVipExchangeRecords;
import com.apobates.forum.member.service.MemberVipExchangeRecordsService;
import com.apobates.forum.utils.DateTimeUtils;
import com.apobates.forum.utils.persistence.Page;
import java.time.LocalDateTime;
import java.util.Optional;
import java.util.stream.Stream;
import com.apobates.forum.utils.persistence.Pageable;
import org.slf4j.Logger;
......@@ -21,6 +26,8 @@ import org.springframework.stereotype.Service;
public class MemberVipExchangeRecordsServiceImpl implements MemberVipExchangeRecordsService{
@Autowired
private MemberVipExchangeRecordsDao memberVipExchangeRecordsDao;
@Autowired
private MemberDao memberDao;
private final static Logger logger = LoggerFactory.getLogger(MemberVipExchangeRecordsServiceImpl.class);
@Override
......@@ -42,4 +49,20 @@ public class MemberVipExchangeRecordsServiceImpl implements MemberVipExchangeRec
public Stream<MemberVipExchangeRecords> getRecent(int size) {
return memberVipExchangeRecordsDao.findAllOfRecent(size);
}
@Override
public Optional<Boolean> expired(long id) throws IllegalArgumentException, IllegalStateException {
MemberVipExchangeRecords obj = memberVipExchangeRecordsDao.findOne(id).orElseThrow(()->new IllegalArgumentException("VIP交易记录不存在"));
//是否正处于惩罚期
boolean isDoing = DateTimeUtils.isFeatureDate(obj.getLapseDateTime());
if (isDoing) {
throw new IllegalStateException("VIP会员未到期,不可以作废");
}
Optional<Boolean> result = memberVipExchangeRecordsDao.expired(obj.getId());
//编辑成功 && 惩罚进行时(会员的状态变了)
if (result.isPresent() && obj.isStatus()) {
memberDao.editMemberGroup(obj.getMemberId(), MemberGroupEnum.CARD);
}
return result;
}
}
\ No newline at end of file
package com.apobates.forum.member.dao;
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 com.apobates.forum.utils.persistence.PagingAndSortingRepository;
import java.time.LocalDateTime;
import java.util.Collection;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Stream;
......@@ -43,23 +45,21 @@ public interface MemberPenalizeRecordsDao extends PagingAndSortingRepository<Mem
Stream<MemberPenalizeRecords> findAll(LocalDateTime start, LocalDateTime finish);
/**
* 更新惩罚记录的状态
* 将指定惩罚记录的作废
*
* @param id 惩罚记录ID
* @param status 状态
* @return
*/
Optional<Boolean> editStatus(long id, boolean status);
Optional<Boolean> expired(long id);
/**
* 更新惩罚记录的状态
* 将指定惩罚记录的作废
*
* @param idList 惩罚记录ID列表
* @param status 状态
* @return
*/
int editStatus(Collection<Long> idList, boolean status);
int expired(Collection<Long> idList);
/**
* 统计指定会员的惩罚记录
*
......
......@@ -5,6 +5,8 @@ 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.Collection;
import java.util.Optional;
import java.util.stream.Stream;
/**
......@@ -48,4 +50,20 @@ public interface MemberVipExchangeRecordsDao extends PagingAndSortingRepository<
* @return
*/
Stream<MemberVipExchangeRecords> findAllByExpire(LocalDateTime lapseDateStart, LocalDateTime lapseDateFinish);
/**
* 将指定的VIP交易记录作废
*
* @param idList 惩罚记录ID列表
* @return
*/
int expired(Collection<Long> idList);
/**
* 将指定的VIP交易记录作废
*
* @param id VIP交易记录ID
* @return
*/
Optional<Boolean> expired(long id);
}
\ No newline at end of file
......@@ -4,6 +4,7 @@ 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.Optional;
import java.util.stream.Stream;
/**
......@@ -46,4 +47,12 @@ public interface MemberVipExchangeRecordsService {
* @return
*/
Stream<MemberVipExchangeRecords> getRecent(int size);
/**
* 手动结束VIP交易记录.必须是交易记录已经到期
*
* @param id VIP交易记录ID
* @return
*/
Optional<Boolean> expired(long id)throws IllegalArgumentException,IllegalStateException;
}
\ No newline at end of file
......@@ -114,7 +114,7 @@ public class AdminMemberPenalizeRecordsController {
return "admin/member_penalize/create";
}
//手动结束惩罚(作业失败)
//手动结束惩罚
@PostMapping(path = "/expire", produces = "application/json;charset=UTF-8")
@ResponseBody
public TipMessage removePenalizeAction(
......@@ -124,7 +124,7 @@ public class AdminMemberPenalizeRecordsController {
Model model) {
try{
if (memberPenalizeRecordsService.expired(id).orElse(false)) {
return TipMessage.ofSuccess("惩罚手动过期成功");
return TipMessage.ofSuccess("惩罚记录成功结束");
}
}catch(IllegalArgumentException | IllegalStateException e){
return TipMessage.ofError(e.getMessage());
......
......@@ -15,6 +15,7 @@ import javax.validation.Valid;
import com.apobates.forum.utils.Commons;
import com.apobates.forum.utils.DateTimeUtils;
import com.apobates.forum.utils.FrontPageURL;
import com.apobates.forum.utils.TipMessage;
import com.apobates.forum.utils.persistence.Page;
import com.apobates.forum.utils.persistence.PageRequest;
import com.apobates.forum.utils.persistence.Pageable;
......@@ -23,11 +24,8 @@ import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.*;
/**
*
* @author xiaofanku
......@@ -143,4 +141,21 @@ public class AdminMemberVipExchangeRecordsController {
model.addAttribute("pageData", fpbuild.toPageData(pr, rs.getTotalElements()));
return "admin/member_exchange/query_range";
}
//手动作废交易记录
@PostMapping(path = "/expire", produces = "application/json;charset=UTF-8")
@ResponseBody
public TipMessage recycleExchangeAction(
@RequestParam("id") long id,
MemberSessionBean mbean,
HttpServletRequest request,
Model model) {
try{
if (memberVipExchangeRecordsService.expired(id).orElse(false)) {
return TipMessage.ofSuccess("交易记录成功作废");
}
}catch(IllegalArgumentException | IllegalStateException e){
return TipMessage.ofError(e.getMessage());
}
return TipMessage.ofError("操作失败");
}
}
......@@ -96,7 +96,9 @@
<td><forum:date value="${exchange.lapseDateTime}"/></td>
<td><forum:print value="${exchange.status}" trueTitle="使用" falseTitle="结束"/></td>
<td>&nbsp;</td>
<td>
<a class="btn btn-primary action-cmd" role="button" href="javascript:;" data-handler="${ADMIN}/member/exchange/expire" data-query="id:${exchange.id}">手动作废</a>
</td>
</tr>
</c:forEach>
</tbody>
......
......@@ -96,7 +96,9 @@
<td><forum:date value="${exchange.lapseDateTime}"/></td>
<td><forum:print value="${exchange.status}" trueTitle="使用" falseTitle="结束"/></td>
<td>&nbsp;</td>
<td>
<a class="btn btn-primary action-cmd" role="button" href="javascript:;" data-handler="${ADMIN}/member/exchange/expire" data-query="id:${exchange.id}">手动作废</a>
</td>
</tr>
</c:forEach>
</tbody>
......
......@@ -96,7 +96,9 @@
<td><forum:date value="${exchange.lapseDateTime}"/></td>
<td><forum:print value="${exchange.status}" trueTitle="使用" falseTitle="结束"/></td>
<td>&nbsp;</td>
<td>
<a class="btn btn-primary action-cmd" role="button" href="javascript:;" data-handler="${ADMIN}/member/exchange/expire" data-query="id:${exchange.id}">手动作废</a>
</td>
</tr>
</c:forEach>
</tbody>
......
......@@ -10,7 +10,7 @@
<div class="row invoice">
<div class="col-sm-12">
<div>
<h1>JForum <p class="lead">一个小论坛, 一个Java单体应用, 一个SSJ项目, 一个模块化项目</p></h1>
<h1>JForum2 <p class="lead">一个小论坛, 一个Java单体应用, 一个SSJ项目, 一个模块化项目</p></h1>
</div>
<div class="row">
<div class="col-sm-7">
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册