package com.doumee.service.business.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.doumee.core.constants.ResponseStatus; import com.doumee.core.exception.BusinessException; import com.doumee.core.model.LoginUserInfo; import com.doumee.core.model.PageData; import com.doumee.core.model.PageWrap; import com.doumee.core.utils.Constants; import com.doumee.core.utils.Utils; import com.doumee.dao.business.NoticeMapper; import com.doumee.dao.business.join.MemberJoinMapper; import com.doumee.dao.business.join.NoticeJoinMapper; import com.doumee.dao.business.model.Member; import com.doumee.dao.business.model.Notice; import com.doumee.dao.business.model.Shop; import com.doumee.dao.web.dto.NoticeCardDTO; import com.doumee.dao.system.model.SystemUser; import com.doumee.service.business.NoticeService; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.github.yulichang.wrapper.MPJLambdaWrapper; import org.apache.commons.lang3.StringUtils; import org.apache.shiro.SecurityUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import java.util.Date; import java.util.List; import java.util.Objects; import java.util.stream.Collectors; /** * 消息通知信息表Service实现 * * @author 江蹄蹄 * @date 2023/03/21 15:48 */ @Service public class NoticeServiceImpl implements NoticeService { @Autowired private NoticeMapper noticeMapper; @Autowired private MemberJoinMapper memberJoinMapper; @Autowired private NoticeJoinMapper noticeJoinMapper; @Override @Transactional(rollbackFor = {BusinessException.class,Exception.class}) public Integer create(Notice notice) { LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); if (StringUtils.isEmpty(notice.getTitle()) || StringUtils.isEmpty(notice.getContent()) || notice.getNotifyObject() == null) { throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), ResponseStatus.BAD_REQUEST.getMessage()); } notice.setCreator(user.getId()); notice.setCreateDate(new Date()); notice.setType(Constants.ONE); notice.setIsdeleted(Constants.ZERO); notice.setStatus(Constants.ZERO); if (Constants.equalsInteger(notice.getNotifyObject(), Constants.ZERO)) { //通知对象:用户 getMemberList().stream().forEach(s -> { notice.setId(null); notice.setMemberId(s.getId()); noticeMapper.insert(notice); }); } else if (Constants.equalsInteger(notice.getNotifyObject(), Constants.ONE)) { //通知对象:商户 getShopList().stream().forEach(s -> { notice.setId(null); notice.setMemberId(s.getId()); noticeMapper.insert(notice); }); } return notice.getId(); } /** * 获取有效的所有用户信息 */ public List getMemberList() { Member query = new Member(); query.setIsdeleted(Constants.ZERO); List list = memberJoinMapper.selectList(new QueryWrapper<>(query)); return list; } /** * 获取有效的商家信息 */ public List getShopList() { MPJLambdaWrapper queryWrapper = new MPJLambdaWrapper<>(); queryWrapper.eq(Member::getIsdeleted, Constants.ZERO); queryWrapper.eq(Shop::getIsdeleted, Constants.ZERO); queryWrapper.innerJoin(Shop.class, Shop::getMemberId, Member::getId); List list = memberJoinMapper.selectJoinList(Member.class, queryWrapper); return list; } @Override public void deleteById(Integer id) { LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); Notice notice=new Notice(); notice.setId(id); notice.setIsdeleted(Constants.ONE); notice.setEditor(user.getId()); notice.setEditDate(new Date()); noticeMapper.updateById(notice); } @Override public void delete(Notice notice) { UpdateWrapper deleteWrapper = new UpdateWrapper<>(notice); noticeMapper.delete(deleteWrapper); } @Override public void deleteByIdInBatch(List ids) { if (CollectionUtils.isEmpty(ids)) { return; } noticeMapper.deleteBatchIds(ids); } @Override public void updateById(Notice notice) { LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); notice.setEditor(user.getId()); notice.setEditDate(new Date()); noticeMapper.updateById(notice); } @Override public void updateByIdInBatch(List notices) { if (CollectionUtils.isEmpty(notices)) { return; } for (Notice notice : notices) { this.updateById(notice); } } @Override public Notice findById(Integer id) { MPJLambdaWrapper queryWrapper = new MPJLambdaWrapper<>(); queryWrapper.selectAll(Notice.class); queryWrapper.selectAs(SystemUser::getRealname,Notice::getCreatorName); queryWrapper.selectAs(Shop::getId,Notice::getShopId); queryWrapper.leftJoin(SystemUser.class,SystemUser::getId,Notice::getCreator); queryWrapper.leftJoin(Shop.class,Shop::getId,Notice::getMemberId); queryWrapper.eq(Notice::getId,id); Notice notice= noticeJoinMapper.selectJoinOne(Notice.class,queryWrapper); notice.setNotifyObject(Constants.ZERO); if(Objects.nonNull(notice)&¬ice.getShopId()!=null){ notice.setNotifyObject(Constants.ONE); } return notice; } @Override public Notice findOne(Notice notice) { QueryWrapper wrapper = new QueryWrapper<>(notice); return noticeMapper.selectOne(wrapper); } @Override public List findList(Notice notice) { QueryWrapper wrapper = new QueryWrapper<>(notice); return noticeMapper.selectList(wrapper); } @Override public PageData findPage(PageWrap pageWrap) { IPage page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity()); MPJLambdaWrapper queryWrapper = new MPJLambdaWrapper<>(); Utils.MP.blankToNull(pageWrap.getModel()); queryWrapper.selectAll(Notice.class); queryWrapper.selectAs(SystemUser::getRealname,Notice::getCreatorName); queryWrapper.selectAs(Shop::getId,Notice::getShopId); queryWrapper.leftJoin(SystemUser.class,SystemUser::getId,Notice::getCreator); queryWrapper.leftJoin(Shop.class,Shop::getId,Notice::getMemberId); queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getTitle()),Notice::getTitle,pageWrap.getModel().getTitle()); queryWrapper.eq(Notice::getIsdeleted,Constants.ZERO); queryWrapper.orderByDesc(Notice::getCreateDate); IPage result = noticeJoinMapper.selectJoinPage(page, Notice.class, queryWrapper); result.getRecords().stream().forEach(s->{ s.setNotifyObject(Constants.ZERO); if(s.getShopId()!=null){ s.setNotifyObject(Constants.ONE); } }); return PageData.from(result); } @Override public long count(Notice notice) { QueryWrapper wrapper = new QueryWrapper<>(notice); return noticeMapper.selectCount(wrapper); } @Override public PageData findNoticeCardDTOPage(PageWrap pageWrap) { LoginUserInfo loginUserInfo = (LoginUserInfo)SecurityUtils.getSubject().getPrincipal(); IPage page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity()); LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); Utils.MP.blankToNull(pageWrap.getModel()); queryWrapper.eq(Notice::getType,pageWrap.getModel().getType()) .eq(Notice::getObjMemberId,loginUserInfo.getMemberId()); IPage noticeIPage = noticeMapper.selectPage(page, queryWrapper); if (CollectionUtils.isEmpty(noticeIPage.getRecords())){ return PageData.from(new Page<>()); } List noticeCardDTOs = noticeIPage.getRecords().stream().map(s -> { NoticeCardDTO noticeCardDTO = new NoticeCardDTO(); BeanUtils.copyProperties(s, noticeCardDTO); return noticeCardDTO; }).collect(Collectors.toList()); PageData pageData = new PageData<>(); pageData.setPage(pageWrap.getPage()); pageData.setCapacity(pageWrap.getCapacity()); pageData.setTotal(page.getTotal()); pageData.setRecords(noticeCardDTOs); return pageData; } }