From b8dedd4e1962cf4f7984b01d500f950fe5e8fea3 Mon Sep 17 00:00:00 2001 From: luofl <1442745593@qq.com> Date: 星期二, 11 三月 2025 10:47:19 +0800 Subject: [PATCH] 1 --- ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionGoodsServiceImpl.java | 145 ++++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 132 insertions(+), 13 deletions(-) diff --git a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionGoodsServiceImpl.java b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionGoodsServiceImpl.java index 080abca..8924c2b 100644 --- a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionGoodsServiceImpl.java +++ b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionGoodsServiceImpl.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.plugins.pagination.Page; @@ -57,11 +58,13 @@ import com.ruoyi.system.api.domain.dto.MemberAuctionSalesroomDTO; import com.ruoyi.system.api.domain.dto.OrderDTO; import com.ruoyi.system.api.domain.dto.RefundDTO; +import com.ruoyi.system.api.domain.dto.SmsSendDTO; import com.ruoyi.system.api.domain.vo.AuctionGoodsListVO; import com.ruoyi.system.api.domain.vo.AuctionGoodsinfoVO; import com.ruoyi.system.api.domain.vo.GoodsInfoTitleValueVO; import com.ruoyi.system.api.domain.vo.getHomeGoodsSkuXxiVO; import com.ruoyi.system.api.feignClient.AuctionClient; +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; @@ -73,6 +76,7 @@ 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; @@ -120,6 +124,10 @@ @Resource private AuctionBondJlMapper auctionBondJlMapper; + @Resource + private AuthClient authClient; + private static final String SUCCESS_TEMPLATE = "【酒鼎老酒】恭喜!您参与的“content”竞拍已中拍!"; + private static final String FAILED_TEMPLATE = "【酒鼎老酒】很遗憾!您参与的”content“竞拍未中拍!"; /** * 获取拍卖商品列表的分页数据 @@ -358,13 +366,12 @@ SecurityConstants.INNER); } - auctionBidRecordService.updateBatchById(auctionBidRecordList); - // 创建待支付订单 CustomConfig moneyConfig = sysUserClient.getconfig( ConfigEnum.MEMBER_POINTS_MONEY.getKey()).getData(); CustomConfig pointsConfig = sysUserClient.getconfig( ConfigEnum.MEMBER_POINTS_POINTS.getKey()).getData(); + Map<Long, String> orderIdMap = new HashMap<>(); for (AuctionBidRecord auctionBidRecord : auctionBidRecordList) { BigDecimal lastBidAmount = auctionBidRecord.getLastBidAmount(); BigDecimal divide = lastBidAmount.divide( @@ -397,7 +404,52 @@ } orderDTO.setOrderTimeSx(auctionGoods.getEndTime()); orderDTO.setGoodsId(auctionGoods.getGoodsSkuId()); - orderClient.saveOrderOne(orderDTO, SecurityConstants.INNER); + Long orderId = orderClient.saveOrderOne(orderDTO, SecurityConstants.INNER) + .getData(); + if (Objects.nonNull(orderId)) { + orderIdMap.put(auctionBidRecord.getMemberId(), orderId.toString()); + auctionBidRecord.setOrderId(orderId); + } + } + // 更新出价记录 + auctionBidRecordService.updateBatchById(auctionBidRecordList); + List<Long> successMemberIdList = auctionBidRecords.stream() + .filter(auctionBidRecord -> auctionBidRecord.getStatus() + .equals(BidStatusEnum.SUCCESSFUL)) + .map(AuctionBidRecord::getMemberId) + .collect(Collectors.toList()); + List<Long> failedMemberIdList = auctionBidRecords.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(id, 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(id, 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); + } } } else { // 没有人出价,退回拍卖商品库存 @@ -460,6 +512,31 @@ SecurityConstants.INNER); } } + } + } + + /** + * 发送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", 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); } } @@ -793,13 +870,12 @@ SecurityConstants.INNER); } - auctionBidRecordService.updateBatchById(auctionBidRecordList); - // 创建待支付订单 CustomConfig moneyConfig = sysUserClient.getconfig( ConfigEnum.MEMBER_POINTS_MONEY.getKey()).getData(); CustomConfig pointsConfig = sysUserClient.getconfig( ConfigEnum.MEMBER_POINTS_POINTS.getKey()).getData(); + Map<Long, String> orderIdMap = new HashMap<>(); for (AuctionBidRecord auctionBidRecord : auctionBidRecordList) { BigDecimal lastBidAmount = auctionBidRecord.getLastBidAmount(); BigDecimal divide = lastBidAmount.divide( @@ -832,7 +908,56 @@ } orderDTO.setOrderTimeSx(auctionGoods.getEndTime()); orderDTO.setGoodsId(auctionGoods.getGoodsSkuId()); - orderClient.saveOrderOne(orderDTO, SecurityConstants.INNER); + Long orderId = orderClient.saveOrderOne(orderDTO, SecurityConstants.INNER) + .getData(); + if (Objects.nonNull(orderId)) { + orderIdMap.put(auctionBidRecord.getMemberId(), orderId.toString()); + auctionBidRecord.setOrderId(orderId); + } + } + // 更新出价记录 + auctionBidRecordService.updateBatchById(auctionBidRecordList); + List<Long> successMemberIdList = auctionBidRecords.stream() + .filter(auctionBidRecord -> auctionBidRecord.getStatus() + .equals(BidStatusEnum.SUCCESSFUL)) + .map(AuctionBidRecord::getMemberId) + .collect(Collectors.toList()); + List<Long> failedMemberIdList = auctionBidRecords.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(id, 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(id, 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); + } } } else { // 没有人出价,退回拍卖商品库存 @@ -954,13 +1079,7 @@ } public static void main(String[] args) throws JsonProcessingException { - Map<String, Object> map = new ConcurrentHashMap<>(); - map.put("notification_type", NotificationTypeConstant.AUCTION_GOODS); - map.put("notification_time", DateUtils.dateTimeNow("yyyy-MM-dd HH:mm:ss")); - map.put("target_id", 1); - map.put("message_type", "end"); - String msg = objectMapper.writeValueAsString(map); - System.out.println(msg); + System.out.println(SUCCESS_TEMPLATE.replace("content", "剑南春")); } @Override -- Gitblit v1.7.1