From 85f12011f76f3cf4eb665c20138a0e939a1fb6db Mon Sep 17 00:00:00 2001
From: mitao <2763622819@qq.com>
Date: 星期一, 08 七月 2024 16:29:32 +0800
Subject: [PATCH] 修改bug

---
 ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionSalesroomServiceImpl.java |  386 +++++++++++++++++++++++++++++++++++++++---------------
 1 files changed, 276 insertions(+), 110 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 a260f28..e6aab42 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
@@ -1,18 +1,14 @@
 package com.ruoyi.auction.service.impl;
 
 import cn.binarywang.wx.miniapp.api.WxMaService;
-import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
-import com.alibaba.fastjson.TypeReference;
-import com.alibaba.fastjson.parser.Feature;
-import com.alipay.api.AlipayApiException;
 import com.alipay.api.AlipayClient;
-import com.alipay.api.internal.util.AlipayEncrypt;
-import com.alipay.api.internal.util.AlipaySignature;
 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.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
 import com.google.common.collect.Lists;
 import com.google.zxing.WriterException;
 import com.ruoyi.auction.controller.management.dto.MgtAuctionSaleroomBidRecordQuery;
@@ -49,6 +45,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.exception.ServiceException;
 import com.ruoyi.common.core.utils.IDhelper;
 import com.ruoyi.common.core.utils.StringUtils;
@@ -56,7 +53,8 @@
 import com.ruoyi.common.core.utils.page.Checker;
 import com.ruoyi.common.core.utils.page.CollUtils;
 import com.ruoyi.common.core.utils.page.PageDTO;
-import com.ruoyi.common.security.utils.SecurityUtils;
+import com.ruoyi.system.api.RemoteFileService;
+import com.ruoyi.system.api.constants.NotificationTypeConstant;
 import com.ruoyi.system.api.domain.AppMiniLoginVO;
 import com.ruoyi.system.api.domain.AuctionGoods;
 import com.ruoyi.system.api.domain.AuctionSalesroom;
@@ -65,6 +63,7 @@
 import com.ruoyi.system.api.domain.OrderAuctionBond;
 import com.ruoyi.system.api.domain.PromotionVideo;
 import com.ruoyi.system.api.domain.SysUser;
+import com.ruoyi.system.api.domain.WebsocketMessageDTO;
 import com.ruoyi.system.api.domain.dto.AppMiniLoginDTO;
 import com.ruoyi.system.api.domain.dto.AuctionSalesroomDTO;
 import com.ruoyi.system.api.domain.dto.BidDTO;
@@ -90,7 +89,15 @@
 import java.io.IOException;
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.atomic.AtomicReference;
 import java.util.function.Function;
 import java.util.stream.Collectors;
@@ -152,6 +159,8 @@
     @Resource
     private AuctionBidRecordMapper auctionBidRecordMapper;
 
+    @Resource
+    private RemoteFileService remoteFileService;
     public static RequestConfig config = RequestConfig.custom().setConnectTimeout(5000).setSocketTimeout(5000).build();
     // 配置您申请的KEY,在个人中心->我的数据,接口名称上方查看
     public static final String APPKEY = "";
@@ -194,6 +203,7 @@
      */
     private static final String ALIPAY_PUBLIC_KEY = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAlW2RMACojdqTa8H+j6411Lm5UipGXXbQiswq50rUflwjTj843zNVaVpk8uJmbdmtUBJlmblgBS/a31O4L4LrHB8WxJ+w0f9DBNTq9T6b80MiAVnU/3gXK365DmbzPWS5pR9wEgJVHnfOFUbsB5AVFHV0m9hUZcPv7xveuEp3BEoD5smaDJByR+KgFw0Q0JgINhhE6bsEa3UgJ198af269LtQ5HJl1TWLI8aeqW14HrxyADIt49NB9KZ8MOdKP+66HWcrXlipKFHtccy3dff72DqPmFdESoXfLXKZyhU5w9v4Q5F6UoAGTPwl9KQwikTobNeJ/7su7X3AB6+C14J4sQIDAQAB";
 
+    private static final ObjectMapper objectMapper = new ObjectMapper();
 
 
     @Override
@@ -230,14 +240,17 @@
         if (sysUser==null){
             throw new ServiceException("手机号未注册");
         }
