MemberPenalizeRecordsServiceImpl.java 3.7 KB
Newer Older
1 2
package com.apobates.forum.member.impl.service;

3
import com.apobates.forum.member.dao.MemberDao;
4 5
import com.apobates.forum.member.dao.MemberPenalizeRecordsDao;
import com.apobates.forum.member.entity.MemberPenalizeRecords;
6
import com.apobates.forum.member.impl.event.MemberPenalizeEvent;
7
import com.apobates.forum.member.service.MemberPenalizeRecordsService;
8
import com.apobates.forum.utils.DateTimeUtils;
9 10 11 12
import com.apobates.forum.utils.persistence.Page;
import com.apobates.forum.utils.persistence.Pageable;
import java.util.Optional;
import java.util.stream.Stream;
13 14
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
15
import org.springframework.beans.factory.annotation.Autowired;
16
import org.springframework.jms.core.JmsTemplate;
17 18 19 20 21 22 23 24 25 26 27
import org.springframework.stereotype.Service;

/**
 *
 * @author xiaofanku
 * @since 20200515
 */
@Service
public class MemberPenalizeRecordsServiceImpl implements MemberPenalizeRecordsService{
    @Autowired
    private MemberPenalizeRecordsDao memberPenalizeRecordsDao;
28 29 30
    @Autowired
    private MemberDao memberDao;
    @Autowired
31
    private JmsTemplate jmsTemplate;
32
    private final static Logger logger = LoggerFactory.getLogger(MemberPenalizeRecordsServiceImpl.class);
33 34
    
    @Override
35
    public Optional<Boolean> expired(long id)throws IllegalArgumentException,IllegalStateException {
36 37 38 39 40 41 42 43 44 45 46 47 48
        MemberPenalizeRecords obj = get(id).orElseThrow(()->new IllegalArgumentException("会员惩罚记录不存在"));
        //是否正处于惩罚期
        boolean isDoing = DateTimeUtils.isFeatureDate(obj.getRebirthDateTime());
        if (isDoing) {
            throw new IllegalStateException("会员惩罚进行中,不可以删除");
        }
        obj.setStatus(false);
        Optional<Boolean> result = memberPenalizeRecordsDao.edit(obj);
        //编辑成功 && 惩罚进行时(会员的状态变了)
        if (result.isPresent() && obj.isStatus()) {
            memberDao.editMemberStatus(obj.getMemberId(), obj.getOriginal());
        }
        return result;
49 50 51
    }
    
    @Override
52
    public long create(MemberPenalizeRecords entity)throws IllegalArgumentException {
53 54 55 56 57 58 59
        if (memberPenalizeRecordsDao.countForMember(entity.getMemberId()) > 0) {
            throw new IllegalArgumentException("会员已经处于惩罚期");
        }
        try {
            memberPenalizeRecordsDao.save(entity);
            if (entity.getId() > 0) {
                // 应该在惩罚生效时发送,暂不支持预定日期的惩罚,只支持即可生效
60
                new MemberPenalizeEvent(entity.getMemberId(),
61 62 63 64 65
                                entity.getMemberNickname(),
                                entity.getArrive(),
                                entity.getDuration(),
                                entity.getJudger(),
                                entity.getJudgeNickname(),
66
                                entity.getReason()).sendBy(jmsTemplate);
67
                return entity.getId();
68 69
            }
        } catch (Exception e) {
70 71 72
            if(logger.isDebugEnabled()){
                logger.debug("创建会员惩罚记录失败", e);
            }
73
        }
74
        return 0L;
75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
    }
    
    @Override
    public Page<MemberPenalizeRecords> getAll(Pageable pageable) {
        return memberPenalizeRecordsDao.findAll(pageable);
    }
    
    @Override
    public Page<MemberPenalizeRecords> getAll(long buildMemberId, Pageable pageable) {
        return memberPenalizeRecordsDao.findAll(buildMemberId, pageable);
    }
    
    @Override
    public Stream<MemberPenalizeRecords> getByMember(long memberId) {
        return memberPenalizeRecordsDao.findAllByMember(memberId);
    }
    
    @Override
    public Optional<MemberPenalizeRecords> get(long id) {
        return memberPenalizeRecordsDao.findOne(id);
    }
}