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.MemberCoupon;
|
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.dao.web.request.CouponNoticeRequest;
|
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;
|
}
|
|
|
/**
|
*
|
* @param type 0消费者;1=经销商积分;2=经销商结算金额
|
* @param objType 0商城订单 1积分流水 2互动评价 3优惠券
|
*
|
*/
|
|
public void saveNoticeInfo(Integer type,Integer objType,Integer memberId
|
,String title,String content,Integer objId){
|
Notice notice = new Notice();
|
notice.setCreateDate(new Date());
|
notice.setIsdeleted(Constants.ZERO);
|
notice.setTitle(title);
|
notice.setContent(content);
|
notice.setType(type);
|
notice.setObjType(objType);
|
notice.setObjId(objId);
|
notice.setMemberId(memberId);
|
noticeMapper.insert(notice);
|
}
|
|
|
/**
|
* 积分变动消息类型
|
* @param integralObjType 积分变动类型
|
* @param memberId 用户主键/商户主键
|
* @param integral 变动积分/现金值
|
* @param objId 关联对象主键 - 积分流水变动记录主键
|
* @param param1 param2
|
*/
|
public void saveMemberIntegralNotice(Constants.IntegralObjType integralObjType,Integer type, Integer memberId, Integer integral, Integer objId,String param1){
|
String title = integralObjType.getName();
|
String info = integralObjType.getNoteinfo();
|
info = info.replace("${param}",integral.toString()).replace("${param1}",param1);
|
this.saveNoticeInfo(
|
type,
|
Constants.ONE,
|
memberId,
|
title,
|
info,
|
objId
|
);
|
}
|
|
public void couponNotice(Integer memberId,List<CouponNoticeRequest> couponList){
|
String info = "恭喜您获得【优惠规则】【优惠券类型】";
|
//恭喜您获得 满50减10抵扣券
|
for (CouponNoticeRequest c:couponList) {
|
MemberCoupon mc = c.getMemberCoupon();
|
Constants.equalsInteger(mc.getCouponType(),Constants.ZERO)?
|
|
|
|
|
}
|
|
|
// this.saveNoticeInfo(
|
// type,
|
// Constants.ONE,
|
// memberId,
|
// "获得系统发放的优惠券",
|
// info,
|
// objId
|
// );
|
//
|
|
|
}
|
|
|
|
}
|