-        if (!SecurityUtils.matchesPassword(arepartAuctionBidRecordDTO.getPassword(), sysUser.getPassword())){
+    /*   if (!SecurityUtils.matchesPassword(arepartAuctionBidRecordDTO.getPassword(), sysUser.getPassword())){
             throw new ServiceException("密码输入错误");
-        }
+        }*/
 
         LambdaQueryWrapper<AuctionSalesroom> wrapper=Wrappers.lambdaQuery();
         wrapper.eq(AuctionSalesroom::getAuctionSalesroomNo,arepartAuctionBidRecordDTO.getAuctionSalesroomQrcode());
         wrapper.eq(AuctionSalesroom::getDelFlag,0);
         AuctionSalesroom auctionBidRecord = this.getOne(wrapper);
+        if(auctionBidRecord.getType().getCode()==0){
+            throw new ServiceException("当前扫码是线下拍卖会");
+        }
         return auctionBidRecord;
     }
 
@@ -338,7 +351,7 @@
         R<SysUser> sysUserR = sysUserClient.queryUserByPhone(appMiniLoginDto.getPhone());
         SysUser data = sysUserR.getData();
         appMiniLoginVo.setSysUser(data);
-        appMiniLoginVo.setPhone(appMiniLoginDto.getAuth_code());
+        appMiniLoginVo.setPhone(appMiniLoginDto.getPhone());
             return appMiniLoginVo;
 
     }
@@ -371,8 +384,10 @@
             memberAuctionSalesroomVO.setEndTime(auctionSalesroom.getEndTime());
             memberAuctionSalesroomVO.setCoverPic(auctionSalesroom.getCoverPic());
             memberAuctionSalesroomVO.setBond(auctionSalesroom.getBond());
+            memberAuctionSalesroomVO.setAuthentication(auctionSalesroom.getAuthentication());
+            memberAuctionSalesroomDTO.setAuctionSalesroomId(auctionSalesroom.getId());
             List<OrderAuctionBond> data = orderClient.getOrderAuctionBondList1(memberAuctionSalesroomDTO, SecurityConstants.INNER).getData();
