MemberPenalizeRecordsServiceImpl.java 3.8 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;
街头小贩's avatar
街头小贩 已提交
6
import com.apobates.forum.member.impl.event.MemberEventPublisher;
7
import com.apobates.forum.member.impl.event.MemberPenalizeEvent;
8
import com.apobates.forum.member.service.MemberPenalizeRecordsService;
9
import com.apobates.forum.utils.DateTimeUtils;
10 11 12 13
import com.apobates.forum.utils.persistence.Page;
import com.apobates.forum.utils.persistence.Pageable;
import java.util.Optional;
import java.util.stream.Stream;
14 15
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
16 17 18 19 20 21 22 23 24 25 26 27
import org.springframework.beans.factory.annotation.Autowired;
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
街头小贩's avatar
街头小贩 已提交
31
    private MemberEventPublisher memberEventPublisher;
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
        MemberPenalizeRecords obj = get(id).orElseThrow(()->new IllegalArgumentException("会员惩罚记录不存在"));
        //是否正处于惩罚期
        boolean isDoing = DateTimeUtils.isFeatureDate(obj.getRebirthDateTime());
        if (isDoing) {
40
            throw new IllegalStateException("会员惩罚进行中,不可以作废");
41
        }
42
        Optional<Boolean> result = memberPenalizeRecordsDao.expired(obj.getId());
43 44 45 46 47
        //编辑成功 && 惩罚进行时(会员的状态变了)
        if (result.isPresent() && obj.isStatus()) {
            memberDao.editMemberStatus(obj.getMemberId(), obj.getOriginal());
        }
        return result;
48 49 50
    }
    
    @Override
51
    public long create(MemberPenalizeRecords entity)throws IllegalArgumentException {
52 53 54 55 56 57 58
        if (memberPenalizeRecordsDao.countForMember(entity.getMemberId()) > 0) {
            throw new IllegalArgumentException("会员已经处于惩罚期");
        }
        try {
            memberPenalizeRecordsDao.save(entity);
            if (entity.getId() > 0) {
                // 应该在惩罚生效时发送,暂不支持预定日期的惩罚,只支持即可生效
街头小贩's avatar
街头小贩 已提交
59 60 61
                memberEventPublisher.publishPenalizeEvent(
                        new MemberPenalizeEvent(this,
                                entity.getMemberId(),
62 63 64 65 66
                                entity.getMemberNickname(),
                                entity.getArrive(),
                                entity.getDuration(),
                                entity.getJudger(),
                                entity.getJudgeNickname(),
街头小贩's avatar
街头小贩 已提交
67
                                entity.getReason()));
68
                return entity.getId();
69 70
            }
        } catch (Exception e) {
71 72 73
            if(logger.isDebugEnabled()){
                logger.debug("创建会员惩罚记录失败", e);
            }
74
        }
75
        return 0L;
76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97
    }
    
    @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);
    }
}