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 | 332 ++++++++++++++++++++++++++++++++++++++++++++----------- 1 files changed, 266 insertions(+), 66 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 1752f91..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; @@ -14,6 +15,7 @@ import com.ruoyi.auction.domain.AuctionBidRecord; import com.ruoyi.auction.domain.AuctionBrowseRecord; import com.ruoyi.auction.domain.MemberAuctionCollection; +import com.ruoyi.auction.mapper.AuctionBondJlMapper; import com.ruoyi.auction.mapper.AuctionGoodsMapper; import com.ruoyi.auction.service.IAuctionBidRecordService; import com.ruoyi.auction.service.IAuctionBrowseRecordService; @@ -32,9 +34,11 @@ import com.ruoyi.common.core.utils.DateUtils; import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.core.utils.page.BeanUtils; +import com.ruoyi.common.core.utils.page.CollUtils; import com.ruoyi.common.core.utils.page.PageDTO; import com.ruoyi.system.api.constants.ConfigEnum; import com.ruoyi.system.api.constants.NotificationTypeConstant; +import com.ruoyi.system.api.domain.AuctionBondJl; import com.ruoyi.system.api.domain.AuctionGoods; import com.ruoyi.system.api.domain.CustomConfig; import com.ruoyi.system.api.domain.GoodsBrand; @@ -54,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; @@ -70,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; @@ -114,6 +121,13 @@ @Resource private IAuctionBrowseRecordService iAuctionBrowseRecordService; + + @Resource + private AuctionBondJlMapper auctionBondJlMapper; + @Resource + private AuthClient authClient; + private static final String SUCCESS_TEMPLATE = "【酒鼎老酒】恭喜!您参与的“content”竞拍已中拍!"; + private static final String FAILED_TEMPLATE = "【酒鼎老酒】很遗憾!您参与的”content“竞拍未中拍!"; /** * 获取拍卖商品列表的分页数据 @@ -242,7 +256,19 @@ auctionGoodsOrg.setSharePic(dto.getSharePic()); this.updateById(auctionGoodsOrg); } - auctionAsyncMethodService.auctionGoodsScheduleTask(Lists.newArrayList(auctionGoods)); + if (auctionGoods.getEndTime().isBefore(LocalDateTime.now())) { + // 退回剩余库存 + GoodsStockUpdDTO goodsStockUpdDTO = new GoodsStockUpdDTO(); + goodsStockUpdDTO.setAuctionStock(auctionGoods.getAuctionStock()); + goodsStockUpdDTO.setGoodsSkuId(auctionGoods.getGoodsSkuId()); + goodsSkuClient.updGoodsStock(Lists.newArrayList(goodsStockUpdDTO), + SecurityConstants.INNER); + auctionGoods.setStartStatus(AuctionStartStatusEnum.ENDED); + this.updateById(auctionGoods); + } else { + auctionAsyncMethodService.auctionGoodsScheduleTask(Lists.newArrayList(auctionGoods)); + } + } /** @@ -340,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( @@ -378,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 { // 没有人出价,退回拍卖商品库存 @@ -404,20 +475,22 @@ for (OrderAuctionBond orderAuctionBond : auctionBondList) { // 已中标需在订单完成后退保证金 - if (unRefundMemberIdList.contains(orderAuctionBond.getMemberId())) { + if (unRefundMemberIdList.contains(orderAuctionBond.getMemberId()) + || Objects.isNull(orderAuctionBond.getBond())) { continue; } RefundDTO refundDTO = new RefundDTO(); refundDTO.setOrderNo(orderAuctionBond.getOrderNo()); refundDTO.setAmount(orderAuctionBond.getBond()); + refundDTOList.add(refundDTO); } // 远程调用订单服务进行退款 Map<String, Object> data = orderClient.refund(refundDTOList, SecurityConstants.INNER).getData(); + if (CollUtils.isNotEmpty(data)) { // 处理退款返回结果 List<String> successfulOrders = new ArrayList<>(); List<String> failedOrders = new ArrayList<>(); - data.forEach((key, value) -> { if ((boolean) value) { successfulOrders.add(key); @@ -433,9 +506,37 @@ } return null; }).filter(Objects::nonNull).collect(Collectors.toList()); + // 远程调用订单服务修改订单状态 - orderClient.updateOrderAuctionBondStatus(ids, BondStatusEnum.PAID,SecurityConstants.INNER); + orderClient.updateOrderAuctionBondStatus(ids, BondStatusEnum.REFUNDED, + 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); } } @@ -446,12 +547,26 @@ List<GoodsSku> goodsSku = goodsSkuClient.getGoodsByName(auctionGoodsListDTO.getGoodsSkuName(), SecurityConstants.INNER) .getData(); - goodsSkuIdList = goodsSku.stream().map(GoodsSku::getId) - .collect(Collectors.toSet()); + if (CollUtils.isEmpty(goodsSku)) { + return PageDTO.empty(0L, 1L); + } + if (goodsSku!=null){ + goodsSkuIdList = goodsSku.stream().map(GoodsSku::getId) + .collect(Collectors.toSet()); + } + } AuctionGoodsListPageDTO auctionGoodsListPageDTO=new AuctionGoodsListPageDTO(); - auctionGoodsListPageDTO.setGoodsSkuIdList(goodsSkuIdList); + if (StringUtils.isNotEmpty(auctionGoodsListDTO.getGoodsSkuName())) { + if (goodsSkuIdList != null) { + auctionGoodsListPageDTO.setGoodsSkuIdList(goodsSkuIdList); + } else { + goodsSkuIdList = new HashSet<>(); + goodsSkuIdList.add(0L); + auctionGoodsListPageDTO.setGoodsSkuIdList(goodsSkuIdList); + } + } Page<AuctionGoodsListVO> page = new Page<>(); page.setSize(auctionGoodsListDTO.getPageSize()); @@ -520,13 +635,19 @@ auctionGoodsinfoVO.setMinimumMarkupAmount(byId.getMinimumMarkupAmount()); auctionGoodsinfoVO.setSpec(goodsSkuOne.getSpec()); auctionGoodsinfoVO.setSpecUnit(goodsSkuOne.getSpecUnit()); - auctionGoodsinfoVO.setShareTitle(goodsSkuOne.getShareTitle()); - auctionGoodsinfoVO.setSpecUnit(goodsSkuOne.getSpecUnit()); 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()); @@ -564,15 +685,18 @@ }else { auctionGoodsinfoVO.setIsCollection(1); } - List<OrderAuctionBond> datas = orderClient.getAuctionGoodsOrderAuctionBondList(auctionGoodsListDTO, SecurityConstants.INNER).getData(); - if(datas!=null){ - if (datas.size()>0){ + LambdaQueryWrapper<AuctionBondJl> wrapper8=Wrappers.lambdaQuery(); + wrapper8.eq(AuctionBondJl::getAuctionGoodsId,byId.getId()); + wrapper8.eq(AuctionBondJl::getMemberId,auctionGoodsListDTO.getMemberId()); + wrapper8.eq(AuctionBondJl::getIsState,0); + AuctionBondJl auctionBondJl = auctionBondJlMapper.selectOne(wrapper8); + if(auctionBondJl!=null){ auctionGoodsinfoVO.setIsApply(2); }else{ auctionGoodsinfoVO.setIsApply(1); } - } + LocalDateTime now = LocalDateTime.now(); LocalDateTime newTime7 = now.minusDays(7); @@ -589,6 +713,7 @@ AuctionBrowseRecord auctionBrowseRecord=new AuctionBrowseRecord(); auctionBrowseRecord.setBrowseType(AuctionOrderTypeEnum.REGULAR_ITEMS); auctionBrowseRecord.setMemberId(auctionGoodsListDTO.getMemberId()); + auctionBrowseRecord.setSkuName(goodsSkuOne.getSkuName()); auctionBrowseRecord.setTargetId(auctionGoodsListDTO.getGoodsSkuId()); iAuctionBrowseRecordService.save(auctionBrowseRecord); } @@ -624,59 +749,72 @@ @Override public PageDTO<AuctionGoodsListVO> getWdAuctionSalesList(AuctionGoodsListDTO auctionGoodsListDTO) { + MemberAuctionSalesroomDTO memberAuctionSalesroomDTO =new MemberAuctionSalesroomDTO(); memberAuctionSalesroomDTO.setMemberId(auctionGoodsListDTO.getMemberId()); List<OrderAuctionBond> data = orderClient.getAuctionGoodsOrderAuctionBondList(auctionGoodsListDTO, SecurityConstants.INNER).getData(); - Set<Long> goodsSkuIdList = null; + List<Long> goodsSkuIdList = null; if (data.size()>0){ goodsSkuIdList = data.stream().map(OrderAuctionBond::getAuctionGoodsId) - .collect(Collectors.toSet()); + .collect(Collectors.toList()); }else { - Set<Long> goodsSkuIdList1 =new HashSet<>(); + List<Long> goodsSkuIdList1 =new ArrayList<>(); goodsSkuIdList1.add(0L); goodsSkuIdList=goodsSkuIdList1; } - AuctionGoodsListPageDTO auctionGoodsListPageDTO=new AuctionGoodsListPageDTO(); - if (goodsSkuIdList!=null){ - auctionGoodsListPageDTO.setGoodsSkuIdList(goodsSkuIdList); + + List<Long> goodsSkuIdList1 =null; + if (StringUtils.isNotEmpty(auctionGoodsListDTO.getGoodsSkuName())) { + List<GoodsSku> goodsSku = goodsSkuClient.getGoodsByName(auctionGoodsListDTO.getGoodsSkuName(), + SecurityConstants.INNER) + .getData(); + goodsSkuIdList1= goodsSku.stream().map(GoodsSku::getId) + .collect(Collectors.toList()); } - if (auctionGoodsListDTO.getStartStatus()!=4){ - if (auctionGoodsListDTO.getStartStatus()==0){ - auctionGoodsListPageDTO.setStartStatus(5); - }else{ - auctionGoodsListPageDTO.setStartStatus(auctionGoodsListDTO.getStartStatus()); - } + + Page<AuctionGoods> page = new Page<>(auctionGoodsListDTO.getPageCurr(), + auctionGoodsListDTO.getPageSize()); + LambdaQueryWrapper<AuctionGoods> wrapper1=Wrappers.lambdaQuery(); + if (goodsSkuIdList.size()>0){ + wrapper1.in(AuctionGoods::getId,goodsSkuIdList); } + if (StringUtils.isNotEmpty(auctionGoodsListDTO.getGoodsSkuName())) { + if (goodsSkuIdList1.size()>0){ + wrapper1.in(AuctionGoods::getGoodsSkuId,goodsSkuIdList1); + }else{ + goodsSkuIdList1=new ArrayList<>(); + goodsSkuIdList1.add(0L); + wrapper1.in(AuctionGoods::getGoodsSkuId,goodsSkuIdList1); + } + } + if (auctionGoodsListDTO.getStartStatus() != 4) { + wrapper1.eq(AuctionGoods::getStartStatus,auctionGoodsListDTO.getStartStatus()); + } + wrapper1.last(auctionGoodsListDTO.getStartStatus() == 4, "ORDER BY\n" + + " FIELD(start_status, 1, 0, 2),\n" + + " start_time DESC"); + wrapper1.last(auctionGoodsListDTO.getStartStatus() != 4, "ORDER BY start_time DESC"); + Page<AuctionGoods> auctionSalesroomList=this.page(page,wrapper1); + PageDTO<AuctionGoodsListVO> wdMemberAuctionSalesroomVOPageDTO = PageDTO.of(auctionSalesroomList, AuctionGoodsListVO.class); + List<AuctionGoodsListVO> list = wdMemberAuctionSalesroomVOPageDTO.getList(); + for (AuctionGoodsListVO auctionGoodsVO:list){ - Page<AuctionGoodsListVO> page = new Page<>(); - page.setSize(auctionGoodsListDTO.getPageSize()); - page.setCurrent(auctionGoodsListDTO.getPageCurr()); - List<AuctionGoods> auctionGoodsPgeList = auctionGoodsMapper.getAuctionGoodsPgeList1(page, auctionGoodsListPageDTO); - List<AuctionGoodsListVO> auctionGoodsVOS=new ArrayList<>(); - for (AuctionGoods auctionGoods:auctionGoodsPgeList){ - AuctionGoodsListVO auctionGoodsVO=new AuctionGoodsListVO(); - auctionGoodsVO.setAuctionStock(auctionGoods.getAuctionStock()); - auctionGoodsVO.setGoodsSkuId(auctionGoods.getId()); - auctionGoodsVO.setEndTime(auctionGoods.getEndTime()); - auctionGoodsVO.setStartTime(auctionGoods.getStartTime()); - auctionGoodsVO.setStartingPrice(auctionGoods.getStartingPrice()); - auctionGoodsVO.setStartStatus(auctionGoods.getStartStatus()); - GoodsSku goodsSkuOne = goodsSkuClient.getGoodsSkuOne(auctionGoods.getGoodsSkuId(), SecurityConstants.INNER).getData(); + GoodsSku goodsSkuOne = goodsSkuClient.getGoodsSkuOne(auctionGoodsVO.getGoodsSkuId(), SecurityConstants.INNER).getData(); auctionGoodsVO.setUnit(goodsSkuOne.getUnit()); auctionGoodsVO.setSpec(goodsSkuOne.getSpec()); auctionGoodsVO.setSpecUnit(goodsSkuOne.getSpecUnit()); auctionGoodsVO.setGoodsSkuName(goodsSkuOne.getSkuName()); auctionGoodsVO.setCoverPic(goodsSkuOne.getCoverPic()); - LambdaQueryWrapper<AuctionBidRecord> wrapper1= Wrappers.lambdaQuery(); - wrapper1.eq(AuctionBidRecord::getMemberId,auctionGoodsListDTO.getMemberId()); - wrapper1.eq(AuctionBidRecord::getAuctionType,1); - wrapper1.eq(AuctionBidRecord::getTargetId,auctionGoods.getId()); - wrapper1.eq(AuctionBidRecord::getDelFlag,0); - AuctionBidRecord list1 = auctionBidRecordService.getOne(wrapper1); + LambdaQueryWrapper<AuctionBidRecord> wrapper2= Wrappers.lambdaQuery(); + wrapper2.eq(AuctionBidRecord::getMemberId,auctionGoodsListDTO.getMemberId()); + wrapper2.eq(AuctionBidRecord::getAuctionType,1); + wrapper2.eq(AuctionBidRecord::getTargetId,auctionGoodsVO.getId()); + wrapper2.eq(AuctionBidRecord::getDelFlag,0); + AuctionBidRecord list1 = auctionBidRecordService.getOne(wrapper2); if (list1!=null){ if (list1.getStatus().getCode()==2){ auctionGoodsVO.setIsStatus(2); @@ -686,12 +824,10 @@ }else{ auctionGoodsVO.setIsStatus(1); } - - auctionGoodsVOS.add(auctionGoodsVO); + auctionGoodsVO.setGoodsSkuId(auctionGoodsVO.getId()); } - page.setRecords(auctionGoodsVOS); - return PageDTO.of(page); + return wdMemberAuctionSalesroomVOPageDTO; } @Override @@ -699,8 +835,7 @@ @Transactional public void endAuctionGoods(Long id) throws JsonProcessingException { AuctionGoods auctionGoods = this.getById(id); - if (StringUtils.isNotNull(auctionGoods) && auctionGoods.getListingStatus().equals( - ListingStatusEnum.ON_SHELVES) && auctionGoods.getStartStatus() + if (StringUtils.isNotNull(auctionGoods) && auctionGoods.getStartStatus() .equals(AuctionStartStatusEnum.IN_AUCTION)) { // 远程调用商品服务,获取商品信息 GoodsSku goodsSku = goodsSkuClient.getGoodsSkuOne(auctionGoods.getGoodsSkuId(), @@ -735,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( @@ -773,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 { // 没有人出价,退回拍卖商品库存 @@ -805,6 +989,7 @@ RefundDTO refundDTO = new RefundDTO(); refundDTO.setOrderNo(orderAuctionBond.getOrderNo()); refundDTO.setAmount(orderAuctionBond.getBond()); + refundDTOList.add(refundDTO); } // 远程调用订单服务进行退款 Map<String, Object> data = orderClient.refund(refundDTOList, @@ -880,13 +1065,28 @@ this.updateById(auctionGoods); } + /** + * 根据商品id获取正在进行的拍卖商品 + * + * @param id 商品id + * @return + */ + @Override + public List<AuctionGoods> getAuctionGoodsBySkuId(Long id) { + return this.list(new LambdaQueryWrapper<AuctionGoods>().eq(AuctionGoods::getGoodsSkuId, + id).eq(AuctionGoods::getListingStatus, ListingStatusEnum.ON_SHELVES) + .eq(AuctionGoods::getStartStatus, AuctionStartStatusEnum.IN_AUCTION)); + } + 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