rentaiming
2024-06-03 2dcde26e44e85d84c3a20fee0aaed3724edba3bc
ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionSalesroomServiceImpl.java
@@ -1,5 +1,6 @@
package com.ruoyi.auction.service.impl;
import cn.binarywang.wx.miniapp.api.WxMaService;
import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
import com.alibaba.fastjson.JSONObject;
import com.alipay.api.AlipayApiException;
@@ -23,8 +24,10 @@
import com.ruoyi.auction.controller.management.dto.MgtAuctionSalesroomDTO;
import com.ruoyi.auction.controller.management.dto.MgtAuctionSalesroomGoodsDTO;
import com.ruoyi.auction.controller.management.dto.MgtAuctionSalesroomQuery;
import com.ruoyi.auction.controller.management.dto.MgtScreenBidPage;
import com.ruoyi.auction.controller.management.vo.MgtAuctionBidRecordVO;
import com.ruoyi.auction.controller.management.vo.MgtAuctionSalesroomGoodsVO;
import com.ruoyi.auction.controller.management.vo.MgtAuctionSalesroomScreenVO;
import com.ruoyi.auction.controller.management.vo.MgtAuctionSalesroomVO;
import com.ruoyi.auction.domain.AuctionBidRecord;
import com.ruoyi.auction.domain.AuctionSalesroomGoods;
@@ -35,13 +38,13 @@
import com.ruoyi.auction.service.IAuctionBidRecordService;
import com.ruoyi.auction.service.IAuctionBrowseRecordService;
import com.ruoyi.auction.service.IAuctionGoodsService;
import com.ruoyi.auction.service.IAuctionSalesroomGoodsService;
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.SecurityConstants;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.enums.AuctionGoodsStatusEnum;
import com.ruoyi.common.core.enums.AuctionOrderTypeEnum;
import com.ruoyi.common.core.enums.AuctionStartStatusEnum;
import com.ruoyi.common.core.enums.BidStatusEnum;
@@ -60,7 +63,13 @@
import com.ruoyi.system.api.domain.Member;
import com.ruoyi.system.api.domain.OrderAuctionBond;
import com.ruoyi.system.api.domain.SysUser;
import com.ruoyi.system.api.domain.dto.*;
import com.ruoyi.system.api.domain.dto.AppMiniLoginDTO;
import com.ruoyi.system.api.domain.dto.BidDTO;
import com.ruoyi.system.api.domain.dto.GoodsStockUpdDTO;
import com.ruoyi.system.api.domain.dto.MemberAuctionSalesroomBondDTO;
import com.ruoyi.system.api.domain.dto.MemberAuctionSalesroomDTO;
import com.ruoyi.system.api.domain.dto.MemberAuctionSalesroomWdDTO;
import com.ruoyi.system.api.domain.dto.RefundDTO;
import com.ruoyi.system.api.domain.vo.PayInfoVO;
import com.ruoyi.system.api.domain.vo.WdMemberAuctionSalesroomVO;
import com.ruoyi.system.api.feignClient.GoodsSkuClient;
@@ -70,7 +79,12 @@
import io.seata.spring.annotation.GlobalTransactional;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.atomic.AtomicReference;
import java.util.function.Function;
import java.util.stream.Collectors;
import javax.annotation.Resource;
@@ -102,12 +116,11 @@
    @Resource
    private SysUserClient sysUserClient;
    // @Resource
    // private WxMaService wxMaService;
    @Resource
    private WxMaService wxMaService;
    @Resource
    private AuctionSalesroomGoodsMapper auctionSalesroomGoodsMapper;
    @Resource
    private IAuctionGoodsService auctionGoodsService;
@@ -117,6 +130,7 @@
    @Resource
    private OrderClient orderClient;
    @Resource
    private MemberClient memberClient;
