MemberPenalizeRecordsServiceImpl.java 3.6 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 7
import com.apobates.forum.member.impl.event.MemberEventPublisher;
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 14 15 16 17 18 19 20 21 22 23 24 25
import com.apobates.forum.utils.persistence.Page;
import com.apobates.forum.utils.persistence.Pageable;
import java.util.Optional;
import java.util.stream.Stream;
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;
26 27 28 29
    @Autowired
    private MemberDao memberDao;
    @Autowired
    private MemberEventPublisher memberEventPublisher;
30 31 32
    
    @Override
    public Optional<Boolean> expired(long id) {
33 34 35 36 37 38 39 40 41 42 43 44 45
        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;
46 47 48 49
    }
    
    @Override
    public Optional<Long> create(MemberPenalizeRecords entity) {
50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
        if (memberPenalizeRecordsDao.countForMember(entity.getMemberId()) > 0) {
            throw new IllegalArgumentException("会员已经处于惩罚期");
        }
        
        try {
            memberPenalizeRecordsDao.save(entity);
            if (entity.getId() > 0) {
                // 应该在惩罚生效时发送,暂不支持预定日期的惩罚,只支持即可生效
                memberEventPublisher.publishPenalizeEvent(
                        new MemberPenalizeEvent(this,
                                entity.getMemberId(),
                                entity.getMemberNickname(),
                                entity.getArrive(),
                                entity.getDuration(),
                                entity.getJudger(),
                                entity.getJudgeNickname(),
                                entity.getReason()));
                return Optional.of(entity.getId());
            }
        } catch (Exception e) {
            return Optional.ofNullable(null); //failure(e.getMessage(), e);
        }
        throw new IllegalStateException("创建会员惩罚记录失败");
73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
    }
    
    @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);
    }
}