package com.apobates.forum.member.impl.service; 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.impl.event.MemberEventPublisher; import com.apobates.forum.member.impl.event.MemberPenalizeEvent; import com.apobates.forum.member.service.MemberPenalizeRecordsService; import com.apobates.forum.utils.DateTimeUtils; 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.slf4j.Logger; import org.slf4j.LoggerFactory; 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; @Autowired private MemberDao memberDao; @Autowired private MemberEventPublisher memberEventPublisher; private final static Logger logger = LoggerFactory.getLogger(MemberPenalizeRecordsServiceImpl.class); @Override public Optional expired(long id)throws IllegalArgumentException,IllegalStateException { MemberPenalizeRecords obj = get(id).orElseThrow(()->new IllegalArgumentException("会员惩罚记录不存在")); //是否正处于惩罚期 boolean isDoing = DateTimeUtils.isFeatureDate(obj.getRebirthDateTime()); if (isDoing) { throw new IllegalStateException("会员惩罚进行中,不可以作废"); } Optional result = memberPenalizeRecordsDao.expired(obj.getId()); //编辑成功 && 惩罚进行时(会员的状态变了) if (result.isPresent() && obj.isStatus()) { memberDao.editMemberStatus(obj.getMemberId(), obj.getOriginal()); } return result; } @Override public long create(MemberPenalizeRecords entity)throws IllegalArgumentException { 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 entity.getId(); } } catch (Exception e) { if(logger.isDebugEnabled()){ logger.debug("创建会员惩罚记录失败", e); } } return 0L; } @Override public Page getAll(Pageable pageable) { return memberPenalizeRecordsDao.findAll(pageable); } @Override public Page getAll(long buildMemberId, Pageable pageable) { return memberPenalizeRecordsDao.findAll(buildMemberId, pageable); } @Override public Stream getByMember(long memberId) { return memberPenalizeRecordsDao.findAllByMember(memberId); } @Override public Optional get(long id) { return memberPenalizeRecordsDao.findOne(id); } }