From 392b42c4891cf2e6beda57ab32c51598f290f4b7 Mon Sep 17 00:00:00 2001 From: mitao <2763622819@qq.com> Date: 星期五, 14 三月 2025 20:56:27 +0800 Subject: [PATCH] bug修改 --- ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionSalesroomServiceImpl.java | 306 ++++++++++++++++++++++++++++++++++++++++---------- 1 files changed, 245 insertions(+), 61 deletions(-) diff --git a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionSalesroomServiceImpl.java b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionSalesroomServiceImpl.java index 2160258..7503e82 100644 --- a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionSalesroomServiceImpl.java +++ b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionSalesroomServiceImpl.java @@ -36,7 +36,6 @@ import com.ruoyi.auction.service.IAuctionGoodsService; import com.ruoyi.auction.service.IAuctionSalesroomService; import com.ruoyi.auction.service.IAuctionVideoService; -import com.ruoyi.auction.util.CreateQrCode; import com.ruoyi.auction.util.HttpUtils; import com.ruoyi.common.core.constant.Constants; import com.ruoyi.common.core.constant.SecurityConstants; @@ -49,6 +48,7 @@ import com.ruoyi.common.core.enums.ClientTypeEnum; 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.IDhelper; import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.core.utils.page.BeanUtils; @@ -82,17 +82,20 @@ import com.ruoyi.system.api.domain.dto.OrderAuctionBondDTO; 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.ForepartAuctionSalesroomGoodsVO; import com.ruoyi.system.api.domain.vo.ForepartAuctionSalesroomVO; import com.ruoyi.system.api.domain.vo.MemberAuctionSalesroomInfoVO; import com.ruoyi.system.api.domain.vo.MemberAuctionSalesroomVO; import com.ruoyi.system.api.domain.vo.PayInfoVO; import com.ruoyi.system.api.domain.vo.WdMemberAuctionSalesroomVO; +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; import com.ruoyi.system.api.feignClient.PromotionClient; import com.ruoyi.system.api.feignClient.SysUserClient; +import com.ruoyi.system.api.model.LoginUser; import io.seata.spring.annotation.GlobalTransactional; import java.io.IOException; import java.math.BigDecimal; @@ -105,6 +108,7 @@ import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.Optional; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; @@ -182,6 +186,11 @@ @Resource private RedissonClient redissonClient; + @Resource + private AuthClient authClient; + + private static final String SUCCESS_TEMPLATE = "【酒鼎老酒】恭喜!您参与的“content”竞拍已中拍!"; + private static final String FAILED_TEMPLATE = "【酒鼎老酒】很遗憾!您参与的”content“竞拍未中拍!"; public static RequestConfig config = RequestConfig.custom().setConnectTimeout(5000).setSocketTimeout(5000).build(); // 配置您申请的KEY,在个人中心->我的数据,接口名称上方查看 public static final String APPKEY = ""; @@ -387,7 +396,9 @@ @Override public AppMiniLoginVO isMiniLogin(AppMiniLoginDTO appMiniLoginDto) { AppMiniLoginVO appMiniLoginVo = new AppMiniLoginVO(); - R<SysUser> sysUserR = sysUserClient.queryUserByPhone(appMiniLoginDto.getPhone()); + LoginUser loginUser = SecurityUtils.getLoginUser(); + Long userid = loginUser.getUserid(); + R<SysUser> sysUserR = sysUserClient.getSysUser(userid); SysUser data = sysUserR.getData(); appMiniLoginVo.setSysUser(data); appMiniLoginVo.setPhone(appMiniLoginDto.getCode()); @@ -467,8 +478,18 @@ memberAuctionSalesroomInfoVO.setEndTime(byId.getEndTime()); memberAuctionSalesroomInfoVO.setType(byId.getType()); memberAuctionSalesroomInfoVO.setDescription(byId.getDescription()); - memberAuctionSalesroomInfoVO.setSharePic(byId.getSharePic()); memberAuctionSalesroomInfoVO.setShareTitle(byId.getShareTitle()); + memberAuctionSalesroomInfoVO.setAuctionAgreement(byId.getAuctionAgreement()); + if (StringUtils.isNotBlank(byId.getShareTitle())) { + memberAuctionSalesroomInfoVO.setShareTitle(byId.getShareTitle()); + } else { + memberAuctionSalesroomInfoVO.setShareTitle(byId.getSalesroomName()); + } + if (StringUtils.isNotBlank(byId.getSharePic())) { + memberAuctionSalesroomInfoVO.setSharePic(byId.getSharePic()); + } else { + memberAuctionSalesroomInfoVO.setSharePic(byId.getCoverPic()); + } memberAuctionSalesroomInfoVO.setStartTime(byId.getStartTime()); memberAuctionSalesroomInfoVO.setStatus(byId.getStatus()); memberAuctionSalesroomInfoVO.setCoverPic(byId.getCoverPic()); @@ -498,7 +519,7 @@ forepartAuctionSalesroomGoodsVO.setGoodsSkuId(salesroomGoods.getId()); forepartAuctionSalesroomGoodsVO.setCoverPic(goodsSku.getCoverPic()); forepartAuctionSalesroomGoodsVO.setStartingPrice(salesroomGoods.getStartingPrice()); - forepartAuctionSalesroomGoodsVO.setSalesroomStock(salesroomGoods.getSalesroomStock()); + // forepartAuctionSalesroomGoodsVO.setSalesroomStock(salesroomGoods.getSalesroomStock()); forepartAuctionSalesroomGoodsVO.setGoodsSkustatus(salesroomGoods.getStatus().getCode()); forepartAuctionSalesroomGoodsVO.setMinimumMarkupAmount(salesroomGoods.getMinimumMarkupAmount()); forepartAuctionSalesroomGoodsVO.setStartTime(salesroomGoods.getStartTime()); @@ -506,6 +527,10 @@ forepartAuctionSalesroomGoodsVO.setListingDuration(salesroomGoods.getListingDuration()); forepartAuctionSalesroomGoodsVO.setSpec(goodsSku.getSpec()); forepartAuctionSalesroomGoodsVO.setSpecUnit(goodsSku.getSpecUnit()); + forepartAuctionSalesroomGoodsVO.setDealQuantity(salesroomGoods.getDealQuantity()); + forepartAuctionSalesroomGoodsVO.setMaxAmount(salesroomGoods.getMaxAmount()); + forepartAuctionSalesroomGoodsVO.setBidNum(salesroomGoods.getBidNum()); + forepartAuctionSalesroomGoodsVO.setUnit(goodsSku.getUnit()); LambdaQueryWrapper<AuctionBidRecord> wrapper1=Wrappers.lambdaQuery(); wrapper1.eq(AuctionBidRecord::getMemberId,memberAuctionSalesroomDTO.getMemberId()); wrapper1.eq(AuctionBidRecord::getAuctionSalesroomId,byId.getId()); @@ -680,8 +705,23 @@ if (bidVO.getAuctionType() == 2) { AuctionSalesroomGoods byId = auctionSalesroomGoodsMapper.selectById( bidVO.getTargetId()); + R<GoodsSku> goodsSkuOneR = goodsSkuClient.getGoodsSkuOne(byId.getGoodsSkuId(), + SecurityConstants.INNER); + GoodsSku goodsSku = goodsSkuOneR.getData(); + // 判断否大于最高价 + if (Objects.nonNull(byId.getMaxAmount()) + && byId.getMaxAmount().compareTo(bidVO.getLastBidAmount()) < 0) { + throw new ServiceException("出价不能高出最高价"); + } + // 查询用户出价记录判断是否第一次出价 首次出价,可以只出起拍价,而不是需要比起拍价高。 + Long count = auctionBidRecordService.lambdaQuery() + .eq(AuctionBidRecord::getAuctionSalesroomId, bidVO.getAuctionSalesroomId()) + .eq(AuctionBidRecord::getTargetId, bidVO.getTargetId()) + .eq(AuctionBidRecord::getAuctionType, bidVO.getAuctionType()) + .eq(AuctionBidRecord::getMemberId, bidVO.getMemberId()).count(); + if (byId.getStartingPrice().doubleValue() > bidVO.getLastBidAmount() - .doubleValue()) { + .doubleValue() && count > 0) { throw new ServiceException("出价不能比起拍价低"); } AuctionSalesroom byId1 = this.getById(bidVO.getAuctionSalesroomId()); @@ -701,7 +741,7 @@ wrapper3.orderByDesc(AuctionBidRecord::getLastBidAmount); wrapper3.last("limit 1"); AuctionBidRecord one3 = auctionBidRecordService.getOne(wrapper3); - if (byId.getSalesroomStock() == 1) { + if (byId.getBidNum() == 1) { if (one3 != null) { if (bidVO.getLastBidAmount().doubleValue() < one3.getLastBidAmount() .doubleValue()) { @@ -717,7 +757,8 @@ } BigDecimal bigDecimal = byId.getStartingPrice().add(byId.getMinimumMarkupAmount()); - if (bigDecimal.doubleValue() > bidVO.getLastBidAmount().doubleValue()) { + if (bigDecimal.doubleValue() > bidVO.getLastBidAmount().doubleValue() + && count > 0) { throw new ServiceException("出价不能比每次最少加价低"); } @@ -750,6 +791,7 @@ one.setStatus(BidStatusEnum.ELIMINATE); one.setBidCount(1); one.setLastBidAmount(bidVO.getLastBidAmount()); + one.setGoodsName(Objects.nonNull(goodsSku) ? goodsSku.getSkuName() : ""); auctionBidRecordService.save(one); } @@ -775,14 +817,27 @@ String finalMsg = msg; sysUserClient.pushByClientType(WebsocketMessageDTO.builder().message(finalMsg) .clientType(ClientTypeEnum.MEMBER).build(), SecurityConstants.INNER); + // 发送短信 + authClient.sendSms( + SmsSendDTO.builder().mobileList(Lists.newArrayList(membeOne.getPhone())) + .content("【酒鼎老酒】出价成功").build(), SecurityConstants.INNER); } else { AuctionGoods byId = auctionGoodsService.getById(bidVO.getTargetId()); + R<GoodsSku> goodsSkuOneR = goodsSkuClient.getGoodsSkuOne(byId.getGoodsSkuId(), + SecurityConstants.INNER); + GoodsSku goodsSku = goodsSkuOneR.getData(); + // 查询用户出价记录判断是否第一次出价 首次出价,可以只出起拍价,而不是需要比起拍价高。 + Long count = auctionBidRecordService.lambdaQuery() + .eq(AuctionBidRecord::getTargetId, bidVO.getTargetId()) + .eq(AuctionBidRecord::getAuctionType, bidVO.getAuctionType()) + .eq(AuctionBidRecord::getMemberId, bidVO.getMemberId()).count(); if (byId.getStartingPrice().doubleValue() > bidVO.getLastBidAmount() - .doubleValue()) { + .doubleValue() && count > 0) { throw new ServiceException("出价不能比起拍价低"); } BigDecimal bigDecimal = byId.getStartingPrice().add(byId.getMinimumMarkupAmount()); - if (bigDecimal.doubleValue() > bidVO.getLastBidAmount().doubleValue()) { + if (bigDecimal.doubleValue() > bidVO.getLastBidAmount().doubleValue() + && count > 0) { throw new ServiceException("出价不能比每次最少加价低"); } LambdaQueryWrapper<AuctionBidRecord> wrapper1 = Wrappers.lambdaQuery(); @@ -829,6 +884,7 @@ one3.setStatus(BidStatusEnum.ELIMINATE); one3.setBidCount(1); one3.setLastBidAmount(bidVO.getLastBidAmount()); + one3.setGoodsName(Objects.nonNull(goodsSku) ? goodsSku.getSkuName() : ""); auctionBidRecordService.save(one3); } @@ -847,6 +903,10 @@ String finalMsg = msg; sysUserClient.pushByClientType(WebsocketMessageDTO.builder().message(finalMsg) .clientType(ClientTypeEnum.MEMBER).build(), SecurityConstants.INNER); + // 发送短信 + authClient.sendSms( + SmsSendDTO.builder().mobileList(Lists.newArrayList(membeOne.getPhone())) + .content("【酒鼎老酒】出价成功").build(), SecurityConstants.INNER); } } finally { @@ -893,6 +953,7 @@ AuctionSalesroom::getEndTime, AuctionSalesroom::getType, AuctionSalesroom::getAuthentication, AuctionSalesroom::getStatus, AuctionSalesroom::getQrCode) + .in(CollUtils.isNotEmpty(query.getIds()), AuctionSalesroom::getId, query.getIds()) .like(StringUtils.isNotEmpty(query.getSalesroomName()), AuctionSalesroom::getSalesroomName, query.getSalesroomName()) .eq(StringUtils.isNotNull(query.getAuthentication()), @@ -924,7 +985,7 @@ // 计算每个拍卖场所有拍品数量 Map<Long, Integer> map = auctionSalesroomGoods.stream() .collect(Collectors.groupingBy(AuctionSalesroomGoods::getAuctionSalesroomId, - Collectors.summingInt(AuctionSalesroomGoods::getSalesroomStock))); + Collectors.summingInt(AuctionSalesroomGoods::getBidNum))); for (MgtAuctionSalesroomVO mgtAuctionSalesroomVO : list) { Integer i = map.get(mgtAuctionSalesroomVO.getId()); if (StringUtils.isNotNull(i)) { @@ -935,25 +996,51 @@ return auctionSalesroomVOPageDTO; } - /** - * 查看二维码 - * - * @param id 拍卖场id - * @return 二维码 - */ @Override - public String getQrCode(Long id) throws Exception { - AuctionSalesroom auctionSalesroom = this.getById(id); - if (StringUtils.isBlank(auctionSalesroom.getQrCode())) { - AuctionSalesroomQrCodeVO vo = new AuctionSalesroomQrCodeVO(); - vo.setAuctionSalesroomNo(auctionSalesroom.getAuctionSalesroomNo()); - vo.setType(auctionSalesroom.getType().getCode()); - String url = remoteFileService.obsUpload( - CreateQrCode.createQRCodeStream(objectMapper.writeValueAsString(vo))).getData(); - auctionSalesroom.setQrCode(url); - this.updateById(auctionSalesroom); + public List<MgtAuctionSalesroomVO> getAuctionSalesroomList(MgtAuctionSalesroomQuery query) { + // 分页查询 + List<AuctionSalesroom> auctionSalesroomList = this.lambdaQuery() + .select(AuctionSalesroom::getId, AuctionSalesroom::getSalesroomName, + AuctionSalesroom::getCreateTime, AuctionSalesroom::getStartTime, + AuctionSalesroom::getEndTime, AuctionSalesroom::getType, + AuctionSalesroom::getAuthentication, AuctionSalesroom::getStatus, + AuctionSalesroom::getQrCode) + .in(CollUtils.isNotEmpty(query.getIds()), AuctionSalesroom::getId, query.getIds()) + .like(StringUtils.isNotEmpty(query.getSalesroomName()), + AuctionSalesroom::getSalesroomName, query.getSalesroomName()) + .eq(StringUtils.isNotNull(query.getAuthentication()), + AuctionSalesroom::getAuthentication, query.getAuthentication()) + .eq(StringUtils.isNotNull(query.getStatus()), AuctionSalesroom::getStatus, + query.getStatus()).between( + StringUtils.isNotNull(query.getStartTime()) && StringUtils.isNotNull( + query.getEndTime()), AuctionSalesroom::getStartTime, + query.getStartTime(), + query.getEndTime()) + .orderByDesc(AuctionSalesroom::getCreateTime) + .list(); + + List<MgtAuctionSalesroomVO> list = BeanUtils.copyList(auctionSalesroomList, + MgtAuctionSalesroomVO.class); + List<Long> auctionSalesroomIdList = list.stream().map(MgtAuctionSalesroomVO::getId) + .collect(Collectors.toList()); + if (StringUtils.isNotEmpty(auctionSalesroomIdList)) { + // 所有拍卖场的拍卖商品 + List<AuctionSalesroomGoods> auctionSalesroomGoods = auctionSalesroomGoodsMapper.selectList( + Wrappers.<AuctionSalesroomGoods>lambdaQuery() + .in(AuctionSalesroomGoods::getAuctionSalesroomId, + auctionSalesroomIdList)); + // 计算每个拍卖场所有拍品数量 + Map<Long, Integer> map = auctionSalesroomGoods.stream() + .collect(Collectors.groupingBy(AuctionSalesroomGoods::getAuctionSalesroomId, + Collectors.summingInt(AuctionSalesroomGoods::getBidNum))); + for (MgtAuctionSalesroomVO mgtAuctionSalesroomVO : list) { + Integer i = map.get(mgtAuctionSalesroomVO.getId()); + if (StringUtils.isNotNull(i)) { + mgtAuctionSalesroomVO.setAuctionGoodsNum(i); + } + } } - return auctionSalesroom.getQrCode(); + return list; } @Override @@ -973,11 +1060,14 @@ if (StringUtils.isNull(data.getMinimumMarkupAmount())) { throw new ServiceException("拍卖商品最低加价金额不能为空"); } - if (StringUtils.isNull(data.getSalesroomStock())) { - throw new ServiceException("拍卖商品拍品数量不能为空"); + if (StringUtils.isNull(data.getBidNum())) { + throw new ServiceException("可中拍人数不能为空"); } if (StringUtils.isNull(data.getListingDuration())) { throw new ServiceException("拍卖商品拍卖时间不能为空"); + } + if (StringUtils.isBlank(data.getDescription())) { + throw new ServiceException("拍卖商品介绍不能为空"); } } }); @@ -991,15 +1081,12 @@ AuctionSalesroomQrCodeVO vo = new AuctionSalesroomQrCodeVO(); vo.setAuctionSalesroomNo(nextId.toString()); vo.setType(auctionSalesroom.getType().getCode()); - String url = remoteFileService.obsUpload( - CreateQrCode.createQRCodeStream(objectMapper.writeValueAsString(vo))).getData(); - auctionSalesroom.setQrCode(url); // 添加 this.save(auctionSalesroom); List<GoodsStockUpdDTO> goodsStockUpdDTOS = auctionSalesroomGoods.stream().map(item -> { GoodsStockUpdDTO goodsStockUpdDTO = new GoodsStockUpdDTO(); goodsStockUpdDTO.setGoodsSkuId(item.getGoodsSkuId()); - goodsStockUpdDTO.setAuctionStock(item.getSalesroomStock() * -1); + goodsStockUpdDTO.setAuctionStock(item.getBidNum() * -1 * item.getDealQuantity()); return goodsStockUpdDTO; }).collect(Collectors.toList()); goodsSkuClient.updGoodsStock(goodsStockUpdDTOS, SecurityConstants.INNER); @@ -1020,10 +1107,6 @@ AuctionSalesroomQrCodeVO vo = new AuctionSalesroomQrCodeVO(); vo.setAuctionSalesroomNo(auctionSalesroomOrg.getAuctionSalesroomNo()); vo.setType(auctionSalesroom.getType().getCode()); - String url = remoteFileService.obsUpload( - CreateQrCode.createQRCodeStream(objectMapper.writeValueAsString(vo))) - .getData(); - auctionSalesroom.setQrCode(url); } this.updateById(auctionSalesroom); List<AuctionSalesroomGoods> list = auctionSalesroomGoodsMapper.selectList( @@ -1037,8 +1120,8 @@ .map(auctionSalesroomGood -> { GoodsStockUpdDTO goodsStockUpdDTO = new GoodsStockUpdDTO(); goodsStockUpdDTO.setGoodsSkuId(salesroomGoods.getGoodsSkuId()); - goodsStockUpdDTO.setAuctionStock(salesroomGoods.getSalesroomStock() - - auctionSalesroomGood.getSalesroomStock()); + goodsStockUpdDTO.setAuctionStock(salesroomGoods.getBidNum() * salesroomGoods.getDealQuantity() + - auctionSalesroomGood.getBidNum() * auctionSalesroomGood.getDealQuantity()); return goodsStockUpdDTO; })) .collect(Collectors.toList()); @@ -1368,7 +1451,7 @@ // 扣减库存 GoodsStockUpdDTO goodsStockUpdDTO = new GoodsStockUpdDTO(); goodsStockUpdDTO.setGoodsSkuId(data.getId()); - goodsStockUpdDTO.setAuctionStock(dto.getSalesroomStock() * -1); + goodsStockUpdDTO.setAuctionStock(dto.getBidNum() * dto.getDealQuantity() * -1); R<?> result = goodsSkuClient.updGoodsStock(Lists.newArrayList(goodsStockUpdDTO), SecurityConstants.INNER); if (result.getCode() != Constants.SUCCESS) { @@ -1478,40 +1561,103 @@ .orderByAsc(AuctionBidRecord::getLastBidTime)); if (CollUtils.isNotEmpty(auctionBidRecordList)) { List<AuctionBidRecord> auctionBidRecords = new ArrayList<>(); - if (auctionBidRecordList.size() >= auctionSalesroomGoods.getSalesroomStock()) { - for (int i = 0; i < auctionSalesroomGoods.getSalesroomStock(); i++) { + Map<Long, String> orderIdMap = new HashMap<>(); + if (auctionBidRecordList.size() >= auctionSalesroomGoods.getBidNum()) { + for (int i = 0; i < auctionSalesroomGoods.getBidNum(); i++) { AuctionBidRecord auctionBidRecord = auctionBidRecordList.get(i); auctionBidRecord.setStatus(BidStatusEnum.SUCCESSFUL); - auctionBidRecordMapper.updateById(auctionBidRecord); auctionBidRecords.add(auctionBidRecord); + Long orderId = addOrder(auctionBidRecord.getTargetId(), + auctionBidRecord.getMemberId(), + auctionBidRecord.getLastBidAmount(), + auctionSalesroom.getBond(), + auctionSalesroomGoods.getDealQuantity()); + orderIdMap.put(auctionBidRecord.getMemberId(), orderId.toString()); + auctionBidRecord.setOrderId(orderId); + auctionBidRecordMapper.updateById(auctionBidRecord); } } else { for (int i = 0; i < auctionBidRecordList.size(); i++) { AuctionBidRecord auctionBidRecord = auctionBidRecordList.get(i); auctionBidRecord.setStatus(BidStatusEnum.SUCCESSFUL); - auctionBidRecordMapper.updateById(auctionBidRecord); auctionBidRecords.add(auctionBidRecord); + Long orderId = addOrder(auctionBidRecord.getTargetId(), + auctionBidRecord.getMemberId(), + auctionBidRecord.getLastBidAmount(), + auctionSalesroom.getBond(), + auctionSalesroomGoods.getDealQuantity()); + orderIdMap.put(auctionBidRecord.getMemberId(), orderId.toString()); + auctionBidRecord.setOrderId(orderId); + auctionBidRecordMapper.updateById(auctionBidRecord); } // 没有出价记录,回退库存 GoodsStockUpdDTO goodsStockUpdDTO = new GoodsStockUpdDTO(); goodsStockUpdDTO.setGoodsSkuId(auctionSalesroomGoods.getGoodsSkuId()); goodsStockUpdDTO.setAuctionStock( - auctionSalesroomGoods.getSalesroomStock() - - auctionBidRecordList.size()); + auctionSalesroomGoods.getBidNum() + * auctionSalesroomGoods.getDealQuantity() + - auctionBidRecordList.size() + * auctionSalesroomGoods.getDealQuantity()); goodsSkuClient.updGoodsStock(Lists.newArrayList(goodsStockUpdDTO), SecurityConstants.INNER); } - for (AuctionBidRecord auctionBidRecord : auctionBidRecords) { - addOrder(auctionBidRecord.getTargetId(), auctionBidRecord.getMemberId(), - auctionBidRecord.getLastBidAmount(), - auctionSalesroom.getBond()); + 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()); + Map<Long, String> bidMap = auctionBidRecordList.stream().collect( + Collectors.toMap(AuctionBidRecord::getMemberId, + item -> item.getId().toString())); + 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, bidMap); + // 发送短信通知 + 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, bidMap); + // 发送短信通知 + 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 { // 没有出价记录,回退库存 GoodsStockUpdDTO goodsStockUpdDTO = new GoodsStockUpdDTO(); goodsStockUpdDTO.setGoodsSkuId(auctionSalesroomGoods.getGoodsSkuId()); goodsStockUpdDTO.setAuctionStock( - auctionSalesroomGoods.getSalesroomStock()); + auctionSalesroomGoods.getBidNum() + * auctionSalesroomGoods.getDealQuantity()); goodsSkuClient.updGoodsStock(Lists.newArrayList(goodsStockUpdDTO), SecurityConstants.INNER); } @@ -1533,8 +1679,35 @@ } } - public void addOrder(Long goodsSkuId, Long memberId, BigDecimal lastBidAmount, - BigDecimal bound) { + /** + * 发送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, Map<Long, String> bidMap) { + 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(), "") : ""); + map.put("auction_bid_record_id", bidMap.getOrDefault(member.getId(), "0")); + map.put("member_id", member.getId().toString()); + String msg = com.alibaba.fastjson2.JSONObject.toJSONString(map); + sysUserClient.pushByClientType( + WebsocketMessageDTO.builder().message(msg).clientType(ClientTypeEnum.MEMBER) + .build(), SecurityConstants.INNER); + log.info("===================>发送websocket通知,消息体{}", msg); + } + } + + public Long addOrder(Long goodsSkuId, Long memberId, BigDecimal lastBidAmount, + BigDecimal bound, Integer dealQuantity) { OrderDTO order = new OrderDTO(); order.setGoodsSkuId(goodsSkuId); order.setOrderTime(LocalDateTime.now()); @@ -1543,8 +1716,8 @@ AuctionSalesroomGoods auctionSalesroomGoods = auctionSalesroomGoodsMapper.selectById( goodsSkuId); - order.setGoodsQuantity(1); - order.setTotalAmount(lastBidAmount); + order.setGoodsQuantity(dealQuantity); + order.setTotalAmount(lastBidAmount.multiply(new BigDecimal(dealQuantity))); order.setAuctionSalesroomId(auctionSalesroomGoods.getAuctionSalesroomId()); R<MemberAddress> memberAddressR = memberClient.getMemberAddressOne(memberId, @@ -1583,7 +1756,8 @@ order.setSkuName(goodsSku.getSkuName()); order.setCoverPic(goodsSku.getCoverPic()); order.setPrice(lastBidAmount); - orderClient.saveOrderOne(order, SecurityConstants.INNER); + order.setGoodsId(auctionSalesroomGoods.getGoodsSkuId()); + return orderClient.saveOrderOne(order, SecurityConstants.INNER).getData(); } /** * 开始下一拍卖商品 @@ -1674,8 +1848,7 @@ map.put("message_type", "start"); map.put("type", "1"); String msg = objectMapper.writeValueAsString(map); - sysUserClient.pushByClientType(WebsocketMessageDTO.builder().message(msg) - .clientType(ClientTypeEnum.AUCTIONEER).build(), SecurityConstants.INNER); + sysUserClient.pushAll(msg, SecurityConstants.INNER); } @Override @@ -1709,7 +1882,8 @@ // 等待中的商品退库存 GoodsStockUpdDTO goodsStockUpdDTO = new GoodsStockUpdDTO(); goodsStockUpdDTO.setGoodsSkuId(salesroomGoods.getGoodsSkuId()); - goodsStockUpdDTO.setAuctionStock(salesroomGoods.getSalesroomStock()); + goodsStockUpdDTO.setAuctionStock( + salesroomGoods.getBidNum() * salesroomGoods.getDealQuantity()); dtoList.add(goodsStockUpdDTO); } // 批量更新商品库存 @@ -1738,8 +1912,7 @@ map.put("message_type", "end"); map.put("type", "1"); String msg = objectMapper.writeValueAsString(map); - sysUserClient.pushByClientType(WebsocketMessageDTO.builder().message(msg) - .clientType(ClientTypeEnum.AUCTIONEER).build(), SecurityConstants.INNER); + sysUserClient.pushAll(msg, SecurityConstants.INNER); } @Override @@ -1791,4 +1964,15 @@ .eq(AuctionBondJl::getBondType, bondType) .last("limit 1")); } + + @Override + public List<GoodsSku> getGoodsSkuByAuctionSalesroomGoodsSet( + Set<Long> auctionSalesroomGoodsSet) { + List<AuctionSalesroomGoods> auctionSalesroomGoodsList = auctionSalesroomGoodsMapper.selectBatchIds( + auctionSalesroomGoodsSet); + Set<Long> goodsSkuIdSet = auctionSalesroomGoodsList.stream() + .map(AuctionSalesroomGoods::getGoodsSkuId).collect( + Collectors.toSet()); + return goodsSkuClient.getGoodsListByIds(goodsSkuIdSet, SecurityConstants.INNER).getData(); + } } -- Gitblit v1.7.1