From ce0403c1d94ba031ecc832d0acfcb3650c33ef6b Mon Sep 17 00:00:00 2001 From: mitao <2763622819@qq.com> Date: 星期五, 14 二月 2025 17:02:23 +0800 Subject: [PATCH] 管理后台:会员管理、心愿求管理 --- ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionSalesroomGoodsServiceImpl.java | 113 ++++++++++++++++++++++++++++++++++++++++++++++++++------ 1 files changed, 101 insertions(+), 12 deletions(-) diff --git a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionSalesroomGoodsServiceImpl.java b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionSalesroomGoodsServiceImpl.java index e13d1e1..c1fa6e4 100644 --- a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionSalesroomGoodsServiceImpl.java +++ b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionSalesroomGoodsServiceImpl.java @@ -1,5 +1,6 @@ package com.ruoyi.auction.service.impl; +import com.alibaba.fastjson2.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -23,6 +24,7 @@ import com.ruoyi.common.core.enums.OrderFromEnum; import com.ruoyi.common.core.exception.ServiceException; import com.ruoyi.common.core.utils.DateUtils; +import com.ruoyi.common.core.utils.page.CollUtils; import com.ruoyi.system.api.constants.NotificationTypeConstant; import com.ruoyi.system.api.domain.AuctionBondJl; import com.ruoyi.system.api.domain.AuctionSalesroom; @@ -36,17 +38,20 @@ import com.ruoyi.system.api.domain.Member; import com.ruoyi.system.api.domain.MemberAddress; import com.ruoyi.system.api.domain.Order; +import com.ruoyi.system.api.domain.WebsocketMessageDTO; import com.ruoyi.system.api.domain.dto.AuctionSalesroomDTO; import com.ruoyi.system.api.domain.dto.AuctionSalesroomGoodsInfoDTO; import com.ruoyi.system.api.domain.dto.GoodsStockUpdDTO; import com.ruoyi.system.api.domain.dto.OrderAuctionBondDTO; import com.ruoyi.system.api.domain.dto.OrderDTO; +import com.ruoyi.system.api.domain.dto.SmsSendDTO; import com.ruoyi.system.api.domain.vo.AuctionBidRecordVO; import com.ruoyi.system.api.domain.vo.AuctionSalesroomGoodsInfoVO; import com.ruoyi.system.api.domain.vo.AuctionSalesroomVO; import com.ruoyi.system.api.domain.vo.ForepartAuctionSalesroomGoodsVO; import com.ruoyi.system.api.domain.vo.GoodsInfoTitleValueVO; import com.ruoyi.system.api.domain.vo.getHomeGoodsSkuXxiVO; +import com.ruoyi.system.api.feignClient.AuthClient; import com.ruoyi.system.api.feignClient.GoodsSkuClient; import com.ruoyi.system.api.feignClient.MemberClient; import com.ruoyi.system.api.feignClient.OrderClient; @@ -57,12 +62,16 @@ import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; +import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; +import java.util.stream.Collectors; import javax.annotation.Resource; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -74,6 +83,7 @@ * @author mitao * @since 2024-05-16 */ +@Slf4j @Service public class AuctionSalesroomGoodsServiceImpl extends ServiceImpl<AuctionSalesroomGoodsMapper, AuctionSalesroomGoods> implements IAuctionSalesroomGoodsService { @Resource @@ -86,7 +96,7 @@ private AuctionBidRecordMapper auctionBidRecordMapper; @Resource - private MemberClient emberClient; + private MemberClient memberClient; @Resource private OrderClient orderClient; @@ -104,11 +114,12 @@ @Resource private AuctionBondJlMapper auctionBondJlMapper; - + @Resource + private AuthClient authClient; private static final ObjectMapper objectMapper = new ObjectMapper(); - - + private static final String SUCCESS_TEMPLATE = "【酒鼎老酒】恭喜!您参与的“content”竞拍已中拍!"; + private static final String FAILED_TEMPLATE = "【酒鼎老酒】很遗憾!您参与的”content“竞拍未中拍!"; /** @@ -504,15 +515,21 @@ wrapper.orderByDesc(AuctionBidRecord::getLastBidAmount); wrapper.orderByAsc(AuctionBidRecord::getLastBidTime); auctionBidRecordList = auctionBidRecordMapper.selectList(wrapper); + Map<Long, String> orderIdMap = new HashMap<>(); if(auctionBidRecordList.size()>0){ //判断 if (auctionBidRecordList.size() >= auctionSalesroomGoods.getSalesroomStock()) { for (int i = 0; i < auctionSalesroomGoods.getSalesroomStock(); i++) { AuctionBidRecord auctionBidRecord = auctionBidRecordList.get(i); auctionBidRecord.setStatus(BidStatusEnum.SUCCESSFUL); - auctionBidRecordMapper.updateById(auctionBidRecord); - AddOrder(auctionBidRecord.getTargetId(), auctionBidRecord.getMemberId(), + Long orderId = AddOrder(auctionBidRecord.getTargetId(), + auctionBidRecord.getMemberId(), auctionBidRecord.getLastBidAmount(), auctionSalesroom.getBond()); + if (Objects.nonNull(orderId)) { + orderIdMap.put(auctionBidRecord.getMemberId(), orderId.toString()); + auctionBidRecord.setOrderId(orderId); + } + auctionBidRecordMapper.updateById(auctionBidRecord); } } else { GoodsStockUpdDTO goodsStockUpdDTO = new GoodsStockUpdDTO(); @@ -525,10 +542,57 @@ for (int i = 0; i < auctionBidRecordList.size(); i++) { AuctionBidRecord auctionBidRecord = auctionBidRecordList.get(i); auctionBidRecord.setStatus(BidStatusEnum.SUCCESSFUL); - auctionBidRecordMapper.updateById(auctionBidRecord); - AddOrder(auctionBidRecord.getTargetId(), auctionBidRecord.getMemberId(), + Long orderId = AddOrder(auctionBidRecord.getTargetId(), + auctionBidRecord.getMemberId(), auctionBidRecord.getLastBidAmount(), auctionSalesroom.getBond()); + if (Objects.nonNull(orderId)) { + orderIdMap.put(auctionBidRecord.getMemberId(), orderId.toString()); + auctionBidRecord.setOrderId(orderId); + } + auctionBidRecordMapper.updateById(auctionBidRecord); } + } + } + GoodsSku goodsSku = goodsSkuClient.getGoodsSkuOne(auctionSalesroomGoods.getGoodsSkuId(), + SecurityConstants.INNER).getData(); + List<Long> successMemberIdList = auctionBidRecordList.stream() + .filter(auctionBidRecord -> auctionBidRecord.getStatus() + .equals(BidStatusEnum.SUCCESSFUL)) + .map(AuctionBidRecord::getMemberId) + .collect(Collectors.toList()); + List<Long> failedMemberIdList = auctionBidRecordList.stream() + .filter(auctionBidRecord -> !auctionBidRecord.getStatus() + .equals(BidStatusEnum.SUCCESSFUL)) + .map(AuctionBidRecord::getMemberId) + .collect(Collectors.toList()); + if (CollUtils.isNotEmpty(successMemberIdList)) { + List<Member> successMemberList = memberClient.getMemberListByIds( + successMemberIdList, SecurityConstants.INNER).getData(); + if (CollUtils.isNotEmpty(successMemberList)) { + // 推送websocket消息 + sendWebsocketMsg(auctionSalesroomGoods.getId(), successMemberList, goodsSku, 1, + orderIdMap); + // 发送短信通知 + List<String> mobileList = successMemberList.stream().map(Member::getPhone) + .collect(Collectors.toList()); + authClient.sendSms(SmsSendDTO.builder().mobileList(mobileList) + .content(SUCCESS_TEMPLATE.replace("content", goodsSku.getSkuName())) + .build(), SecurityConstants.INNER); + } + } + if (CollUtils.isNotEmpty(failedMemberIdList)) { + List<Member> failedMemberList = memberClient.getMemberListByIds( + failedMemberIdList, SecurityConstants.INNER).getData(); + if (CollUtils.isNotEmpty(failedMemberList)) { + // 推送websocket消息 + sendWebsocketMsg(auctionSalesroomGoods.getId(), failedMemberList, goodsSku, 0, + orderIdMap); + // 发送短信通知 + List<String> mobileList = failedMemberList.stream().map(Member::getPhone) + .collect(Collectors.toList()); + authClient.sendSms(SmsSendDTO.builder().mobileList(mobileList) + .content(FAILED_TEMPLATE.replace("content", goodsSku.getSkuName())) + .build(), SecurityConstants.INNER); } } } @@ -554,6 +618,30 @@ } + /** + * 发送websocket通知 + * @param id + * @param memberList + * @param goodsSku + * @param successFlag // 中标状态 1:中标 0:未中标 + */ + private void sendWebsocketMsg(Long id, List<Member> memberList, GoodsSku goodsSku, + Integer successFlag, Map<Long, String> userIdMap) { + for (Member member : memberList) { + Map<String, Object> map = new ConcurrentHashMap<>(); + map.put("notification_type", NotificationTypeConstant.AUCTION_POPUP); + map.put("notification_time", DateUtils.dateTimeNow("yyyy-MM-dd HH:mm:ss")); + map.put("target_id", id); + map.put("goods_name", Objects.nonNull(goodsSku) ? goodsSku.getSkuName() : ""); + map.put("success_flag", successFlag); + map.put("order_id", successFlag == 1 ? userIdMap.getOrDefault(member.getId(), "") : ""); + String msg = JSONObject.toJSONString(map); + sysUserClient.pushBatch( + WebsocketMessageDTO.builder().message(msg).userId(member.getUserId()).build(), + SecurityConstants.INNER); + log.info("===================>发送websocket通知,消息体{}", msg); + } + } @Override public AuctionSalesroomGoodsInfoVO getAuctionSalesroomGoodsInfo(AuctionSalesroomGoodsInfoDTO auctionSalesroomGoodsInfoDTO) { AuctionSalesroom byId = auctionSalesroomMapper.selectById(auctionSalesroomGoodsInfoDTO.getAuctionSalesroomId()); @@ -727,7 +815,7 @@ auctionBidRecordVO.setSort(Integer.valueOf(count.intValue())); auctionBidRecordVO.setLastBidAmount(auctionBidRecord.getLastBidAmount()); auctionBidRecordVO.setLastBidTime(auctionBidRecord.getLastBidTime()); - Member data = emberClient.getMembeOne(auctionBidRecord.getMemberId(), + Member data = memberClient.getMembeOne(auctionBidRecord.getMemberId(), SecurityConstants.INNER).getData(); if (data!=null){ auctionBidRecordVO.setMemberName(data.getNickname()); @@ -755,7 +843,8 @@ } - public void AddOrder(Long goodsSkuId, Long memberId, BigDecimal lastBidAmount,BigDecimal bound) { + public Long AddOrder(Long goodsSkuId, Long memberId, BigDecimal lastBidAmount, + BigDecimal bound) { OrderDTO order=new OrderDTO(); order.setGoodsSkuId(goodsSkuId); order.setOrderTime(LocalDateTime.now()); @@ -767,7 +856,7 @@ order.setTotalAmount(lastBidAmount); order.setAuctionSalesroomId(auctionSalesroomGoods.getAuctionSalesroomId()); - R<MemberAddress> memberAddressR = emberClient.getMemberAddressOne(memberId, + R<MemberAddress> memberAddressR = memberClient.getMemberAddressOne(memberId, SecurityConstants.INNER); MemberAddress memberAddress=memberAddressR.getData(); @@ -799,7 +888,7 @@ order.setCoverPic(goodsSku.getCoverPic()); order.setPrice(lastBidAmount); order.setGoodsId(auctionSalesroomGoods.getGoodsSkuId()); - orderClient.saveOrderOne(order,SecurityConstants.INNER); + return orderClient.saveOrderOne(order, SecurityConstants.INNER).getData(); } -- Gitblit v1.7.1