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<Member> getMemberList() {
|
Member query = new Member();
|
query.setIsdeleted(Constants.ZERO);
|
List<Member> list = memberJoinMapper.selectList(new QueryWrapper<>(query));
|
return list;
|
}
|
|
/**
|
* 获取有效的商家信息
|
*/
|
public List<Member> getShopList() {
|
MPJLambdaWrapper<Member> queryWrapper = new MPJLambdaWrapper<>();
|
queryWrapper.eq(Member::getIsdeleted, Constants.ZERO);
|
queryWrapper.eq(Shop::getIsdeleted, Constants.ZERO);
|
queryWrapper.innerJoin(Shop.class, Shop::getMemberId, Member::getId);
|
List<Member> 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<Notice> deleteWrapper = new UpdateWrapper<>(notice);
|
noticeMapper.delete(deleteWrapper);
|
}
|
|
@Override
|
public void deleteByIdInBatch(List<Integer> 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<Notice> notices) {
|
if (CollectionUtils.isEmpty(notices)) {
|
return;
|
}
|
for (Notice notice : notices) {
|
this.updateById(notice);
|
}
|
}
|
|
@Override
|
public Notice findById(Integer id) {
|
MPJLambdaWrapper<Notice> 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<Notice> wrapper = new QueryWrapper<>(notice);
|
return noticeMapper.selectOne(wrapper);
|
}
|
|
@Override
|
public List<Notice> findList(Notice notice) {
|
QueryWrapper<Notice> wrapper = new QueryWrapper<>(notice);
|
return noticeMapper.selectList(wrapper);
|
}
|
|
@Override
|
public PageData<Notice> findPage(PageWrap<Notice> pageWrap) {
|
IPage<Notice> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
|
MPJLambdaWrapper<Notice> 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<Notice> 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<Notice> wrapper = new QueryWrapper<>(notice);
|
return noticeMapper.selectCount(wrapper);
|
}
|
|
@Override
|
public PageData<NoticeCardDTO> findNoticeCardDTOPage(PageWrap<Notice> pageWrap) {
|
|
LoginUserInfo loginUserInfo = (LoginUserInfo)SecurityUtils.getSubject().getPrincipal();
|
IPage<Notice> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
|
LambdaQueryWrapper<Notice> queryWrapper = new LambdaQueryWrapper<>();
|
Utils.MP.blankToNull(pageWrap.getModel());
|
queryWrapper.eq(Notice::getType,pageWrap.getModel().getType())
|
.eq(Notice::getObjMemberId,loginUserInfo.getMemberId());
|
IPage<Notice> noticeIPage = noticeMapper.selectPage(page, queryWrapper);
|
|
if (CollectionUtils.isEmpty(noticeIPage.getRecords())){
|
return PageData.from(new Page<>());
|
}
|
List<NoticeCardDTO> noticeCardDTOs = noticeIPage.getRecords().stream().map(s -> {
|
NoticeCardDTO noticeCardDTO = new NoticeCardDTO();
|
BeanUtils.copyProperties(s, noticeCardDTO);
|
return noticeCardDTO;
|
|
}).collect(Collectors.toList());
|
|
PageData<NoticeCardDTO> pageData = new PageData<>();
|
pageData.setPage(pageWrap.getPage());
|
pageData.setCapacity(pageWrap.getCapacity());
|
pageData.setTotal(page.getTotal());
|
pageData.setRecords(noticeCardDTOs);
|
return pageData;
|
}
|
}
|