From e16a9f6a4238ec02dc754be7b94639ad8af4e5a8 Mon Sep 17 00:00:00 2001
From: mitao <2763622819@qq.com>
Date: 星期五, 07 三月 2025 18:42:07 +0800
Subject: [PATCH] 协议管理修改

---
 ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionGoodsServiceImpl.java |  167 ++++++++++++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 151 insertions(+), 16 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 e775042..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(
@@ -396,7 +403,53 @@
                         orderDTO.setSkuName(goodsSku.getSkuName());
                     }
                     orderDTO.setOrderTimeSx(auctionGoods.getEndTime());
-                    orderClient.saveOrderOne(orderDTO, SecurityConstants.INNER);
+                    orderDTO.setGoodsId(auctionGoods.getGoodsSkuId());
+                    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 {
                 // 没有人出价,退回拍卖商品库存
@@ -459,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);
         }
     }
 
@@ -557,12 +635,19 @@
         auctionGoodsinfoVO.setMinimumMarkupAmount(byId.getMinimumMarkupAmount());
         auctionGoodsinfoVO.setSpec(goodsSkuOne.getSpec());
         auctionGoodsinfoVO.setSpecUnit(goodsSkuOne.getSpecUnit());
-        auctionGoodsinfoVO.setShareTitle(goodsSkuOne.getShareTitle());
         auctionGoodsinfoVO.setDetail(goodsSkuOne.getDetail());
         auctionGoodsinfoVO.setBond(byId.getBond());
         auctionGoodsinfoVO.setYears(goodsSkuOne.getYears());
-        auctionGoodsinfoVO.setSharePic(byId.getSharePic());
-        auctionGoodsinfoVO.setShareTitle(byId.getShareTitle());
+        if (StringUtils.isNotBlank(byId.getShareTitle())) {
+            auctionGoodsinfoVO.setShareTitle(byId.getShareTitle());
+        } else {
+            auctionGoodsinfoVO.setShareTitle(goodsSkuOne.getSkuName());
+        }
+        if (StringUtils.isNotBlank(byId.getSharePic())) {
+            auctionGoodsinfoVO.setSharePic(byId.getSharePic());
+        } else {
+            auctionGoodsinfoVO.setSharePic(goodsSkuOne.getCoverPic());
+        }
         LambdaQueryWrapper<AuctionBidRecord> wrapper1= Wrappers.lambdaQuery();
         wrapper1.eq(AuctionBidRecord::getAuctionType,1);
         wrapper1.eq(AuctionBidRecord::getTargetId,byId.getId());
@@ -785,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(
@@ -823,7 +907,57 @@
                             orderDTO.setSkuName(goodsSku.getSkuName());
                         }
                         orderDTO.setOrderTimeSx(auctionGoods.getEndTime());
-                        orderClient.saveOrderOne(orderDTO, SecurityConstants.INNER);
+                        orderDTO.setGoodsId(auctionGoods.getGoodsSkuId());
+                        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 {
                     // 没有人出价,退回拍卖商品库存
@@ -945,13 +1079,14 @@
     }
 
     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
+    public List<GoodsSku> getGoodsSkuByAuctionGoodsIdSet(Set<Long> auctionGoodsIdSet) {
+        List<AuctionGoods> auctionGoodsList = this.listByIds(auctionGoodsIdSet);
+        List<Long> goodsSkuIdList = auctionGoodsList.stream().map(AuctionGoods::getGoodsSkuId)
+                .collect(Collectors.toList());
+        return goodsSkuClient.getGoodsListByIds(goodsSkuIdList, SecurityConstants.INNER).getData();
+    }
 }

--
Gitblit v1.7.1