From fc8b51f40e71aa09bb49f407c1e9f68ac94ceb58 Mon Sep 17 00:00:00 2001 From: mitao <2763622819@qq.com> Date: 星期一, 29 七月 2024 18:51:32 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionGoodsServiceImpl.java | 849 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 835 insertions(+), 14 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 d6b7aef..94e674d 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,25 +1,89 @@ package com.ruoyi.auction.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.ruoyi.auction.controller.management.dto.AuctionGoodsDTO; -import com.ruoyi.auction.controller.management.dto.AuctionGoodsQuery; -import com.ruoyi.auction.controller.management.vo.AuctionGoodsVO; -import com.ruoyi.auction.domain.AuctionGoods; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.google.common.collect.Lists; +import com.ruoyi.auction.controller.management.dto.MgtAuctionGoodsDTO; +import com.ruoyi.auction.controller.management.dto.MgtAuctionGoodsQuery; +import com.ruoyi.auction.controller.management.vo.MgtAuctionBidRecordVO; +import com.ruoyi.auction.controller.management.vo.MgtAuctionGoodsVO; +import com.ruoyi.auction.domain.AuctionBidRecord; +import com.ruoyi.auction.domain.AuctionBondJl; +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; import com.ruoyi.auction.service.IAuctionGoodsService; +import com.ruoyi.auction.service.IMemberAuctionCollectionService; +import com.ruoyi.auction.service.async.AuctionAsyncMethodService; +import com.ruoyi.common.core.constant.SecurityConstants; +import com.ruoyi.common.core.enums.AuctionOrderTypeEnum; +import com.ruoyi.common.core.enums.AuctionStartStatusEnum; +import com.ruoyi.common.core.enums.BidStatusEnum; +import com.ruoyi.common.core.enums.BondStatusEnum; +import com.ruoyi.common.core.enums.ClientTypeEnum; +import com.ruoyi.common.core.enums.ListingStatusEnum; +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.StringUtils; import com.ruoyi.common.core.utils.page.BeanUtils; 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.AuctionGoods; +import com.ruoyi.system.api.domain.CustomConfig; +import com.ruoyi.system.api.domain.GoodsBrand; +import com.ruoyi.system.api.domain.GoodsCategory; +import com.ruoyi.system.api.domain.GoodsFlavorType; +import com.ruoyi.system.api.domain.GoodsSeries; import com.ruoyi.system.api.domain.GoodsSku; +import com.ruoyi.system.api.domain.Member; +import com.ruoyi.system.api.domain.MemberAddress; +import com.ruoyi.system.api.domain.Order; +import com.ruoyi.system.api.domain.OrderAuctionBond; +import com.ruoyi.system.api.domain.WebsocketMessageDTO; +import com.ruoyi.system.api.domain.dto.AuctionGoodsListDTO; +import com.ruoyi.system.api.domain.dto.AuctionGoodsListPageDTO; +import com.ruoyi.system.api.domain.dto.GoodsStockUpdDTO; +import com.ruoyi.system.api.domain.dto.ListStatusDTO; +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.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.GoodsSkuClient; +import com.ruoyi.system.api.feignClient.MemberClient; +import com.ruoyi.system.api.feignClient.OrderClient; +import com.ruoyi.system.api.feignClient.SysUserClient; +import io.seata.spring.annotation.GlobalTransactional; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.HashSet; import java.util.List; +import java.util.Map; +import java.util.Objects; import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; import java.util.stream.Collectors; +import javax.annotation.Resource; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; /** * <p> @@ -35,6 +99,26 @@ public class AuctionGoodsServiceImpl extends ServiceImpl<AuctionGoodsMapper, AuctionGoods> implements IAuctionGoodsService { private final GoodsSkuClient goodsSkuClient; + private final MemberClient memberClient; + private final OrderClient orderClient; + private final SysUserClient sysUserClient; + + private final AuctionClient auctionClient; + private final IAuctionBidRecordService auctionBidRecordService; + private final AuctionAsyncMethodService auctionAsyncMethodService; + // 创建一个静态共享的ObjectMapper实例以重用 + private static final ObjectMapper objectMapper = new ObjectMapper(); + @Resource + private IMemberAuctionCollectionService memberAuctionCollectionService; + + @Resource + private AuctionGoodsMapper auctionGoodsMapper; + + @Resource + private IAuctionBrowseRecordService iAuctionBrowseRecordService; + + @Resource + private AuctionBondJlMapper auctionBondJlMapper; /** * 获取拍卖商品列表的分页数据 @@ -43,19 +127,25 @@ * @return PageDTO<AuctionGoodsVO> */ @Override - public PageDTO<AuctionGoodsVO> getAuctionGoodsPage(AuctionGoodsQuery query) { + public PageDTO<MgtAuctionGoodsVO> getAuctionGoodsPage(MgtAuctionGoodsQuery query) { Set<Long> goodsSkuIdList = null; + Page<AuctionGoods> page = new Page<>(query.getPageCurr(), query.getPageSize()); if (StringUtils.isNotEmpty(query.getGoodsSkuName())) { - List<GoodsSku> goodsSku = goodsSkuClient.getGoodsByName(query.getGoodsSkuName()) - .getData(); + List<GoodsSku> goodsSku = goodsSkuClient.getGoodsByName(query.getGoodsSkuName(), + SecurityConstants.INNER).getData(); + if (StringUtils.isEmpty(goodsSku)) { + return PageDTO.empty(page); + } goodsSkuIdList = goodsSku.stream().map(GoodsSku::getId) .collect(Collectors.toSet()); + } - Page<AuctionGoods> page = this.lambdaQuery() + page = this.lambdaQuery() .select(AuctionGoods::getId, AuctionGoods::getGoodsSkuId, AuctionGoods::getListingStatus, AuctionGoods::getStartStatus, AuctionGoods::getStartTime, AuctionGoods::getEndTime, - AuctionGoods::getAuctionStock, AuctionGoods::getMinimumMarkupAmount).in( + AuctionGoods::getAuctionStock, AuctionGoods::getMinimumMarkupAmount, + AuctionGoods::getAuthentication, AuctionGoods::getStartingPrice).in( StringUtils.isNotEmpty(goodsSkuIdList), AuctionGoods::getGoodsSkuId, goodsSkuIdList).eq(StringUtils.isNotNull(query.getAuthentication()), AuctionGoods::getAuthentication, query.getAuthentication()) @@ -63,29 +153,760 @@ query.getListingStatus()) .eq(StringUtils.isNotNull(query.getStartStatus()), AuctionGoods::getStartStatus, query.getStartStatus()) + .orderByDesc(AuctionGoods::getCreateTime) .page(new Page<>(query.getPageCurr(), query.getPageSize())); - return PageDTO.of(page, AuctionGoodsVO.class); + if (StringUtils.isEmpty(page.getRecords())) { + return PageDTO.empty(page); + } + // 查询商品信息 + Set<Long> goodsIdList = page.getRecords().stream().map(AuctionGoods::getGoodsSkuId) + .collect(Collectors.toSet()); + List<GoodsSku> data = goodsSkuClient.getGoodsListByIds(goodsIdList, SecurityConstants.INNER) + .getData(); + PageDTO<MgtAuctionGoodsVO> pageDTO = PageDTO.of(page, + MgtAuctionGoodsVO.class); + if (StringUtils.isNotEmpty(data)) { + Map<Long, GoodsSku> goodsSkuMap = data.stream() + .collect(Collectors.toMap(GoodsSku::getId, e -> e)); + for (MgtAuctionGoodsVO mgtAuctionGoodsVO : pageDTO.getList()) { + GoodsSku goodsSku = goodsSkuMap.get(mgtAuctionGoodsVO.getGoodsSkuId()); + if (StringUtils.isNotNull(goodsSku)) { + mgtAuctionGoodsVO.setGoodsSkuName(goodsSku.getSkuName()); + mgtAuctionGoodsVO.setSpec(goodsSku.getSpec()); + } + } + } + return pageDTO; } @Override - public void saveAuctionGoods(AuctionGoodsDTO dto) { + @Transactional + @GlobalTransactional(rollbackFor = Exception.class) + public void saveAuctionGoods(MgtAuctionGoodsDTO dto) { Long id = dto.getId(); Long goodsSkuId = dto.getGoodsSkuId(); + AuctionGoods auctionGoods = BeanUtils.copyBean(dto, AuctionGoods.class); // 添加 if (StringUtils.isNull(id)) { if (StringUtils.isNull(goodsSkuId)) { throw new ServiceException("商品id不能为空"); } - GoodsSku goodsSku = goodsSkuClient.getGoodsSkuOne(goodsSkuId).getData(); + GoodsSku goodsSku = goodsSkuClient.getGoodsSkuOne(goodsSkuId, SecurityConstants.INNER) + .getData(); if (StringUtils.isNull(goodsSku)) { throw new ServiceException("商品不存在"); } - AuctionGoods auctionGoods = BeanUtils.copyBean(dto, AuctionGoods.class); + if (goodsSku.getStock() < dto.getAuctionStock()) { + throw new ServiceException("商品库存不足"); + } this.save(auctionGoods); - + // 扣减商品库存 + GoodsStockUpdDTO goodsStockUpdDTO = new GoodsStockUpdDTO(); + goodsStockUpdDTO.setGoodsSkuId(goodsSkuId); + goodsStockUpdDTO.setAuctionStock(dto.getAuctionStock() * -1); + goodsSkuClient.updGoodsStock(Lists.newArrayList(goodsStockUpdDTO), + SecurityConstants.INNER); } else { // 编辑 + AuctionGoods auctionGoodsOrg = this.getById(id); + if (StringUtils.isNull(auctionGoodsOrg)) { + throw new ServiceException("拍卖商品不存在"); + } + if (auctionGoodsOrg.getStartStatus().equals(AuctionStartStatusEnum.IN_AUCTION)) { + throw new ServiceException("商品正在拍卖中不能编辑"); + } + if (auctionGoodsOrg.getStartStatus().equals(AuctionStartStatusEnum.ENDED)) { + throw new ServiceException("商品拍卖已结束不能编辑"); + } + GoodsSku goodsSku = goodsSkuClient.getGoodsSkuOne(goodsSkuId, SecurityConstants.INNER) + .getData(); + if (StringUtils.isNull(goodsSku)) { + throw new ServiceException("商品不存在"); + } + if (goodsSku.getStock() + auctionGoodsOrg.getAuctionStock() < dto.getAuctionStock()) { + throw new ServiceException("商品库存不足"); + } + if (!auctionGoodsOrg.getAuctionStock().equals(dto.getAuctionStock())) { + // 更新商品库存 + GoodsStockUpdDTO goodsStockUpdDTO = new GoodsStockUpdDTO(); + goodsStockUpdDTO.setGoodsSkuId(goodsSkuId); + goodsStockUpdDTO.setAuctionStock( + auctionGoodsOrg.getAuctionStock() - dto.getAuctionStock()); + goodsSkuClient.updGoodsStock(Lists.newArrayList(goodsStockUpdDTO), + SecurityConstants.INNER); + } + auctionGoodsOrg.setStartingPrice(dto.getStartingPrice()); + auctionGoodsOrg.setMinimumMarkupAmount(dto.getMinimumMarkupAmount()); + auctionGoodsOrg.setStartTime(dto.getStartTime()); + auctionGoodsOrg.setEndTime(dto.getEndTime()); + auctionGoodsOrg.setAuctionStock(dto.getAuctionStock()); + auctionGoodsOrg.setBond(dto.getBond()); + auctionGoodsOrg.setAuthentication(dto.getAuthentication()); + auctionGoodsOrg.setDescription(dto.getDescription()); + auctionGoodsOrg.setShareTitle(dto.getShareTitle()); + auctionGoodsOrg.setSharePic(dto.getSharePic()); + this.updateById(auctionGoodsOrg); + } + auctionAsyncMethodService.auctionGoodsScheduleTask(Lists.newArrayList(auctionGoods)); + } + + /** + * 查看拍卖商品详情 + * + * @param id 拍卖商品id + * @return AuctionGoodsVO + */ + @Override + public MgtAuctionGoodsVO getAuctionGoodsById(Long id) { + AuctionGoods auctionGoods = this.getById(id); + if (StringUtils.isNull(auctionGoods)) { + throw new ServiceException("拍卖商品不存在"); + } + MgtAuctionGoodsVO auctionGoodsVO = BeanUtils.copyBean(auctionGoods, + MgtAuctionGoodsVO.class); + // 远程调用商品服务,获取商品信息 + GoodsSku goodsSku = goodsSkuClient.getGoodsSkuOne(auctionGoods.getGoodsSkuId(), + SecurityConstants.INNER).getData(); + if (StringUtils.isNotNull(goodsSku)) { + auctionGoodsVO.setGoodsSkuName(goodsSku.getSkuName()); + } + if (!auctionGoods.getStartStatus().equals(AuctionStartStatusEnum.IN_PREVIEW)) { + List<AuctionBidRecord> list = auctionBidRecordService.lambdaQuery() + .eq(AuctionBidRecord::getTargetId, auctionGoodsVO.getId()) + .eq(AuctionBidRecord::getAuctionType, AuctionOrderTypeEnum.REGULAR_ITEMS) + .orderByDesc(AuctionBidRecord::getLastBidAmount).list(); + if (StringUtils.isNotEmpty(list)) { + Set<Long> collect = list.stream().map(AuctionBidRecord::getMemberId) + .collect(Collectors.toSet()); + List<Member> memberList = memberClient. + getMemberListByIds(collect, SecurityConstants.INNER).getData(); + Map<Long, Member> memberMap = memberList.stream() + .collect(Collectors.toMap(Member::getId, e -> e)); + List<MgtAuctionBidRecordVO> mgtAuctionBidRecordVOS = BeanUtils.copyList(list, + MgtAuctionBidRecordVO.class); + for (MgtAuctionBidRecordVO vo : mgtAuctionBidRecordVOS) { + Member member = memberMap.get(vo.getMemberId()); + if (StringUtils.isNotNull(member)) { + vo.setMemberName(member.getNickname()); + vo.setPhone(member.getPhone()); + } + + } + auctionGoodsVO.setRecordList(mgtAuctionBidRecordVOS); + } + } + return auctionGoodsVO; + } + + /** + * 立即结束 + * + * @param id 拍卖商品id + */ + @Override + @GlobalTransactional(rollbackFor = Exception.class) + @Transactional + public void stopAuctionGoods(Long id) { + AuctionGoods auctionGoods = this.lambdaQuery().eq(AuctionGoods::getId, id) + .eq(AuctionGoods::getStartStatus, AuctionStartStatusEnum.IN_AUCTION).one(); + if (StringUtils.isNull(auctionGoods)) { + throw new ServiceException("拍卖商品不存在"); + } + // 远程调用商品服务,获取商品信息 + GoodsSku goodsSku = goodsSkuClient.getGoodsSkuOne(auctionGoods.getGoodsSkuId(), + SecurityConstants.INNER) + .getData(); + if (auctionGoods.getStartStatus().equals(AuctionStartStatusEnum.IN_AUCTION)) { + // 查询出价记录 + List<AuctionBidRecord> auctionBidRecords = auctionBidRecordService.getBidRecordByGoodsId( + id); + List<AuctionBidRecord> auctionBidRecordList = new ArrayList<>(); + if (StringUtils.isNotEmpty(auctionBidRecords)) { + if (auctionBidRecords.size() >= auctionGoods.getAuctionStock()) { + // 中标 + for (int i = 0; i < auctionGoods.getAuctionStock(); i++) { + AuctionBidRecord auctionBidRecord = auctionBidRecords.get(i); + auctionBidRecord.setStatus(BidStatusEnum.SUCCESSFUL); + auctionBidRecordList.add(auctionBidRecord); + } + } else { + // 中标 + for (int i = 0; i < auctionBidRecords.size(); i++) { + AuctionBidRecord auctionBidRecord = auctionBidRecords.get(i); + auctionBidRecord.setStatus(BidStatusEnum.SUCCESSFUL); + auctionBidRecordList.add(auctionBidRecord); + } + // 退回剩余库存 + GoodsStockUpdDTO goodsStockUpdDTO = new GoodsStockUpdDTO(); + goodsStockUpdDTO.setGoodsSkuId(auctionGoods.getGoodsSkuId()); + goodsStockUpdDTO.setAuctionStock( + auctionGoods.getAuctionStock() - auctionBidRecords.size()); + goodsSkuClient.updGoodsStock(Lists.newArrayList(goodsStockUpdDTO), + 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(); + for (AuctionBidRecord auctionBidRecord : auctionBidRecordList) { + BigDecimal lastBidAmount = auctionBidRecord.getLastBidAmount(); + BigDecimal divide = lastBidAmount.divide( + new BigDecimal(moneyConfig.getConfigValue()), 0, RoundingMode.DOWN); + int points = divide.multiply( + new BigDecimal(pointsConfig.getConfigValue())).intValue(); + OrderDTO orderDTO = new OrderDTO(); + orderDTO.setAuctionType(AuctionOrderTypeEnum.REGULAR_ITEMS); + orderDTO.setGoodsQuantity(auctionGoods.getAuctionStock()); + orderDTO.setGoodsSkuId(auctionGoods.getId()); + orderDTO.setBound(auctionGoods.getBond()); + orderDTO.setMemberId(auctionBidRecord.getMemberId()); + orderDTO.setTotalAmount(auctionBidRecord.getLastBidAmount()); + orderDTO.setOrderFrom(OrderFromEnum.AUCTION_ORDERS); + orderDTO.setOrderTime(LocalDateTime.now()); + orderDTO.setPoints(points); + orderDTO.setBound(auctionGoods.getBond()); + MemberAddress data = memberClient.getMemberAddressOne( + auctionBidRecord.getMemberId(), SecurityConstants.INNER).getData(); + if (StringUtils.isNotNull(data)) { + orderDTO.setReceiverName(data.getRecipientName()); + orderDTO.setReceiverCity(data.getReceiverCity()); + orderDTO.setReceiverDetailAddress(data.getDetailedAddress()); + orderDTO.setReceiverphone(data.getRecipientPhone()); + } + if (StringUtils.isNotNull(goodsSku)) { + orderDTO.setCoverPic(goodsSku.getCoverPic()); + orderDTO.setPrice(goodsSku.getPrice()); + orderDTO.setSkuName(goodsSku.getSkuName()); + } + orderDTO.setOrderTimeSx(auctionGoods.getEndTime()); + orderClient.saveOrderOne(orderDTO, SecurityConstants.INNER); + } + } else { + // 没有人出价,退回拍卖商品库存 + GoodsStockUpdDTO goodsStockUpdDTO = new GoodsStockUpdDTO(); + goodsStockUpdDTO.setGoodsSkuId(auctionGoods.getGoodsSkuId()); + goodsStockUpdDTO.setAuctionStock(auctionGoods.getAuctionStock()); + goodsSkuClient.updGoodsStock(Lists.newArrayList(goodsStockUpdDTO), + SecurityConstants.INNER); + } + // 结束拍卖 + this.lambdaUpdate().set(AuctionGoods::getStartStatus, AuctionStartStatusEnum.ENDED) + .eq(AuctionGoods::getId, id).update(); + // 查询已支付保证金记录 + List<OrderAuctionBond> auctionBondList = orderClient.getOrderAuctionBondList(id, + AuctionOrderTypeEnum.REGULAR_ITEMS, + BondStatusEnum.PAID, + SecurityConstants.INNER).getData(); + if (StringUtils.isNotEmpty(auctionBondList)) { + List<RefundDTO> refundDTOList = new ArrayList<>(); + List<Long> unRefundMemberIdList = auctionBidRecordList.stream() + .map(AuctionBidRecord::getMemberId).collect( + Collectors.toList()); + for (OrderAuctionBond orderAuctionBond : auctionBondList) { + + // 已中标需在订单完成后退保证金 + if (unRefundMemberIdList.contains(orderAuctionBond.getMemberId())) { + 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(); + // 处理退款返回结果 + List<String> successfulOrders = new ArrayList<>(); + List<String> failedOrders = new ArrayList<>(); + + data.forEach((key, value) -> { + if ((boolean) value) { + successfulOrders.add(key); + } else { + failedOrders.add(key); + } + }); + log.info("订单号:{},退款失败", failedOrders); + // 退款成功的订单修改状态 + List<Long> ids = auctionBondList.stream().map(bond -> { + if (successfulOrders.contains(bond.getOrderNo())) { + return bond.getId(); + } + return null; + }).filter(Objects::nonNull).collect(Collectors.toList()); + // 远程调用订单服务修改订单状态 + orderClient.updateOrderAuctionBondStatus(ids, BondStatusEnum.REFUNDED, + SecurityConstants.INNER); + } + } + } + + @Override + public PageDTO<AuctionGoodsListVO> getAuctionGoodsList(AuctionGoodsListDTO auctionGoodsListDTO) { + Set<Long> goodsSkuIdList = null; + if (StringUtils.isNotEmpty(auctionGoodsListDTO.getGoodsSkuName())) { + List<GoodsSku> goodsSku = goodsSkuClient.getGoodsByName(auctionGoodsListDTO.getGoodsSkuName(), + SecurityConstants.INNER) + .getData(); + if (goodsSku!=null){ + goodsSkuIdList = goodsSku.stream().map(GoodsSku::getId) + .collect(Collectors.toSet()); + } } + + AuctionGoodsListPageDTO auctionGoodsListPageDTO=new AuctionGoodsListPageDTO(); + 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()); + page.setCurrent(auctionGoodsListDTO.getPageCurr()); + List<AuctionGoods> auctionGoodsPgeList = auctionGoodsMapper.getAuctionGoodsPgeList(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()); + auctionGoodsVO.setAuctionStock(auctionGoods.getAuctionStock()); + GoodsSku goodsSkuOne = goodsSkuClient.getGoodsSkuOne(auctionGoods.getGoodsSkuId(), SecurityConstants.INNER).getData(); + auctionGoodsVO.setUnit(goodsSkuOne.getUnit()); + auctionGoodsVO.setSpec(goodsSkuOne.getSpec()); + auctionGoodsVO.setSpecUnit(goodsSkuOne.getSpecUnit()); + auctionGoodsVO.setGoodsSkuName(goodsSkuOne.getSkuName()); + auctionGoodsVO.setCoverPic(goodsSkuOne.getCoverPic()); + auctionGoodsVO.setYears(String.valueOf(goodsSkuOne.getYears())); + auctionGoodsVOS.add(auctionGoodsVO); + + } + page.setRecords(auctionGoodsVOS); + return PageDTO.of(page); + } + + @Override + public AuctionGoodsinfoVO getAuctionGoodsInfo(AuctionGoodsListDTO auctionGoodsListDTO) { + AuctionGoods byId = auctionGoodsMapper.selectById(auctionGoodsListDTO.getGoodsSkuId()); + GoodsSku goodsSkuOne = goodsSkuClient.getGoodsSkuOne(byId.getGoodsSkuId(), SecurityConstants.INNER).getData(); + AuctionGoodsinfoVO auctionGoodsinfoVO=new AuctionGoodsinfoVO(); + auctionGoodsinfoVO.setGoodsSkuId(byId.getGoodsSkuId()); + auctionGoodsinfoVO.setGoodsSkuName(goodsSkuOne.getSkuName()); + auctionGoodsinfoVO.setStartingPrice(byId.getStartingPrice()); + auctionGoodsinfoVO.setSalesroomStock(byId.getAuctionStock()); + auctionGoodsinfoVO.setStartStatus(byId.getStartStatus()); + auctionGoodsinfoVO.setStartTime(byId.getStartTime()); + auctionGoodsinfoVO.setEndTime(byId.getEndTime()); + auctionGoodsinfoVO.setUnit(goodsSkuOne.getUnit()); + auctionGoodsinfoVO.setBond(byId.getBond()); + auctionGoodsinfoVO.setDescription(goodsSkuOne.getDescription()); + auctionGoodsinfoVO.setExplain(byId.getDescription()); + auctionGoodsinfoVO.setYears(goodsSkuOne.getYears()); + GoodsBrand data = goodsSkuClient.getBrandOne(goodsSkuOne.getBrandId(), SecurityConstants.INNER).getData(); + GoodsCategory data1 = goodsSkuClient.getCategoryOne(goodsSkuOne.getCategoryId(), SecurityConstants.INNER).getData(); + GoodsSeries data2 = goodsSkuClient.getSeriesOne(goodsSkuOne.getSeriesId(), SecurityConstants.INNER).getData(); + GoodsFlavorType data3 = goodsSkuClient.getFlavorTypeOne(goodsSkuOne.getFlavorTypeId(), SecurityConstants.INNER).getData(); + if (data!=null){ + auctionGoodsinfoVO.setBrand(data.getBrandName()); + } + if (data1!=null){ + auctionGoodsinfoVO.setCategory(data1.getCategoryName()); + } + if (data2!=null){ + auctionGoodsinfoVO.setSeries(data2.getSeriesName()); + } + if (data3!=null) { + auctionGoodsinfoVO.setFlavorType(data3.getFlavorTypeName()); + } + auctionGoodsinfoVO.setCoverPic(goodsSkuOne.getCoverPic()); + auctionGoodsinfoVO.setAlbum(goodsSkuOne.getAlbum()); + auctionGoodsinfoVO.setAuthentication(byId.getAuthentication().getCode()); + 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()); + LambdaQueryWrapper<AuctionBidRecord> wrapper1= Wrappers.lambdaQuery(); + wrapper1.eq(AuctionBidRecord::getAuctionType,1); + wrapper1.eq(AuctionBidRecord::getTargetId,byId.getId()); + wrapper1.eq(AuctionBidRecord::getMemberId,auctionGoodsListDTO.getMemberId()); + wrapper1.eq(AuctionBidRecord::getDelFlag,0); + AuctionBidRecord list1 = auctionBidRecordService.getOne(wrapper1); + if (list1!=null){ + auctionGoodsinfoVO.setIsBond(2); + auctionGoodsinfoVO.setPresentBid(list1.getLastBidAmount()); + if (list1.getStatus().getCode()==2){ + auctionGoodsinfoVO.setIsStatus(2); + + OrderDTO orderDTO =new OrderDTO(); + orderDTO.setMemberId(auctionGoodsListDTO.getMemberId()); + orderDTO.setGoodsSkuId(byId.getId()); + Order data4 = orderClient.getOrderOne1(orderDTO, SecurityConstants.INNER).getData(); + if (data4!=null){ + auctionGoodsinfoVO.setOrderId(data4.getId()); + auctionGoodsinfoVO.setOrderNo(data4.getOrderNo()); + } + }else{ + auctionGoodsinfoVO.setIsStatus(1); + } + }else{ + auctionGoodsinfoVO.setIsBond(1); + auctionGoodsinfoVO.setIsStatus(1); + } + LambdaQueryWrapper<MemberAuctionCollection> wrapper2= Wrappers.lambdaQuery(); + wrapper2.eq(MemberAuctionCollection::getMemberId,auctionGoodsListDTO.getMemberId()); + wrapper2.eq(MemberAuctionCollection::getTargetId,byId.getId()); + wrapper2.eq(MemberAuctionCollection::getDelFlag,0); + MemberAuctionCollection one = memberAuctionCollectionService.getOne(wrapper2); + if (one!=null){ + auctionGoodsinfoVO.setIsCollection(2); + }else { + auctionGoodsinfoVO.setIsCollection(1); + } + 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); + + LambdaQueryWrapper<AuctionBrowseRecord> wrapper3=Wrappers.lambdaQuery(); + wrapper3.eq(AuctionBrowseRecord::getDelFlag,0); + wrapper3.eq(AuctionBrowseRecord::getTargetId,auctionGoodsListDTO.getGoodsSkuId()); + wrapper3.eq(AuctionBrowseRecord::getBrowseType,AuctionOrderTypeEnum.REGULAR_ITEMS); + wrapper3.eq(AuctionBrowseRecord::getMemberId,auctionGoodsListDTO.getMemberId()); + wrapper3.ge(AuctionBrowseRecord::getCreateTime, newTime7) + .le(AuctionBrowseRecord::getCreateTime, now); + List<AuctionBrowseRecord> list = iAuctionBrowseRecordService.list(wrapper3); + if (list.size()==0){ + AuctionBrowseRecord auctionBrowseRecord=new AuctionBrowseRecord(); + auctionBrowseRecord.setBrowseType(AuctionOrderTypeEnum.REGULAR_ITEMS); + auctionBrowseRecord.setMemberId(auctionGoodsListDTO.getMemberId()); + auctionBrowseRecord.setTargetId(auctionGoodsListDTO.getGoodsSkuId()); + iAuctionBrowseRecordService.save(auctionBrowseRecord); + } + + LambdaQueryWrapper<AuctionBidRecord> wrapper5= Wrappers.lambdaQuery(); + wrapper5.eq(AuctionBidRecord::getAuctionType,1); + wrapper5.eq(AuctionBidRecord::getTargetId,byId.getId()); + wrapper5.eq(AuctionBidRecord::getDelFlag,0); + wrapper5.orderByDesc(AuctionBidRecord::getLastBidAmount); + List<AuctionBidRecord> list2 = auctionBidRecordService.list(wrapper5); + if (list2.size()>0){ + auctionGoodsinfoVO.setZgBid(list2.get(0).getLastBidAmount()); + } + + + /*CustomConfig returnAddressUserName = sysUserClient.getconfig("MALL_ORDER_DESCRIPTION").getData(); + auctionGoodsinfoVO.setExplain(returnAddressUserName.getConfigValue());*/ + + + List<getHomeGoodsSkuXxiVO> homeGoodsSkuXxiVOS=new ArrayList<>(); + List<GoodsInfoTitleValueVO> goodsInfoTitleValueVOList = goodsSkuClient.getlistByGoodsId(goodsSkuOne.getId(), SecurityConstants.INNER).getData(); + Collections.sort(goodsInfoTitleValueVOList, Comparator.comparingInt(GoodsInfoTitleValueVO::getSortNum)); + for (GoodsInfoTitleValueVO goodsInfoTitleValueVO:goodsInfoTitleValueVOList){ + getHomeGoodsSkuXxiVO getHomeGoodsSkuXxiVOs=new getHomeGoodsSkuXxiVO(); + getHomeGoodsSkuXxiVOs.setContent(goodsInfoTitleValueVO.getContent()); + getHomeGoodsSkuXxiVOs.setTitleName(goodsInfoTitleValueVO.getTitleName()); + homeGoodsSkuXxiVOS.add(getHomeGoodsSkuXxiVOs); + } + auctionGoodsinfoVO.setXxiVOS(homeGoodsSkuXxiVOS); + + return auctionGoodsinfoVO; + } + + @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; + if (data.size()>0){ + goodsSkuIdList = data.stream().map(OrderAuctionBond::getAuctionGoodsId) + .collect(Collectors.toSet()); + }else { + Set<Long> goodsSkuIdList1 =new HashSet<>(); + goodsSkuIdList1.add(0L); + goodsSkuIdList=goodsSkuIdList1; + } + + AuctionGoodsListPageDTO auctionGoodsListPageDTO=new AuctionGoodsListPageDTO(); + if (goodsSkuIdList!=null){ + auctionGoodsListPageDTO.setGoodsSkuIdList(goodsSkuIdList); + } + + if (auctionGoodsListDTO.getStartStatus()!=4){ + if (auctionGoodsListDTO.getStartStatus()==0){ + auctionGoodsListPageDTO.setStartStatus(5); + }else{ + auctionGoodsListPageDTO.setStartStatus(auctionGoodsListDTO.getStartStatus()); + } + + } + + 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(); + 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); + if (list1!=null){ + if (list1.getStatus().getCode()==2){ + auctionGoodsVO.setIsStatus(2); + }else{ + auctionGoodsVO.setIsStatus(1); + } + }else{ + auctionGoodsVO.setIsStatus(1); + } + + auctionGoodsVOS.add(auctionGoodsVO); + + } + page.setRecords(auctionGoodsVOS); + return PageDTO.of(page); + } + + @Override + @GlobalTransactional(rollbackFor = Exception.class) + @Transactional + public void endAuctionGoods(Long id) throws JsonProcessingException { + AuctionGoods auctionGoods = this.getById(id); + if (StringUtils.isNotNull(auctionGoods) && auctionGoods.getStartStatus() + .equals(AuctionStartStatusEnum.IN_AUCTION)) { + // 远程调用商品服务,获取商品信息 + GoodsSku goodsSku = goodsSkuClient.getGoodsSkuOne(auctionGoods.getGoodsSkuId(), + SecurityConstants.INNER) + .getData(); + if (auctionGoods.getStartStatus().equals(AuctionStartStatusEnum.IN_AUCTION)) { + // 查询出价记录 + List<AuctionBidRecord> auctionBidRecords = auctionBidRecordService.getBidRecordByGoodsId( + id); + List<AuctionBidRecord> auctionBidRecordList = new ArrayList<>(); + if (StringUtils.isNotEmpty(auctionBidRecords)) { + if (auctionBidRecords.size() >= auctionGoods.getAuctionStock()) { + // 中标 + for (int i = 0; i < auctionGoods.getAuctionStock(); i++) { + AuctionBidRecord auctionBidRecord = auctionBidRecords.get(i); + auctionBidRecord.setStatus(BidStatusEnum.SUCCESSFUL); + auctionBidRecordList.add(auctionBidRecord); + } + } else { + // 中标 + for (int i = 0; i < auctionBidRecords.size(); i++) { + AuctionBidRecord auctionBidRecord = auctionBidRecords.get(i); + auctionBidRecord.setStatus(BidStatusEnum.SUCCESSFUL); + auctionBidRecordList.add(auctionBidRecord); + } + // 退回剩余库存 + GoodsStockUpdDTO goodsStockUpdDTO = new GoodsStockUpdDTO(); + goodsStockUpdDTO.setGoodsSkuId(auctionGoods.getGoodsSkuId()); + goodsStockUpdDTO.setAuctionStock( + auctionGoods.getAuctionStock() - auctionBidRecords.size()); + goodsSkuClient.updGoodsStock(Lists.newArrayList(goodsStockUpdDTO), + 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(); + for (AuctionBidRecord auctionBidRecord : auctionBidRecordList) { + BigDecimal lastBidAmount = auctionBidRecord.getLastBidAmount(); + BigDecimal divide = lastBidAmount.divide( + new BigDecimal(moneyConfig.getConfigValue()), 0, RoundingMode.DOWN); + int points = divide.multiply( + new BigDecimal(pointsConfig.getConfigValue())).intValue(); + OrderDTO orderDTO = new OrderDTO(); + orderDTO.setAuctionType(AuctionOrderTypeEnum.REGULAR_ITEMS); + orderDTO.setGoodsQuantity(auctionGoods.getAuctionStock()); + orderDTO.setGoodsSkuId(auctionGoods.getId()); + orderDTO.setBound(auctionGoods.getBond()); + orderDTO.setMemberId(auctionBidRecord.getMemberId()); + orderDTO.setTotalAmount(lastBidAmount); + orderDTO.setOrderFrom(OrderFromEnum.AUCTION_ORDERS); + orderDTO.setOrderTime(LocalDateTime.now()); + orderDTO.setPoints(points); + orderDTO.setBound(auctionGoods.getBond()); + MemberAddress data = memberClient.getMemberAddressOne( + auctionBidRecord.getMemberId(), SecurityConstants.INNER).getData(); + if (StringUtils.isNotNull(data)) { + orderDTO.setReceiverName(data.getRecipientName()); + orderDTO.setReceiverCity(data.getReceiverCity()); + orderDTO.setReceiverDetailAddress(data.getDetailedAddress()); + orderDTO.setReceiverphone(data.getRecipientPhone()); + } + if (StringUtils.isNotNull(goodsSku)) { + orderDTO.setCoverPic(goodsSku.getCoverPic()); + orderDTO.setPrice(goodsSku.getPrice()); + orderDTO.setSkuName(goodsSku.getSkuName()); + } + orderDTO.setOrderTimeSx(auctionGoods.getEndTime()); + orderClient.saveOrderOne(orderDTO, SecurityConstants.INNER); + } + } else { + // 没有人出价,退回拍卖商品库存 + GoodsStockUpdDTO goodsStockUpdDTO = new GoodsStockUpdDTO(); + goodsStockUpdDTO.setGoodsSkuId(auctionGoods.getGoodsSkuId()); + goodsStockUpdDTO.setAuctionStock(auctionGoods.getAuctionStock()); + goodsSkuClient.updGoodsStock(Lists.newArrayList(goodsStockUpdDTO), + SecurityConstants.INNER); + } + // 结束拍卖 + this.lambdaUpdate().set(AuctionGoods::getStartStatus, AuctionStartStatusEnum.ENDED) + .eq(AuctionGoods::getId, id).update(); + // 查询已支付保证金记录 + List<OrderAuctionBond> auctionBondList = orderClient.getOrderAuctionBondList(id, + AuctionOrderTypeEnum.REGULAR_ITEMS, + BondStatusEnum.PAID, + SecurityConstants.INNER).getData(); + if (StringUtils.isNotEmpty(auctionBondList)) { + List<RefundDTO> refundDTOList = new ArrayList<>(); + List<Long> unRefundMemberIdList = auctionBidRecordList.stream() + .map(AuctionBidRecord::getMemberId).collect( + Collectors.toList()); + for (OrderAuctionBond orderAuctionBond : auctionBondList) { + + // 已中标需在订单完成后退保证金 + if (unRefundMemberIdList.contains(orderAuctionBond.getMemberId())) { + 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(); + // 处理退款返回结果 + List<String> successfulOrders = new ArrayList<>(); + List<String> failedOrders = new ArrayList<>(); + + data.forEach((key, value) -> { + if ((boolean) value) { + successfulOrders.add(key); + } else { + failedOrders.add(key); + } + }); + log.info("订单号:{},退款失败", failedOrders); + // 退款成功的订单修改状态 + List<Long> ids = auctionBondList.stream().map(bond -> { + if (successfulOrders.contains(bond.getOrderNo())) { + return bond.getId(); + } + return null; + }).filter(Objects::nonNull).collect(Collectors.toList()); + // 远程调用订单服务修改订单状态 + orderClient.updateOrderAuctionBondStatus(ids, BondStatusEnum.REFUNDED, + SecurityConstants.INNER); + } + } + 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", id); + map.put("message_type", "end"); + String msg = objectMapper.writeValueAsString(map); + sysUserClient.pushByClientType(WebsocketMessageDTO.builder().message(msg) + .clientType(ClientTypeEnum.MEMBER).build(), SecurityConstants.INNER); + log.info("===================>发送websocket通知,消息体{}", msg); + } + } + + @Override + public void startAuctionGoods(Long id) throws JsonProcessingException { + AuctionGoods auctionGoods = this.getById(id); + if (StringUtils.isNotNull(auctionGoods) && auctionGoods.getListingStatus().equals( + ListingStatusEnum.ON_SHELVES) && auctionGoods.getStartStatus() + .equals(AuctionStartStatusEnum.IN_PREVIEW)) { + auctionGoods.setStartStatus(AuctionStartStatusEnum.IN_AUCTION); + this.updateById(auctionGoods); + 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", id); + map.put("message_type", "start"); + String msg = objectMapper.writeValueAsString(map); + sysUserClient.pushByClientType(WebsocketMessageDTO.builder().message(msg) + .clientType(ClientTypeEnum.MEMBER).build(), SecurityConstants.INNER); + log.info("===================>发送websocket通知,消息体{}", msg); + } + } + + /** + * 下架/上架 拍卖商品 + * + * @param dto 商品上下架状态对象 + */ + @Override + public void updStatus(ListStatusDTO dto) { + AuctionGoods auctionGoods = this.getById(dto.getId()); + if (StringUtils.isNull(auctionGoods)) { + throw new ServiceException("拍卖商品不存在"); + } + auctionGoods.setListingStatus(dto.getListingStatus()); + this.updateById(auctionGoods); + } + + 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); } } -- Gitblit v1.7.1