mitao
2024-06-18 06f59ebb282ab74565585f77dde772d228d6075a
ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionGoodsServiceImpl.java
@@ -25,6 +25,7 @@
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;
@@ -32,15 +33,7 @@
import com.ruoyi.common.core.utils.page.BeanUtils;
import com.ruoyi.common.core.utils.page.PageDTO;
import com.ruoyi.system.api.constants.NotificationTypeConstant;
import com.ruoyi.system.api.domain.AuctionGoods;
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.OrderAuctionBond;
import com.ruoyi.system.api.domain.*;
import com.ruoyi.system.api.domain.dto.AuctionGoodsListDTO;
import com.ruoyi.system.api.domain.dto.AuctionGoodsListPageDTO;
import com.ruoyi.system.api.domain.dto.GoodsStockUpdDTO;
@@ -50,6 +43,7 @@
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.feignClient.AuctionClient;
import com.ruoyi.system.api.feignClient.GoodsSkuClient;
import com.ruoyi.system.api.feignClient.MemberClient;
import com.ruoyi.system.api.feignClient.OrderClient;
@@ -58,6 +52,7 @@
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@@ -86,6 +81,8 @@
    private final GoodsSkuClient goodsSkuClient;
    private final MemberClient memberClient;
    private final OrderClient orderClient;
    private final AuctionClient auctionClient;
    private final IAuctionBidRecordService auctionBidRecordService;
    private final AuctionAsyncMethodService auctionAsyncMethodService;
    // 创建一个静态共享的ObjectMapper实例以重用
@@ -108,18 +105,23 @@
    @Override
    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(),
                            SecurityConstants.INNER)
                    .getData();
                    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())
@@ -129,7 +131,7 @@
                        query.getStartStatus())
                .page(new Page<>(query.getPageCurr(), query.getPageSize()));
        if (StringUtils.isEmpty(page.getRecords())) {
            return PageDTO.empty(page.getTotal(), page.getPages());
            return PageDTO.empty(page);
        }
        // 查询商品信息
        Set<Long> goodsIdList = page.getRecords().stream().map(AuctionGoods::getGoodsSkuId)
@@ -235,6 +237,12 @@
        }
        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())
@@ -353,7 +361,7 @@
                    return null;
                }).filter(Objects::nonNull).collect(Collectors.toList());
                // 远程调用订单服务修改订单状态
                orderClient.updateOrderAuctionBondStatus(ids, BondStatusEnum.PAID);
                orderClient.updateOrderAuctionBondStatus(ids, BondStatusEnum.PAID,SecurityConstants.INNER);
            }
        }
    }
@@ -384,6 +392,7 @@
            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());
@@ -411,6 +420,7 @@
        auctionGoodsinfoVO.setStartTime(byId.getStartTime());
        auctionGoodsinfoVO.setEndTime(byId.getEndTime());
        auctionGoodsinfoVO.setUnit(goodsSkuOne.getUnit());
        auctionGoodsinfoVO.setBond(byId.getBond());
        auctionGoodsinfoVO.setDescription(goodsSkuOne.getDescription());
        auctionGoodsinfoVO.setYears(String.valueOf(goodsSkuOne.getYears()));
        GoodsBrand data = goodsSkuClient.getBrandOne(goodsSkuOne.getBrandId(), SecurityConstants.INNER).getData();
@@ -430,6 +440,7 @@
        auctionGoodsinfoVO.setShareTitle(goodsSkuOne.getShareTitle());
        auctionGoodsinfoVO.setSpecUnit(goodsSkuOne.getSpecUnit());
        auctionGoodsinfoVO.setDetail(goodsSkuOne.getDetail());
        auctionGoodsinfoVO.setBond(byId.getBond());
        auctionGoodsinfoVO.setYears(String.valueOf(goodsSkuOne.getYears()));
        LambdaQueryWrapper<AuctionBidRecord> wrapper1= Wrappers.lambdaQuery();
        wrapper1.eq(AuctionBidRecord::getMemberId,auctionGoodsListDTO.getMemberId());
@@ -442,6 +453,15 @@
            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);
            }