-            if (data!=null||data.size()>0){
+            if (data!=null&&data.size()>0){
                memberAuctionSalesroomVO.setIsApply(2);
            }else{
                memberAuctionSalesroomVO.setIsApply(1);
@@ -380,8 +395,14 @@
             MemberAuctionSalesroomDTO memberAuctionSalesroomDTO1=new MemberAuctionSalesroomDTO();
             memberAuctionSalesroomDTO1.setAuctionSalesroomId(auctionSalesroom.getId());
             List<OrderAuctionBond> data1 = orderClient.getOrderAuctionBondList1(memberAuctionSalesroomDTO1, SecurityConstants.INNER).getData();
-            memberAuctionSalesroomVO.setApplyNum(data1.size());
-            List.add(memberAuctionSalesroomVO);
+            if(data1!=null){
+                memberAuctionSalesroomVO.setApplyNum(data1.size());
+                List.add(memberAuctionSalesroomVO);
+            }else{
+                memberAuctionSalesroomVO.setApplyNum(0);
+            }
+
+
         }
         page.setRecords(List);
         return PageDTO.of(page);
@@ -390,6 +411,12 @@
     @Override
     public MemberAuctionSalesroomInfoVO getMemberAuctionSalesroomInfo(MemberAuctionSalesroomDTO memberAuctionSalesroomDTO) {
         AuctionSalesroom byId = this.getById(memberAuctionSalesroomDTO.getAuctionSalesroomId());
+        if(byId==null){
+            LambdaQueryWrapper<AuctionSalesroom> wrapper=Wrappers.lambdaQuery();
+            wrapper.eq(AuctionSalesroom::getAuctionSalesroomNo,memberAuctionSalesroomDTO.getAuctionSalesroomId());
+            wrapper.eq(AuctionSalesroom::getDelFlag,0);
+            byId =this.getOne(wrapper);
+        }
         MemberAuctionSalesroomInfoVO memberAuctionSalesroomInfoVO=new MemberAuctionSalesroomInfoVO();
         memberAuctionSalesroomInfoVO.setId(byId.getId());
         memberAuctionSalesroomInfoVO.setBound(byId.getBond());
@@ -410,7 +437,9 @@
             memberAuctionSalesroomInfoVO.setIsApply(1);
         }
         List<ForepartAuctionSalesroomGoodsVO> forepartAuctionSalesroomGoodsVOS=new ArrayList<>();
-        List<AuctionSalesroomGoods> auctionSalesroomGoods = auctionSalesroomGoodsMapper.getAuctionSalesroomGoods(memberAuctionSalesroomDTO);
+        MemberAuctionSalesroomDTO memberAuctionSalesroomDTO1 =new MemberAuctionSalesroomDTO();
+        memberAuctionSalesroomDTO1.setAuctionSalesroomId(byId.getId());
+        List<AuctionSalesroomGoods> auctionSalesroomGoods = auctionSalesroomGoodsMapper.getAuctionSalesroomGoods(memberAuctionSalesroomDTO1);
         for (AuctionSalesroomGoods salesroomGoods:auctionSalesroomGoods){
             ForepartAuctionSalesroomGoodsVO forepartAuctionSalesroomGoodsVO=new ForepartAuctionSalesroomGoodsVO();
             forepartAuctionSalesroomGoodsVO.setSalesroomId(byId.getId());
@@ -422,8 +451,10 @@
             forepartAuctionSalesroomGoodsVO.setCoverPic(goodsSku.getCoverPic());
             forepartAuctionSalesroomGoodsVO.setStartingPrice(salesroomGoods.getStartingPrice());
             forepartAuctionSalesroomGoodsVO.setSalesroomStock(salesroomGoods.getSalesroomStock());
-            forepartAuctionSalesroomGoodsVO.setGoodsSkustatus(salesroomGoods.getStatus());
+            forepartAuctionSalesroomGoodsVO.setGoodsSkustatus(salesroomGoods.getStatus().getCode());
             forepartAuctionSalesroomGoodsVO.setYears(String.valueOf(goodsSku.getYears()));
+            forepartAuctionSalesroomGoodsVO.setSpec(goodsSku.getSpec());
+            forepartAuctionSalesroomGoodsVO.setSpecUnit(goodsSku.getSpecUnit());
             LambdaQueryWrapper<AuctionBidRecord> wrapper1=Wrappers.lambdaQuery();
             wrapper1.eq(AuctionBidRecord::getMemberId,memberAuctionSalesroomDTO.getMemberId());
             wrapper1.eq(AuctionBidRecord::getAuctionSalesroomId,byId.getId());
@@ -452,6 +483,7 @@
         LambdaQueryWrapper<AuctionBrowseRecord> wrapper3=Wrappers.lambdaQuery();
         wrapper3.eq(AuctionBrowseRecord::getDelFlag,0);
         wrapper3.eq(AuctionBrowseRecord::getTargetId,memberAuctionSalesroomDTO.getAuctionSalesroomId());
+        wrapper3.eq(AuctionBrowseRecord::getBrowseType,AuctionOrderTypeEnum.AUCTION_ITEMS);
         wrapper3.eq(AuctionBrowseRecord::getMemberId,memberAuctionSalesroomDTO.getMemberId());
         wrapper3.ge(AuctionBrowseRecord::getCreateTime, now)
                 .le(AuctionBrowseRecord::getCreateTime, newTime7);
@@ -506,8 +538,6 @@
             if (auctionBidRecord!=null){
                 throw new ServiceException("当前拍卖场中标拍品订单未完成,请完成后再试。");
             }
-
-
             // 远程调用订单服务进行退款
                 Map<String, Object> data = orderClient.refund(refundDTOList,
                         SecurityConstants.INNER).getData();
@@ -526,7 +556,7 @@
                 List<Long> ids = new ArrayList<>();
                 ids.add(orderAuctionBond.getId());
                 // 远程调用订单服务修改订单状态
-                orderClient.updateOrderAuctionBondStatus(ids, BondStatusEnum.PAID);
+                orderClient.updateOrderAuctionBondStatus(ids, BondStatusEnum.REFUNDED,SecurityConstants.INNER);
 
         }else{
             OrderAuctionBond orderAuctionBond = orderClient.getOrderAuctionBondone1(memberAuctionSalesroomBondDTO, SecurityConstants.INNER).getData();
@@ -563,7 +593,7 @@
             List<Long> ids = new ArrayList<>();
             ids.add(orderAuctionBond.getId());
             // 远程调用订单服务修改订单状态
-            orderClient.updateOrderAuctionBondStatus(ids, BondStatusEnum.PAID);
+            orderClient.updateOrderAuctionBondStatus(ids,BondStatusEnum.REFUNDED,SecurityConstants.INNER);
         }
 
 
@@ -574,11 +604,11 @@
         Member membeOne = memberClient.getMembeOne(bidVO.getMemberId(), SecurityConstants.INNER).getData();
         if (bidVO.getAuctionType()==2){
             AuctionSalesroomGoods byId = auctionSalesroomGoodsMapper.selectById(bidVO.getTargetId());
-            if (byId.getStartingPrice().doubleValue()<bidVO.getLastBidAmount().doubleValue()){
+            if (byId.getStartingPrice().doubleValue()>bidVO.getLastBidAmount().doubleValue()){
                 throw new ServiceException("出价不能比起拍价低");
             }
             BigDecimal bigDecimal=byId.getStartingPrice().add(byId.getMinimumMarkupAmount());
-            if (bigDecimal.doubleValue()<bidVO.getLastBidAmount().doubleValue()){
+            if (bigDecimal.doubleValue()>bidVO.getLastBidAmount().doubleValue()){
                 throw new ServiceException("出价不能比每次最少加价低");
             }
 
@@ -590,7 +620,7 @@
             AuctionBidRecord one = auctionBidRecordService.getOne(wrapper1);
             if (one!=null){
                 BigDecimal bigDecimal1=one.getLastBidAmount().add(byId.getMinimumMarkupAmount());
-                if (bigDecimal1.doubleValue()<bidVO.getLastBidAmount().doubleValue()){
+                if (bigDecimal1.doubleValue()>bidVO.getLastBidAmount().doubleValue()){
                     throw new ServiceException("出价不能比上次出价加每次最少加价低");
                 }
                 one.setLastBidAmount(bidVO.getLastBidAmount());
@@ -603,6 +633,8 @@
                 one.setTargetId(bidVO.getTargetId());
                 one.setMemberId(bidVO.getMemberId());
                 one.setLastBidTime(LocalDateTime.now());
+                one.setNickname(membeOne.getNickname());
+                one.setPhone(membeOne.getPhone());
                 one.setAuctionType(AuctionOrderTypeEnum.AUCTION_ITEMS);
                 one.setStatus(BidStatusEnum.ELIMINATE);
                 one.setBidCount(1);
@@ -611,41 +643,97 @@
             }
 
 
+            LambdaQueryWrapper<AuctionBidRecord> wrapper2=Wrappers.lambdaQuery();
+            wrapper2.eq(AuctionBidRecord::getAuctionSalesroomId,bidVO.getAuctionSalesroomId());
+            wrapper2.eq(AuctionBidRecord::getTargetId,bidVO.getTargetId());
+            wrapper2.eq(AuctionBidRecord::getDelFlag,0);
+            wrapper2.orderByDesc(AuctionBidRecord::getLastBidAmount);
+            AuctionBidRecord one2 = auctionBidRecordService.getOne(wrapper1);
+
+            Map<String, Object> map = new ConcurrentHashMap<>();
+            map.put("notification_type", NotificationTypeConstant.AUCTION_SALESROOM);
+            map.put("auctionSalesroomId", bidVO.getAuctionSalesroomId());
+            map.put("byId", byId.getStatus());
+            map.put("lastBidAmount",one2.getLastBidAmount());
+            map.put("message_type", "BidRecor");
+            map.put("type",3);
+            String msg = null;
+            try {
+                msg = objectMapper.writeValueAsString(map);
+            } catch (JsonProcessingException e) {
+            }
+            String finalMsg = msg;
+                    sysUserClient.pushByClientType(WebsocketMessageDTO.builder().message(finalMsg)
+                            .clientType(ClientTypeEnum.MEMBER).build(), SecurityConstants.INNER);
+
+
+
+
         }else {
             AuctionGoods byId = auctionGoodsService.getById(bidVO.getTargetId());
-            if (byId.getStartingPrice().doubleValue()<bidVO.getLastBidAmount().doubleValue()){
+            if (byId.getStartingPrice().doubleValue()>bidVO.getLastBidAmount().doubleValue()){
                 throw new ServiceException("出价不能比起拍价低");
             }
             BigDecimal bigDecimal=byId.getStartingPrice().add(byId.getMinimumMarkupAmount());
-            if (bigDecimal.doubleValue()<bidVO.getLastBidAmount().doubleValue()){
+            if (bigDecimal.doubleValue()>bidVO.getLastBidAmount().doubleValue()){
                 throw new ServiceException("出价不能比每次最少加价低");
             }
             LambdaQueryWrapper<AuctionBidRecord> wrapper1=Wrappers.lambdaQuery();
-            wrapper1.eq(AuctionBidRecord::getMemberId,bidVO.getMemberId());
             wrapper1.eq(AuctionBidRecord::getTargetId,bidVO.getTargetId());
             wrapper1.eq(AuctionBidRecord::getDelFlag,0);
+            wrapper1.orderByDesc(AuctionBidRecord::getLastBidAmount);
+            wrapper1.last("limit 1");
             AuctionBidRecord one = auctionBidRecordService.getOne(wrapper1);
-            if (one!=null){
-                BigDecimal bigDecimal1=one.getLastBidAmount().add(byId.getMinimumMarkupAmount());
-                if (bigDecimal1.doubleValue()<bidVO.getLastBidAmount().doubleValue()){
-                    throw new ServiceException("出价不能比上次出价加每次最少加价低");
+            if (byId.getAuctionStock()==1) {
+                if (one != null) {
+                    BigDecimal bigDecimal1 = one.getLastBidAmount().add(byId.getMinimumMarkupAmount());
+                    if (bigDecimal1.doubleValue() > bidVO.getLastBidAmount().doubleValue()) {
+                        throw new ServiceException("出价不能比上次出价加每次最少加价低");
+                    }
+
                 }
-                one.setLastBidAmount(bidVO.getLastBidAmount());
-                one.setLastBidTime(LocalDateTime.now());
-                one.setBidCount(one.getBidCount()+1);
-                auctionBidRecordService.updateById(one);
-            }else{
-                one=new AuctionBidRecord();
-                one.setAuctionSalesroomId(bidVO.getAuctionSalesroomId());
-                one.setTargetId(bidVO.getTargetId());
-                one.setMemberId(bidVO.getMemberId());
-                one.setLastBidTime(LocalDateTime.now());
-                one.setAuctionType(AuctionOrderTypeEnum.REGULAR_ITEMS);
-                one.setStatus(BidStatusEnum.ELIMINATE);
-                one.setBidCount(1);
-                one.setLastBidAmount(bidVO.getLastBidAmount());
-                auctionBidRecordService.save(one);
             }
+            LambdaQueryWrapper<AuctionBidRecord> wrapper3=Wrappers.lambdaQuery();
+            wrapper3.eq(AuctionBidRecord::getTargetId,bidVO.getTargetId());
+            wrapper3.eq(AuctionBidRecord::getDelFlag,0);
+            wrapper3.eq(AuctionBidRecord::getMemberId,bidVO.getMemberId());
+            wrapper3.orderByDesc(AuctionBidRecord::getLastBidAmount);
+            wrapper3.last("limit 1");
+            AuctionBidRecord one3 = auctionBidRecordService.getOne(wrapper3);
+                if (one3!=null){
+                    one3.setLastBidAmount(bidVO.getLastBidAmount());
+                    one3.setLastBidTime(LocalDateTime.now());
+                    one3.setBidCount(one.getBidCount()+1);
+                    auctionBidRecordService.updateById(one3);
+                }else{
+                    one3=new AuctionBidRecord();
+                    one3.setAuctionSalesroomId(bidVO.getAuctionSalesroomId());
+                    one3.setTargetId(bidVO.getTargetId());
+                    one3.setMemberId(bidVO.getMemberId());
+                    one3.setLastBidTime(LocalDateTime.now());
+                    one3.setAuctionType(AuctionOrderTypeEnum.REGULAR_ITEMS);
+                    one3.setStatus(BidStatusEnum.ELIMINATE);
+                    one3.setBidCount(1);
+                    one3.setLastBidAmount(bidVO.getLastBidAmount());
+                    auctionBidRecordService.save(one3);
+                }
+
+            Map<String, Object> map = new ConcurrentHashMap<>();
+            map.put("notification_type", NotificationTypeConstant.AUCTION_SALESROOM);
+            map.put("auctionSalesroomId", byId.getId());
+            map.put("byId", byId.getStartStatus());
+            map.put("lastBidAmount",one.getLastBidAmount());
+            map.put("message_type", "BidRecor");
+            map.put("type",4);
+            String msg = null;
+            try {
+                msg = objectMapper.writeValueAsString(map);
+            } catch (JsonProcessingException e) {
+            }
+            String finalMsg = msg;
+            sysUserClient.pushByClientType(WebsocketMessageDTO.builder().message(finalMsg)
+                            .clientType(ClientTypeEnum.MEMBER).build(), SecurityConstants.INNER);
+
         }
     }
 
@@ -695,7 +783,9 @@
                                 query.getEndTime()), AuctionSalesroom::getStartTime,
                         query.getStartTime(),
                         query.getEndTime())
+                .orderByDesc(AuctionSalesroom::getCreateTime)
                 .page(new Page<>(query.getPageCurr(), query.getPageSize()));
+
         List<AuctionSalesroom> records = page.getRecords();
         if (StringUtils.isNull(records)) {
             return PageDTO.empty(page);
@@ -705,18 +795,21 @@
         List<MgtAuctionSalesroomVO> list = auctionSalesroomVOPageDTO.getList();
         List<Long> auctionSalesroomIdList = list.stream().map(MgtAuctionSalesroomVO::getId)
                 .collect(Collectors.toList());
-        // 所有拍卖场的拍卖商品
-        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::getSalesroomStock)));
-        for (MgtAuctionSalesroomVO mgtAuctionSalesroomVO : list) {
-            Integer i = map.get(mgtAuctionSalesroomVO.getId());
-            if (StringUtils.isNotNull(i)) {
-                mgtAuctionSalesroomVO.setAuctionGoodsNum(i);
+        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::getSalesroomStock)));
+            for (MgtAuctionSalesroomVO mgtAuctionSalesroomVO : list) {
+                Integer i = map.get(mgtAuctionSalesroomVO.getId());
+                if (StringUtils.isNotNull(i)) {
+                    mgtAuctionSalesroomVO.setAuctionGoodsNum(i);
+                }
             }
         }
         return auctionSalesroomVOPageDTO;
@@ -767,8 +860,9 @@
             // 生成唯一编号
             Long nextId = IDhelper.getNextId();
             auctionSalesroom.setAuctionSalesroomNo(nextId.toString());
-            String qrCodeToObs = CreateQrCode.createQRCodeToObs(nextId.toString());
-            auctionSalesroom.setQrCode(qrCodeToObs);
+            String url = remoteFileService.obsUpload(
+                    CreateQrCode.createQRCodeStream(nextId.toString())).getData();
+            auctionSalesroom.setQrCode(url);
             // 添加
             this.save(auctionSalesroom);
             List<GoodsStockUpdDTO> goodsStockUpdDTOS = auctionSalesroomGoods.stream().map(item -> {
@@ -998,6 +1092,7 @@
                 .between(StringUtils.isNotNull(query.getStartTime()) && StringUtils.isNotNull(
                                 query.getEndTime()), AuctionSalesroom::getStartTime, query.getStartTime(),
                         query.getEndTime())
+                .orderByAsc(AuctionSalesroom::getStartTime)
                 .page(new Page<>(query.getPageCurr(), query.getPageSize()));
         List<AuctionSalesroom> records = page.getRecords();
         if (StringUtils.isNull(records)) {
@@ -1019,44 +1114,46 @@
                 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());
+            if (StringUtils.isNotEmpty(auctionSalesroomGoodsVOS)) {
+                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));
                 }
-                vo.setMgtAuctionBidRecordVOList(
-                        BeanUtils.copyList(list, MgtAuctionBidRecordVO.class));
-            } else {
-                vo.setNextAuctionSalesroomGoods(collect.get(0));
             }
         }
         return vo;
