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