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.*; 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.math.BigDecimal; 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; } /** * * @param type 0消费者;1=经销商; * @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); notice.setStatus(Constants.ZERO); noticeMapper.insert(notice); } /** * 积分变动消息类型 * @param integralObjType 积分变动类型 * @param memberId 用户主键/商户主键 * @param integral 变动积分/现金值 * @param objId 关联对象主键 - 积分流水变动记录主键 * @param param1 param2 */ @Override public void saveMemberIntegralNotice(Constants.IntegralObjType integralObjType,Integer type, Integer memberId, BigDecimal 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 ); } /** * 发放优惠券 * @param memberId * @param couponList */ public void couponNotice(Integer memberId,List couponList){ String noticeInfo = "恭喜您获得${param}"; //恭喜您获得 满50减10抵扣券 String replaceInfo = ""; for (CouponNoticeRequest c:couponList) { MemberCoupon mc = c.getMemberCoupon(); String info = Constants.equalsInteger(mc.getCouponType(),Constants.ZERO)? "满"+mc.getLimitPrice()+"元减"+mc.getPrice()+"元抵扣券*"+c.getNum(): "满"+mc.getLimitPrice()+"元享"+mc.getPrice()+"折券"; replaceInfo = replaceInfo + (StringUtils.isBlank(replaceInfo)? info:","+info); } noticeInfo.replace("${param}",replaceInfo); this.saveNoticeInfo( Constants.ZERO, Constants.ONE, memberId, "获得系统发放的优惠券", noticeInfo, null ); } public void expireNotice(Integer memberId, BigDecimal integral,Integer expireDateNum){ //您有1000积分30天后过期,请尽快使用 String noticeInfo = "您有${param}积分即将过期,请尽快使用"; if(integral.compareTo(BigDecimal.ZERO)<=Constants.ZERO){ return; } noticeInfo.replace("${param}",integral.toString()); this.saveNoticeInfo( Constants.ZERO, Constants.ONE, memberId, "您的积分将在"+expireDateNum+"天后清空,请尽快使用", noticeInfo, null ); } public void commonNotice(Integer memberId, Integer objId,String memberName ){ //您有1000积分30天后过期,请尽快使用 String noticeInfo = "${param}回复了您的评论"; noticeInfo.replace("${param}",memberName); this.saveNoticeInfo( Constants.ZERO, Constants.TWO, memberId, noticeInfo, noticeInfo, null ); } public void orderPayNotice(Integer shopId, Integer objId,Integer receiveType){ if(Constants.equalsInteger(receiveType,Constants.ZERO)){ return; } //您有新的【发货方式】订单待处理 String noticeInfo = "您有新的${param}订单待处理"; noticeInfo.replace("${param}",Constants.equalsInteger(receiveType,Constants.ZERO)?"物流发货":"门店自提"); this.saveNoticeInfo( Constants.ONE, Constants.ZERO, shopId, noticeInfo, noticeInfo, objId ); } public void orderCancelNotice(Integer shopId, Integer objId,String orderNo){ // 您的订单{订单号},已由客户手动取消,请知悉 String noticeInfo = " 您的订单${param},已由客户手动取消,请知悉"; noticeInfo.replace("${param}",orderNo); this.saveNoticeInfo( Constants.ONE, Constants.ZERO, shopId, noticeInfo, noticeInfo, objId ); } }