@@ -260,7 +274,7 @@
            String openid;
            String sessionKey = null;
            //获取session
            // session = wxMaService.getUserService().getSessionInfo(appMiniLoginDto.getCode());
            session = wxMaService.getUserService().getSessionInfo(appMiniLoginDto.getCode());
            if (session != null && StringUtils.isNotBlank(session.getOpenid())) {
                unionid = session.getUnionid();
                openid = session.getOpenid();
@@ -809,6 +823,7 @@
        // 获取拍卖场商品
        LambdaQueryWrapper<AuctionSalesroomGoods> wrappers=new LambdaQueryWrapper<AuctionSalesroomGoods>();
        wrappers.eq(AuctionSalesroomGoods::getAuctionSalesroomId, id);
        wrappers.orderByDesc(AuctionSalesroomGoods::getSortNum);
        List<AuctionSalesroomGoods> list = auctionSalesroomGoodsMapper.selectList(wrappers);
        if (StringUtils.isNotEmpty(list)) {
            List<MgtAuctionSalesroomGoodsVO> mgtAuctionSalesroomGoodsVOS = BeanUtils.copyList(list,
@@ -827,6 +842,7 @@
                GoodsSku goodsSku = goodsSkuMap.get(vo.getGoodsSkuId());
                if (StringUtils.isNotNull(goodsSku)) {
                    vo.setGoodsSkuName(goodsSku.getSkuName());
                    vo.setSpec(goodsSku.getSpec());
                }
            }
            mgtAuctionSalesroomVO.setAuctionSalesroomGoodsVOS(mgtAuctionSalesroomGoodsVOS);
@@ -882,4 +898,123 @@
        }
        return mgtAuctionBidRecordVOPageDTO;
    }
    /**
     * 大屏操作台分页查询拍卖场
     *
     * @param query 拍卖场查询对象
     * @return PageDTO<MgtAuctionSalesroomVO>
     */
    @Override
    public PageDTO<MgtAuctionSalesroomVO> getAuctionSalesroom4ScreenPage(
            MgtAuctionSalesroomQuery query) {
        // 分页查询
        Page<AuctionSalesroom> page = this.lambdaQuery()
                .select(AuctionSalesroom::getId, AuctionSalesroom::getSalesroomName,
                        AuctionSalesroom::getStartTime, AuctionSalesroom::getStatus)
                .like(StringUtils.isNotEmpty(query.getSalesroomName()),
                        AuctionSalesroom::getSalesroomName, query.getSalesroomName())
                .eq(StringUtils.isNotNull(query.getStatus()), AuctionSalesroom::getStatus,
                        query.getStatus())
                .ne(AuctionSalesroom::getStatus, AuctionStartStatusEnum.ENDED)
                .between(StringUtils.isNotNull(query.getStartTime()) && StringUtils.isNotNull(
                                query.getEndTime()), AuctionSalesroom::getStartTime, query.getStartTime(),
                        query.getEndTime())
                .page(new Page<>(query.getPageCurr(), query.getPageSize()));
        List<AuctionSalesroom> records = page.getRecords();
        if (StringUtils.isNull(records)) {
            return PageDTO.empty(page);
        }
        return PageDTO.of(page, MgtAuctionSalesroomVO.class);
    }
    /**
     * 进入详情
     *
     * @param id 拍卖会id
     * @return 大屏操作台拍卖场视图对象
     */
    @Override
    public MgtAuctionSalesroomScreenVO getAuctionSalesroomDetail(Long id) {
        MgtAuctionSalesroomVO mgtAuctionSalesroomVO = this.getAuctionSalesroom(id);
        MgtAuctionSalesroomScreenVO vo = BeanUtils.copyBean(
                mgtAuctionSalesroomVO, MgtAuctionSalesroomScreenVO.class);
        if (vo.getStatus().equals(AuctionStartStatusEnum.IN_AUCTION)) {
            List<MgtAuctionSalesroomGoodsVO> auctionSalesroomGoodsVOS = vo.getAuctionSalesroomGoodsVOS();
            List<MgtAuctionSalesroomGoodsVO> collect = auctionSalesroomGoodsVOS.stream()
                    .peek(goods -> {
                        List<AuctionBidRecord> list = auctionBidRecordService.lambdaQuery()
                                .eq(AuctionBidRecord::getTargetId, goods.getId())
                                .eq(AuctionBidRecord::getAuctionType,
                                        AuctionOrderTypeEnum.AUCTION_ITEMS)
                                .list();
                        if (StringUtils.isNotEmpty(list)) {
                            long bidCount = list.stream()
                                    .filter(item -> BidStatusEnum.SUCCESSFUL.equals(
                                            item.getStatus()))
                                    .count();
                            goods.setBidCount((int) bidCount);
                            goods.setBidQuantity((int) bidCount);
                            goods.setBidPersonCount(list.size());
                        }
                        if (goods.getStatus().equals(AuctionGoodsStatusEnum.IN_PROGRESS)) {
                            vo.setCurrentAuctionSalesroomGoods(goods);
                        }
                    }).collect(Collectors.toList());
            vo.setAuctionSalesroomGoodsVOS(collect);
            if (StringUtils.isNotNull(vo.getCurrentAuctionSalesroomGoods())) {
                int index = collect.indexOf(vo.getCurrentAuctionSalesroomGoods());
                vo.setNextAuctionSalesroomGoods(collect.get(index + 1));
                // 分页查询当前拍品出价信息
                List<AuctionBidRecord> list = auctionBidRecordService.lambdaQuery()
                        .eq(AuctionBidRecord::getTargetId,
                                vo.getCurrentAuctionSalesroomGoods().getId())
                        .eq(AuctionBidRecord::getAuctionType,
                                AuctionOrderTypeEnum.AUCTION_ITEMS)
                        .list();
                if (StringUtils.isNotEmpty(list)) {
                    vo.setMgtAuctionBidRecordVOList(CollUtils.emptyList());
                }
                vo.setMgtAuctionBidRecordVOList(
                        BeanUtils.copyList(list, MgtAuctionBidRecordVO.class));
            } else {
                vo.setNextAuctionSalesroomGoods(collect.get(0));
            }
        }
        return vo;
    }
    /**
     * 进入详情-出价会员列表
     *
     * @param mgtScreenBidPage
     * @return PageDTO<MgtAuctionBidRecordVO>
     */
    @Override
    public PageDTO<MgtAuctionBidRecordVO> getScreenBidRecordList(
            MgtScreenBidPage mgtScreenBidPage) {
        MgtAuctionSalesroomVO mgtAuctionSalesroomVO = this.getAuctionSalesroom(
                mgtScreenBidPage.getId());
        List<MgtAuctionSalesroomGoodsVO> auctionSalesroomGoodsVOS = mgtAuctionSalesroomVO.getAuctionSalesroomGoodsVOS();
        if (StringUtils.isEmpty(auctionSalesroomGoodsVOS)) {
            throw new ServiceException("该拍卖会暂无拍卖商品");
        }
        AtomicReference<Long> currentAuctionGoodsId = new AtomicReference<>();
        auctionSalesroomGoodsVOS.stream()
                .filter(item -> item.getStatus().equals(AuctionGoodsStatusEnum.IN_PROGRESS))
                .findFirst().ifPresent(goods -> {
                    currentAuctionGoodsId.set(goods.getId());
                });
        Page<AuctionBidRecord> page = auctionBidRecordService.lambdaQuery()
                .eq(StringUtils.isNotNull(currentAuctionGoodsId.get()),
                        AuctionBidRecord::getTargetId,
                        currentAuctionGoodsId.get())
                .eq(AuctionBidRecord::getAuctionType,
                        AuctionOrderTypeEnum.AUCTION_ITEMS)
                .page(new Page<>(mgtScreenBidPage.getPageCurr(), mgtScreenBidPage.getPageSize()));
        if (StringUtils.isNotEmpty(page.getRecords())) {
            return PageDTO.empty(page);
        }
        return PageDTO.of(page, MgtAuctionBidRecordVO.class);
    }
}