@@ -1133,6 +1230,7 @@
      */
     @Override
     public PageDTO<MgtAuctionSalesroomGoodsVO> backupGoods(MgtAuctionSalesroomGoodsQuery query) {
+        Page<AuctionSalesroomGoods> page = new Page<>(query.getPageCurr(), query.getPageSize());
         Set<Long> goodsSkuIdSet = null;
         if (StringUtils.isNotBlank(query.getGoodsName())) {
             List<GoodsSku> data = goodsSkuClient.getGoodsByName(query.getGoodsName(),
@@ -1140,14 +1238,19 @@
             if (StringUtils.isNotEmpty(data)) {
                 goodsSkuIdSet = data.stream().map(GoodsSku::getId)
                         .collect(Collectors.toSet());
+            } else {
+                return PageDTO.empty(page);
             }
         }
-        Page<AuctionSalesroomGoods> page = auctionSalesroomGoodsMapper.selectPage(
+        page = auctionSalesroomGoodsMapper.selectPage(
                 new Page<>(query.getPageCurr(), query.getPageSize()),
                 Wrappers.<AuctionSalesroomGoods>lambdaQuery()
+                        .eq(AuctionSalesroomGoods::getAuctionSalesroomId,
+                                query.getAuctionSalesroomId())
+                        .eq(AuctionSalesroomGoods::getBackupStatus, Boolean.TRUE)
                         .in(StringUtils.isNotEmpty(goodsSkuIdSet),
                                 AuctionSalesroomGoods::getGoodsSkuId, goodsSkuIdSet));
-        if (StringUtils.isNotEmpty(page.getRecords())) {
+        if (StringUtils.isEmpty(page.getRecords())) {
             return PageDTO.empty(page);
         }
         Set<Long> skuIdList = page.getRecords().stream().map(AuctionSalesroomGoods::getGoodsSkuId)
@@ -1167,10 +1270,12 @@
     /**
      * 选择备选商品
      *
-     * @param idList 备选商品id集合
+     * @param idStr 备选商品id集合
      */
     @Override
-    public void addBackupGoods(List<Long> idList) {
+    public void addBackupGoods(String idStr) {
+        String[] idArr = idStr.split(",");
+        List<Long> idList = Arrays.stream(idArr).map(Long::valueOf).collect(Collectors.toList());
         List<AuctionSalesroomGoods> auctionSalesroomGoods = auctionSalesroomGoodsMapper.selectList(
                 Wrappers.<AuctionSalesroomGoods>lambdaQuery()
                         .in(AuctionSalesroomGoods::getId, idList)
@@ -1178,6 +1283,7 @@
         if (StringUtils.isNotEmpty(auctionSalesroomGoods)) {
             auctionSalesroomGoods.forEach(item -> {
                 item.setStatus(AuctionGoodsStatusEnum.WAITING);
+                item.setBackupStatus(Boolean.FALSE);
             });
             auctionSalesroomGoodsMapper.updateBatchById(auctionSalesroomGoods);
         }
@@ -1189,13 +1295,22 @@
      * @param id 拍卖场商品id
      */
     @Override
-    public void stopCurrentGoods(Long id) {
+    public void stopCurrentGoods(Long id) throws JsonProcessingException {
         AuctionSalesroomGoods auctionSalesroomGoods = auctionSalesroomGoodsMapper.selectById(id);
         if (StringUtils.isNull(auctionSalesroomGoods)) {
             throw new ServiceException("拍卖商品不存在");
         }
         auctionSalesroomGoods.setStatus(AuctionGoodsStatusEnum.ENDED);
         auctionSalesroomGoodsMapper.updateById(auctionSalesroomGoods);
+        Map<String, Object> map = new ConcurrentHashMap<>();
+        map.put("notification_type", NotificationTypeConstant.AUCTION_SALESROOM_GOODS);
+        map.put("auctionSalesroomId", auctionSalesroomGoods.getAuctionSalesroomId().toString());
+        map.put("auctionSalesroomGoodsId", auctionSalesroomGoods.getId().toString());
+        map.put("AuctionTypeEnum", auctionSalesroomGoods.getStatus());
+        map.put("message_type", "stop");
+        map.put("type", "2");
+        String msg = objectMapper.writeValueAsString(map);
+        sysUserClient.pushAll(msg, SecurityConstants.INNER);
     }
 
     /**
@@ -1204,13 +1319,22 @@
      * @param id 拍卖场商品id
      */
     @Override
-    public void startNextGoods(Long id) {
+    public void startNextGoods(Long id) throws JsonProcessingException {
         AuctionSalesroomGoods auctionSalesroomGoods = auctionSalesroomGoodsMapper.selectById(id);
         if (StringUtils.isNull(auctionSalesroomGoods)) {
             throw new ServiceException("拍卖商品不存在");
         }
         auctionSalesroomGoods.setStatus(AuctionGoodsStatusEnum.IN_PROGRESS);
         auctionSalesroomGoodsMapper.updateById(auctionSalesroomGoods);
+        Map<String, Object> map = new ConcurrentHashMap<>();
+        map.put("notification_type", NotificationTypeConstant.AUCTION_SALESROOM_GOODS);
+        map.put("auctionSalesroomId", auctionSalesroomGoods.getAuctionSalesroomId().toString());
+        map.put("auctionSalesroomGoodsId", auctionSalesroomGoods.getId().toString());
+        map.put("AuctionTypeEnum", auctionSalesroomGoods.getStatus());
+        map.put("message_type", "start");
+        map.put("type", "2");
+        String msg = objectMapper.writeValueAsString(map);
+        sysUserClient.pushAll(msg, SecurityConstants.INNER);
     }
 
     /**
@@ -1225,6 +1349,8 @@
         if (StringUtils.isNull(data)) {
             throw new ServiceException("视频不存在");
         }
+        iAuctionVideoService.remove(Wrappers.<AuctionVideo>lambdaQuery().eq
+                (AuctionVideo::getAuctionSalesroomId, dto.getAuctionSalesroomId()));
         AuctionVideo auctionVideo = new AuctionVideo();
         auctionVideo.setAuctionSalesroomId(dto.getAuctionSalesroomId());
         auctionVideo.setPromotionVideoId(dto.getVideoId());
@@ -1240,7 +1366,7 @@
     @Override
     public void stopPlay(Long auctionSalesroomId) {
         iAuctionVideoService.remove(Wrappers.<AuctionVideo>lambdaQuery().eq
-                (AuctionVideo::getAuctionSalesroomId, 1L));
+                (AuctionVideo::getAuctionSalesroomId, auctionSalesroomId));
     }
 
     /**
@@ -1249,7 +1375,8 @@
      * @param auctionSalesroomId 拍卖场id
      */
     @Override
-    public void startCurrentAuctionSalesroom(Long auctionSalesroomId) {
+    public void startCurrentAuctionSalesroom(Long auctionSalesroomId)
+            throws JsonProcessingException {
         // 修改拍卖场开始状态
         AuctionSalesroom auctionSalesroom = this.getById(auctionSalesroomId);
         auctionSalesroom.setStatus(AuctionStartStatusEnum.IN_AUCTION);
@@ -1266,23 +1393,41 @@
         auctionSalesroomGoods.setStatus(AuctionGoodsStatusEnum.IN_PROGRESS);
         auctionSalesroomGoods.setStartTime(LocalDateTime.now());
         auctionSalesroomGoodsMapper.updateById(auctionSalesroomGoods);
+
+        Map<String, Object> map = new ConcurrentHashMap<>();
+        map.put("notification_type", NotificationTypeConstant.AUCTION_SALESROOM);
+        map.put("auctionSalesroomId", auctionSalesroom.getId().toString());
+        map.put("AuctionTypeEnum", auctionSalesroom.getStatus());
+        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);
     }
 
     @Override
     @GlobalTransactional(rollbackFor = Exception.class)
     @Transactional
-    public void stopCurrentAuctionSalesroom(Long auctionSalesroomId) {
-        // 修改拍卖场开始状态
-        AuctionSalesroom auctionSalesroom = this.getById(auctionSalesroomId);
-        auctionSalesroom.setStatus(AuctionStartStatusEnum.ENDED);
-        auctionSalesroom.setEndTime(LocalDateTime.now());
-        auctionSalesroomMapper.updateById(auctionSalesroom);
+    public void stopCurrentAuctionSalesroom(Long auctionSalesroomId)
+            throws JsonProcessingException {
         LambdaQueryWrapper<AuctionSalesroomGoods> wrapper = Wrappers.lambdaQuery();
         wrapper.eq(AuctionSalesroomGoods::getStatus, AuctionGoodsStatusEnum.WAITING);
         wrapper.eq(AuctionSalesroomGoods::getAuctionSalesroomId, auctionSalesroomId);
         wrapper.orderByDesc(AuctionSalesroomGoods::getSortNum);
         List<AuctionSalesroomGoods> auctionSalesroomGoods = auctionSalesroomGoodsMapper.selectList(
                 wrapper);
+        long count = auctionSalesroomGoods.stream()
+                .filter(goods -> goods.getStatus().equals(AuctionGoodsStatusEnum.IN_PROGRESS))
+                .count();
+        if (count > 0) {
+            throw new ServiceException("当前拍卖场正在拍卖商品,不能停止");
+        }
+        // 修改拍卖场开始状态
+        AuctionSalesroom auctionSalesroom = this.getById(auctionSalesroomId);
+        auctionSalesroom.setStatus(AuctionStartStatusEnum.ENDED);
+        auctionSalesroom.setEndTime(LocalDateTime.now());
+        auctionSalesroomMapper.updateById(auctionSalesroom);
+
         if (StringUtils.isNotEmpty(auctionSalesroomGoods)) {
             List<GoodsStockUpdDTO> dtoList = new ArrayList<>();
             for (AuctionSalesroomGoods salesroomGoods : auctionSalesroomGoods) {
@@ -1309,5 +1454,26 @@
             orderAuctionBondDTO.setUserList(memberIdlist);
             orderClient.getOrderAuctionBond(orderAuctionBondDTO, SecurityConstants.INNER);
         }
+        Map<String, Object> map = new ConcurrentHashMap<>();
+        map.put("notification_type", NotificationTypeConstant.AUCTION_SALESROOM);
+        map.put("auctionSalesroomId", auctionSalesroom.getId().toString());
+        map.put("AuctionTypeEnum",auctionSalesroom.getStatus());
+        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);
+    }
+
+    @Override
+    public List<AuctionSalesroom> getAuctionSalesroomByIds(
+            Collection<Long> auctionSalesroomGoodsIdSet) {
+        List<AuctionSalesroomGoods> auctionSalesroomGoods = auctionSalesroomGoodsMapper.selectList(
+                Wrappers.lambdaQuery(AuctionSalesroomGoods.class)
+                        .in(AuctionSalesroomGoods::getId, auctionSalesroomGoodsIdSet));
+        Set<Long> auctionSalesroomIdSet = auctionSalesroomGoods.stream()
+                .map(AuctionSalesroomGoods::getAuctionSalesroomId).collect(
+                        Collectors.toSet());
+        return this.listByIds(auctionSalesroomIdSet);
     }
 }

--
Gitblit v1.7.1