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 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=经销商积分;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 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 // ); // } }