@@ -467,19 +487,14 @@
        }
        LocalDateTime now = LocalDateTime.now();
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        String formattedDate = now.format(formatter);
        LocalDateTime parseTime = LocalDateTime.parse(formattedDate, formatter);
        LocalDateTime newTime7 = now.minusDays(7);
        String formattedDate7 = newTime7.format(formatter);
        LocalDateTime parseTime7 = LocalDateTime.parse(formattedDate7, formatter);
        LambdaQueryWrapper<AuctionBrowseRecord> wrapper3=Wrappers.lambdaQuery();
        wrapper3.eq(AuctionBrowseRecord::getDelFlag,0);
        wrapper3.eq(AuctionBrowseRecord::getTargetId,auctionGoodsListDTO.getGoodsSkuId());
        wrapper3.eq(AuctionBrowseRecord::getMemberId,auctionGoodsListDTO.getMemberId());
        wrapper3.ge(AuctionBrowseRecord::getCreateTime, parseTime7)
                .le(AuctionBrowseRecord::getCreateTime, parseTime);
        wrapper3.ge(AuctionBrowseRecord::getCreateTime, newTime7)
                .le(AuctionBrowseRecord::getCreateTime, now);
        List<AuctionBrowseRecord> list = iAuctionBrowseRecordService.list(wrapper3);
        if (list.size()==0){
            AuctionBrowseRecord auctionBrowseRecord=new AuctionBrowseRecord();
@@ -500,11 +515,20 @@
        memberAuctionSalesroomDTO.setMemberId(auctionGoodsListDTO.getMemberId());
        List<OrderAuctionBond> data = orderClient.getAuctionGoodsOrderAuctionBondList(auctionGoodsListDTO, SecurityConstants.INNER).getData();
        Set<Long> goodsSkuIdList = null;
        goodsSkuIdList = data.stream().map(OrderAuctionBond::getAuctionSalesroomId)
                .collect(Collectors.toSet());
        if (data!=null){
            goodsSkuIdList = data.stream().map(OrderAuctionBond::getAuctionSalesroomId)
                    .collect(Collectors.toSet());
        }else {
            Set<Long> goodsSkuIdList1 =new HashSet<>();
            goodsSkuIdList1.add(0L);
            goodsSkuIdList=goodsSkuIdList1;
        }
        AuctionGoodsListPageDTO auctionGoodsListPageDTO=new AuctionGoodsListPageDTO();
        auctionGoodsListPageDTO.setGoodsSkuIdList(goodsSkuIdList);
        if (goodsSkuIdList!=null){
            auctionGoodsListPageDTO.setGoodsSkuIdList(goodsSkuIdList);
        }
        if (auctionGoodsListDTO.getStartStatus()!=4){
            auctionGoodsListPageDTO.setStartStatus(auctionGoodsListDTO.getStartStatus());
        }
@@ -557,16 +581,17 @@
        AuctionGoods auctionGoods = this.getById(id);
        if (StringUtils.isNotNull(auctionGoods) && auctionGoods.getListingStatus().equals(
                ListingStatusEnum.ON_SHELVES) && auctionGoods.getStartStatus()
                .equals(AuctionStartStatusEnum.IN_PREVIEW)) {
            this.lambdaUpdate().set(AuctionGoods::getStartStatus, AuctionStartStatusEnum.IN_AUCTION)
                .equals(AuctionStartStatusEnum.IN_AUCTION)) {
            this.lambdaUpdate().set(AuctionGoods::getStartStatus, AuctionStartStatusEnum.ENDED)
                    .eq(AuctionGoods::getId, id);
            // TODO 退保证金
            Map<String, Object> map = new ConcurrentHashMap<>();
            map.put("notification_type", NotificationTypeConstant.AUCTION_GOODS);
            map.put("notification_time", LocalDateTime.now());
            map.put("target_id", id);
            map.put("message_type", "start");
            map.put("message_type", "end");
            String msg = objectMapper.writeValueAsString(map);
            WebSocketUsers.sendMessageToUsersByText(msg);
            WebSocketUsers.sendMessageToUsersByType(1, msg);
            log.info("===================>发送websocket通知,消息体{}", msg);
        }
    }
@@ -576,16 +601,16 @@
        AuctionGoods auctionGoods = this.getById(id);
        if (StringUtils.isNotNull(auctionGoods) && auctionGoods.getListingStatus().equals(
                ListingStatusEnum.ON_SHELVES) && auctionGoods.getStartStatus()
                .equals(AuctionStartStatusEnum.IN_AUCTION)) {
            this.lambdaUpdate().set(AuctionGoods::getStartStatus, AuctionStartStatusEnum.ENDED)
                .equals(AuctionStartStatusEnum.IN_PREVIEW)) {
            this.lambdaUpdate().set(AuctionGoods::getStartStatus, AuctionStartStatusEnum.IN_AUCTION)
                    .eq(AuctionGoods::getId, id);
            Map<String, Object> map = new ConcurrentHashMap<>();
            map.put("notification_type", NotificationTypeConstant.AUCTION_GOODS);
            map.put("notification_time", LocalDateTime.now());
            map.put("target_id", id);
            map.put("message_type", "end");
            map.put("message_type", "start");
            String msg = objectMapper.writeValueAsString(map);
            WebSocketUsers.sendMessageToUsersByText(msg);
            WebSocketUsers.sendMessageToUsersByType(ClientTypeEnum.MEMBER.getCode(), msg);
            log.info("===================>发送websocket通知,消息体{}", msg);
        }
    }