From 356b6e4b0a11a6e44717dc9b92beaacc9c0c4b7a Mon Sep 17 00:00:00 2001 From: mitao <2763622819@qq.com> Date: 星期二, 06 八月 2024 10:13:18 +0800 Subject: [PATCH] 修改bug --- ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/PaylogServiceImpl.java | 12 ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionGoodsServiceImpl.java | 32 + ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionSalesroomGoodsServiceImpl.java | 5 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderAuctionBondServiceImpl.java | 11 ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionSalesroomServiceImpl.java | 445 +++++++++++++++++++----------------- ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java | 130 ++++++---- ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionBidRecordServiceImpl.java | 2 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/GoodsSku.java | 4 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/management/vo/GoodsSkuVO.java | 5 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/forepart/ForepartPaylogController.java | 8 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/management/dto/GoodsSkuDTO.java | 5 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/MemberServiceImpl.java | 2 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderReturnRequestServiceImpl.java | 37 +- ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/IPaylogService.java | 2 14 files changed, 388 insertions(+), 312 deletions(-) diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/GoodsSku.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/GoodsSku.java index 3c508df..ee9b476 100644 --- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/GoodsSku.java +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/GoodsSku.java @@ -118,6 +118,8 @@ @ApiModelProperty(value = "删除标志(0代表存在 1代表删除)") @TableLogic private Integer delFlag; - + + @ApiModelProperty(value = "商品封面图(大屏)") + private String screenCoverPic; } diff --git a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionBidRecordServiceImpl.java b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionBidRecordServiceImpl.java index c3981ea..02d0514 100644 --- a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionBidRecordServiceImpl.java +++ b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionBidRecordServiceImpl.java @@ -40,6 +40,7 @@ wrapper.eq(AuctionBidRecord::getTargetId,auctionSalesroomGoodsDTO.getGoodsSkuId()); wrapper.eq(AuctionBidRecord::getDelFlag,0); wrapper.orderByDesc(AuctionBidRecord::getLastBidAmount); + wrapper.orderByAsc(AuctionBidRecord::getLastBidTime); auctionBidRecordList = this.list(wrapper); //判断 if (auctionBidRecordList.size()>=auctionSalesroomGoods.getSalesroomStock()){ @@ -62,6 +63,7 @@ wrapper.eq(AuctionBidRecord::getStatus,2); wrapper.eq(AuctionBidRecord::getDelFlag,0); wrapper.orderByDesc(AuctionBidRecord::getLastBidAmount); + wrapper.orderByAsc(AuctionBidRecord::getLastBidTime); auctionBidRecordList = this.list(wrapper); } return auctionBidRecordList; 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 fa3e0d6..24203d4 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 @@ -38,7 +38,18 @@ 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.*; +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; @@ -46,7 +57,10 @@ 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.*; +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; @@ -455,6 +469,9 @@ List<GoodsSku> goodsSku = goodsSkuClient.getGoodsByName(auctionGoodsListDTO.getGoodsSkuName(), SecurityConstants.INNER) .getData(); + if (CollUtils.isEmpty(goodsSku)) { + return PageDTO.empty(0L, 1L); + } if (goodsSku!=null){ goodsSkuIdList = goodsSku.stream().map(GoodsSku::getId) .collect(Collectors.toSet()); @@ -691,13 +708,10 @@ if (auctionGoodsListDTO.getStartStatus() != 4) { wrapper1.eq(AuctionGoods::getStartStatus,auctionGoodsListDTO.getStartStatus()); } - wrapper1.last("ORDER BY\n" + - " CASE\n" + - " WHEN start_status = 0 THEN 2\n" + - " WHEN start_status = 1 THEN 1\n" + - " WHEN start_status = 2 THEN 3\n" + - " END,start_status asc "); - + wrapper1.last(auctionGoodsListDTO.getStartStatus() == 4, "ORDER BY\n" + + " FIELD(start_status, 1, 0, 2),\n" + + " start_time DESC"); + wrapper1.last(auctionGoodsListDTO.getStartStatus() != 4, "ORDER BY start_time DESC"); Page<AuctionGoods> auctionSalesroomList=this.page(page,wrapper1); PageDTO<AuctionGoodsListVO> wdMemberAuctionSalesroomVOPageDTO = PageDTO.of(auctionSalesroomList, AuctionGoodsListVO.class); List<AuctionGoodsListVO> list = wdMemberAuctionSalesroomVOPageDTO.getList(); diff --git a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionSalesroomGoodsServiceImpl.java b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionSalesroomGoodsServiceImpl.java index 384b13d..733b65e 100644 --- a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionSalesroomGoodsServiceImpl.java +++ b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionSalesroomGoodsServiceImpl.java @@ -155,7 +155,7 @@ forepartAuctionSalesroomGoodsVO.setSalesroomStock(auctionSalesroomGoods.getSalesroomStock()); forepartAuctionSalesroomGoodsVO.setListingDuration(auctionSalesroomGoods.getListingDuration()); forepartAuctionSalesroomGoodsVO.setStartTime(auctionSalesroomGoods.getStartTime()); - forepartAuctionSalesroomGoodsVO.setCoverPic(goodsSku.getCoverPic()); + forepartAuctionSalesroomGoodsVO.setCoverPic(goodsSku.getScreenCoverPic()); forepartAuctionSalesroomGoodsVO.setDescription(goodsSku.getDescription()); forepartAuctionSalesroomGoodsVO.setDetail(goodsSku.getDetail()); forepartAuctionSalesroomGoodsVO.setYears(String.valueOf(goodsSku.getYears().getYear())); @@ -498,6 +498,7 @@ wrapper.eq(AuctionBidRecord::getTargetId, auctionSalesroomGoodsDTO.getGoodsSkuId()); wrapper.eq(AuctionBidRecord::getDelFlag, 0); wrapper.orderByDesc(AuctionBidRecord::getLastBidAmount); + wrapper.orderByAsc(AuctionBidRecord::getLastBidTime); auctionBidRecordList = auctionBidRecordMapper.selectList(wrapper); if(auctionBidRecordList.size()>0){ //判断 @@ -769,7 +770,7 @@ CustomConfig memberPointsMoney = sysUserClient.getconfig("MEMBER_POINTS_MONEY").getData(); CustomConfig memberPointsPoints = sysUserClient.getconfig("MEMBER_POINTS_POINTS").getData(); - if (lastBidAmount.intValue()>0){ + if (lastBidAmount.compareTo(BigDecimal.ZERO) > 0) { BigDecimal divide = lastBidAmount.divide(new BigDecimal(memberPointsMoney.getConfigValue())); BigDecimal roundedDown = divide.setScale(0, RoundingMode.DOWN); BigDecimal aDouble= roundedDown.multiply(new BigDecimal(memberPointsPoints.getConfigValue())); 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 a9fa108..5e6ff2c 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 @@ -408,7 +408,7 @@ memberAuctionSalesroomVO.setSalesroomId(auctionSalesroom.getId()); memberAuctionSalesroomVO.setStartTime(auctionSalesroom.getStartTime()); memberAuctionSalesroomVO.setEndTime(auctionSalesroom.getEndTime()); - memberAuctionSalesroomVO.setCoverPic(auctionSalesroom.getCoverPic()); + memberAuctionSalesroomVO.setCoverPic(auctionSalesroom.getClientCoverPic()); memberAuctionSalesroomVO.setBond(auctionSalesroom.getBond()); memberAuctionSalesroomVO.setAuthentication(auctionSalesroom.getAuthentication()); memberAuctionSalesroomDTO.setAuctionSalesroomId(auctionSalesroom.getId()); @@ -669,149 +669,156 @@ @Override public void SaveBid(BidDTO bidVO) { - 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()){ - throw new ServiceException("出价不能比起拍价低"); - } - AuctionSalesroom byId1 = this.getById(bidVO.getAuctionSalesroomId()); - if(byId1==null){ - LambdaQueryWrapper<AuctionSalesroom> wrapper= Wrappers.lambdaQuery(); - wrapper.eq(AuctionSalesroom::getAuctionSalesroomNo,bidVO.getAuctionSalesroomId()); - wrapper.eq(AuctionSalesroom::getDelFlag,0); - AuctionSalesroom one = this.getOne(wrapper); - bidVO.setAuctionSalesroomId(one.getId()); - } + RLock lock = redissonClient.getLock( + "bid-" + bidVO.getAuctionType() + "-" + bidVO.getTargetId()); + lock.lock(10, TimeUnit.SECONDS); + try { + 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()) { + throw new ServiceException("出价不能比起拍价低"); + } + AuctionSalesroom byId1 = this.getById(bidVO.getAuctionSalesroomId()); + if (byId1 == null) { + LambdaQueryWrapper<AuctionSalesroom> wrapper = Wrappers.lambdaQuery(); + wrapper.eq(AuctionSalesroom::getAuctionSalesroomNo, + bidVO.getAuctionSalesroomId()); + wrapper.eq(AuctionSalesroom::getDelFlag, 0); + AuctionSalesroom one = this.getOne(wrapper); + bidVO.setAuctionSalesroomId(one.getId()); + } - LambdaQueryWrapper<AuctionBidRecord> wrapper3=Wrappers.lambdaQuery(); - wrapper3.eq(AuctionBidRecord::getAuctionSalesroomId,bidVO.getAuctionSalesroomId()); - wrapper3.eq(AuctionBidRecord::getTargetId,bidVO.getTargetId()); - wrapper3.eq(AuctionBidRecord::getDelFlag,0); - wrapper3.orderByDesc(AuctionBidRecord::getLastBidAmount); - wrapper3.last("limit 1"); - AuctionBidRecord one3 = auctionBidRecordService.getOne(wrapper3); - if (byId.getSalesroomStock()==1){ - if (one3!=null){ - if (bidVO.getLastBidAmount().doubleValue()<one3.getLastBidAmount().doubleValue()){ - throw new ServiceException("出价不能比当前最高价低"); + LambdaQueryWrapper<AuctionBidRecord> wrapper3 = Wrappers.lambdaQuery(); + wrapper3.eq(AuctionBidRecord::getAuctionSalesroomId, bidVO.getAuctionSalesroomId()); + wrapper3.eq(AuctionBidRecord::getTargetId, bidVO.getTargetId()); + wrapper3.eq(AuctionBidRecord::getDelFlag, 0); + wrapper3.orderByDesc(AuctionBidRecord::getLastBidAmount); + wrapper3.last("limit 1"); + AuctionBidRecord one3 = auctionBidRecordService.getOne(wrapper3); + if (byId.getSalesroomStock() == 1) { + if (one3 != null) { + if (bidVO.getLastBidAmount().doubleValue() < one3.getLastBidAmount() + .doubleValue()) { + throw new ServiceException("出价不能比当前最高价低"); + } + } + if (one3 != null) { + if (bidVO.getLastBidAmount().doubleValue() < one3.getLastBidAmount() + .add(byId.getMinimumMarkupAmount()).doubleValue()) { + throw new ServiceException("出价不能比当前最高价低加每次加价低"); + } } } - if (one3!=null){ - if (bidVO.getLastBidAmount().doubleValue()<one3.getLastBidAmount().add(byId.getMinimumMarkupAmount()).doubleValue()){ - throw new ServiceException("出价不能比当前最高价低加每次加价低"); - } - } - } - BigDecimal bigDecimal=byId.getStartingPrice().add(byId.getMinimumMarkupAmount()); - if (bigDecimal.doubleValue()>bidVO.getLastBidAmount().doubleValue()){ - throw new ServiceException("出价不能比每次最少加价低"); - } - - LambdaQueryWrapper<AuctionBidRecord> wrapper1=Wrappers.lambdaQuery(); - wrapper1.eq(AuctionBidRecord::getMemberId,bidVO.getMemberId()); - wrapper1.eq(AuctionBidRecord::getAuctionSalesroomId,bidVO.getAuctionSalesroomId()); - wrapper1.eq(AuctionBidRecord::getTargetId,bidVO.getTargetId()); - wrapper1.eq(AuctionBidRecord::getDelFlag,0); - - AuctionBidRecord one = auctionBidRecordService.getOne(wrapper1); - if (one!=null){ - 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()); - if(membeOne.getRealName()!=null&&membeOne.getRealName()!=""){ - one.setNickname(membeOne.getRealName()); - }else{ - one.setNickname(membeOne.getNickname()); + BigDecimal bigDecimal = byId.getStartingPrice().add(byId.getMinimumMarkupAmount()); + if (bigDecimal.doubleValue() > bidVO.getLastBidAmount().doubleValue()) { + throw new ServiceException("出价不能比每次最少加价低"); } - one.setPhone(membeOne.getPhone()); - one.setAuctionType(AuctionOrderTypeEnum.AUCTION_ITEMS); - one.setStatus(BidStatusEnum.ELIMINATE); - one.setBidCount(1); - one.setLastBidAmount(bidVO.getLastBidAmount()); - auctionBidRecordService.save(one); - } + LambdaQueryWrapper<AuctionBidRecord> wrapper1 = Wrappers.lambdaQuery(); + wrapper1.eq(AuctionBidRecord::getMemberId, bidVO.getMemberId()); + wrapper1.eq(AuctionBidRecord::getAuctionSalesroomId, bidVO.getAuctionSalesroomId()); + wrapper1.eq(AuctionBidRecord::getTargetId, bidVO.getTargetId()); + wrapper1.eq(AuctionBidRecord::getDelFlag, 0); - - 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()){ - throw new ServiceException("出价不能比起拍价低"); - } - BigDecimal bigDecimal=byId.getStartingPrice().add(byId.getMinimumMarkupAmount()); - if (bigDecimal.doubleValue()>bidVO.getLastBidAmount().doubleValue()){ - throw new ServiceException("出价不能比每次最少加价低"); - } - LambdaQueryWrapper<AuctionBidRecord> wrapper1=Wrappers.lambdaQuery(); - 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 (byId.getAuctionStock()==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("出价不能比上次出价加每次最少加价低"); + 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()); + if (membeOne.getRealName() != null && membeOne.getRealName() != "") { + one.setNickname(membeOne.getRealName()); + } else { + one.setNickname(membeOne.getNickname()); } + one.setPhone(membeOne.getPhone()); + one.setAuctionType(AuctionOrderTypeEnum.AUCTION_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){ + + 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()) { + throw new ServiceException("出价不能比起拍价低"); + } + BigDecimal bigDecimal = byId.getStartingPrice().add(byId.getMinimumMarkupAmount()); + if (bigDecimal.doubleValue() > bidVO.getLastBidAmount().doubleValue()) { + throw new ServiceException("出价不能比每次最少加价低"); + } + LambdaQueryWrapper<AuctionBidRecord> wrapper1 = Wrappers.lambdaQuery(); + 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 (byId.getAuctionStock() == 1) { + if (one != null) { + BigDecimal bigDecimal1 = one.getLastBidAmount() + .add(byId.getMinimumMarkupAmount()); + if (bigDecimal1.doubleValue() > bidVO.getLastBidAmount().doubleValue()) { + throw new ServiceException("出价不能比上次出价加每次最少加价低"); + } + + } + } + 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); + one3.setBidCount(one.getBidCount() + 1); auctionBidRecordService.updateById(one3); - }else{ - one3=new AuctionBidRecord(); + } else { + one3 = new AuctionBidRecord(); one3.setAuctionSalesroomId(bidVO.getAuctionSalesroomId()); one3.setTargetId(bidVO.getTargetId()); one3.setMemberId(bidVO.getMemberId()); - if(membeOne.getRealName()!=null&&membeOne.getRealName()!=""){ + if (membeOne.getRealName() != null && membeOne.getRealName() != "") { one3.setNickname(membeOne.getRealName()); - }else{ + } else { one3.setNickname(membeOne.getNickname()); } one3.setPhone(membeOne.getPhone()); @@ -823,22 +830,27 @@ 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",one3.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); + 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", one3.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); + } + } finally { + if (lock.isLocked()) { + lock.unlock(); + } } } @@ -1047,11 +1059,12 @@ public PageDTO<WdMemberAuctionSalesroomVO> getWdAuctionSalesroomList( MemberAuctionSalesroomDTO memberAuctionSalesroomDTO) { List<OrderAuctionBond> data = orderClient.getOrderAuctionBondList1(memberAuctionSalesroomDTO, SecurityConstants.INNER).getData(); + if (CollUtils.isEmpty(data)) { + return PageDTO.empty(0L, 0L); + } Set<Long> goodsSkuIdList = null; goodsSkuIdList = data.stream().map(OrderAuctionBond::getAuctionSalesroomId) .collect(Collectors.toSet()); - - Page<AuctionSalesroom> page = new Page<>(memberAuctionSalesroomDTO.getPageCurr(), memberAuctionSalesroomDTO.getPageSize()); LambdaQueryWrapper<AuctionSalesroom> wrapper1=Wrappers.lambdaQuery(); @@ -1070,13 +1083,10 @@ if (memberAuctionSalesroomDTO.getStatus() != 4) { wrapper1.eq(AuctionSalesroom::getStatus, memberAuctionSalesroomDTO.getStatus()); } - wrapper1.last("ORDER BY\n" + - " CASE\n" + - " WHEN status = 0 THEN 2\n" + - " WHEN status = 1 THEN 1\n" + - " WHEN status = 2 THEN 3\n" + - " END,status asc "); - + wrapper1.last(memberAuctionSalesroomDTO.getStatus() == 4, "ORDER BY\n" + + " FIELD(status, 1, 0, 2),\n" + + " start_time DESC"); + wrapper1.last(memberAuctionSalesroomDTO.getStatus() != 4, "ORDER BY start_time DESC"); Page<AuctionSalesroom> auctionSalesroomList=this.page(page,wrapper1); PageDTO<WdMemberAuctionSalesroomVO> wdMemberAuctionSalesroomVOPageDTO = PageDTO.of(auctionSalesroomList, WdMemberAuctionSalesroomVO.class); List<WdMemberAuctionSalesroomVO> list = wdMemberAuctionSalesroomVOPageDTO.getList(); @@ -1442,68 +1452,83 @@ */ @Override public void stopCurrentGoods(Long id) throws JsonProcessingException { - AuctionSalesroomGoods auctionSalesroomGoods = auctionSalesroomGoodsMapper.selectById(id); - if (StringUtils.isNull(auctionSalesroomGoods)) { - throw new ServiceException("拍卖商品不存在"); - } - AuctionSalesroom auctionSalesroom = this.getById( - auctionSalesroomGoods.getAuctionSalesroomId()); - auctionSalesroomGoods.setStatus(AuctionGoodsStatusEnum.ENDED); - auctionSalesroomGoodsMapper.updateById(auctionSalesroomGoods); - List<AuctionBidRecord> auctionBidRecordList = auctionBidRecordMapper.selectList( - Wrappers.lambdaQuery(AuctionBidRecord.class) - .eq(AuctionBidRecord::getAuctionSalesroomId, - auctionSalesroomGoods.getAuctionSalesroomId()) - .eq(AuctionBidRecord::getTargetId, auctionSalesroomGoods.getId()) - .eq(AuctionBidRecord::getAuctionType, AuctionOrderTypeEnum.AUCTION_ITEMS) - .orderByDesc(AuctionBidRecord::getLastBidAmount)); - if (CollUtils.isNotEmpty(auctionBidRecordList)) { - List<AuctionBidRecord> auctionBidRecords = new ArrayList<>(); - if (auctionBidRecordList.size() >= auctionSalesroomGoods.getSalesroomStock()) { - for (int i = 0; i < auctionSalesroomGoods.getSalesroomStock(); i++) { - AuctionBidRecord auctionBidRecord = auctionBidRecordList.get(i); - auctionBidRecord.setStatus(BidStatusEnum.SUCCESSFUL); - auctionBidRecordMapper.updateById(auctionBidRecord); - auctionBidRecords.add(auctionBidRecord); - } - } else { - for (int i = 0; i < auctionBidRecordList.size(); i++) { - AuctionBidRecord auctionBidRecord = auctionBidRecordList.get(i); - auctionBidRecord.setStatus(BidStatusEnum.SUCCESSFUL); - auctionBidRecordMapper.updateById(auctionBidRecord); - auctionBidRecords.add(auctionBidRecord); - } - // 没有出价记录,回退库存 - GoodsStockUpdDTO goodsStockUpdDTO = new GoodsStockUpdDTO(); - goodsStockUpdDTO.setGoodsSkuId(auctionSalesroomGoods.getGoodsSkuId()); - goodsStockUpdDTO.setAuctionStock( - auctionSalesroomGoods.getSalesroomStock() - auctionBidRecordList.size()); - goodsSkuClient.updGoodsStock(Lists.newArrayList(goodsStockUpdDTO), - SecurityConstants.INNER); + RLock lock = redissonClient.getLock("stopCurrentGoods" + id); + lock.lock(10, TimeUnit.SECONDS); + try { + AuctionSalesroomGoods auctionSalesroomGoods = auctionSalesroomGoodsMapper.selectById( + id); + if (StringUtils.isNull(auctionSalesroomGoods)) { + throw new ServiceException("拍卖商品不存在"); } - for (AuctionBidRecord auctionBidRecord : auctionBidRecords) { - addOrder(auctionBidRecord.getTargetId(), auctionBidRecord.getMemberId(), - auctionBidRecord.getLastBidAmount(), - auctionSalesroom.getBond()); + if (auctionSalesroomGoods.getStatus().equals(AuctionGoodsStatusEnum.IN_PROGRESS)) { + AuctionSalesroom auctionSalesroom = this.getById( + auctionSalesroomGoods.getAuctionSalesroomId()); + auctionSalesroomGoods.setStatus(AuctionGoodsStatusEnum.ENDED); + auctionSalesroomGoodsMapper.updateById(auctionSalesroomGoods); + List<AuctionBidRecord> auctionBidRecordList = auctionBidRecordMapper.selectList( + Wrappers.lambdaQuery(AuctionBidRecord.class) + .eq(AuctionBidRecord::getAuctionSalesroomId, + auctionSalesroomGoods.getAuctionSalesroomId()) + .eq(AuctionBidRecord::getTargetId, auctionSalesroomGoods.getId()) + .eq(AuctionBidRecord::getAuctionType, + AuctionOrderTypeEnum.AUCTION_ITEMS) + .orderByDesc(AuctionBidRecord::getLastBidAmount) + .orderByAsc(AuctionBidRecord::getLastBidTime)); + if (CollUtils.isNotEmpty(auctionBidRecordList)) { + List<AuctionBidRecord> auctionBidRecords = new ArrayList<>(); + if (auctionBidRecordList.size() >= auctionSalesroomGoods.getSalesroomStock()) { + for (int i = 0; i < auctionSalesroomGoods.getSalesroomStock(); i++) { + AuctionBidRecord auctionBidRecord = auctionBidRecordList.get(i); + auctionBidRecord.setStatus(BidStatusEnum.SUCCESSFUL); + auctionBidRecordMapper.updateById(auctionBidRecord); + auctionBidRecords.add(auctionBidRecord); + } + } else { + for (int i = 0; i < auctionBidRecordList.size(); i++) { + AuctionBidRecord auctionBidRecord = auctionBidRecordList.get(i); + auctionBidRecord.setStatus(BidStatusEnum.SUCCESSFUL); + auctionBidRecordMapper.updateById(auctionBidRecord); + auctionBidRecords.add(auctionBidRecord); + } + // 没有出价记录,回退库存 + GoodsStockUpdDTO goodsStockUpdDTO = new GoodsStockUpdDTO(); + goodsStockUpdDTO.setGoodsSkuId(auctionSalesroomGoods.getGoodsSkuId()); + goodsStockUpdDTO.setAuctionStock( + auctionSalesroomGoods.getSalesroomStock() + - auctionBidRecordList.size()); + goodsSkuClient.updGoodsStock(Lists.newArrayList(goodsStockUpdDTO), + SecurityConstants.INNER); + } + for (AuctionBidRecord auctionBidRecord : auctionBidRecords) { + addOrder(auctionBidRecord.getTargetId(), auctionBidRecord.getMemberId(), + auctionBidRecord.getLastBidAmount(), + auctionSalesroom.getBond()); + } + } else { + // 没有出价记录,回退库存 + GoodsStockUpdDTO goodsStockUpdDTO = new GoodsStockUpdDTO(); + goodsStockUpdDTO.setGoodsSkuId(auctionSalesroomGoods.getGoodsSkuId()); + goodsStockUpdDTO.setAuctionStock( + auctionSalesroomGoods.getSalesroomStock()); + goodsSkuClient.updGoodsStock(Lists.newArrayList(goodsStockUpdDTO), + SecurityConstants.INNER); + } + 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); } - } else { - // 没有出价记录,回退库存 - GoodsStockUpdDTO goodsStockUpdDTO = new GoodsStockUpdDTO(); - goodsStockUpdDTO.setGoodsSkuId(auctionSalesroomGoods.getGoodsSkuId()); - goodsStockUpdDTO.setAuctionStock( - auctionSalesroomGoods.getSalesroomStock()); - goodsSkuClient.updGoodsStock(Lists.newArrayList(goodsStockUpdDTO), - SecurityConstants.INNER); + } finally { + if (lock.isLocked()) { + lock.unlock(); + } } - 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); } public void addOrder(Long goodsSkuId, Long memberId, BigDecimal lastBidAmount, @@ -1530,7 +1555,7 @@ ConfigEnum.MEMBER_POINTS_POINTS.getKey()) .getData(); - if (lastBidAmount.intValue() > 0) { + if (lastBidAmount.compareTo(BigDecimal.ZERO) > 0) { BigDecimal divide = lastBidAmount.divide( new BigDecimal(memberPointsMoney.getConfigValue()), 0, RoundingMode.DOWN); diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/management/dto/GoodsSkuDTO.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/management/dto/GoodsSkuDTO.java index 862e2e3..a779c05 100644 --- a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/management/dto/GoodsSkuDTO.java +++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/management/dto/GoodsSkuDTO.java @@ -11,7 +11,6 @@ import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; import lombok.Data; -import com.ruoyi.goods.controller.management.dto.GoodsInfoTitleValueDTO; /** * @author mitao @@ -100,5 +99,7 @@ @ApiModelProperty(value = "排序") private Integer sortNum; - + @ApiModelProperty(value = "商品封面图(大屏)") + @NotBlank(message = "商品封面图(大屏)") + private String screenCoverPic; } diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/management/vo/GoodsSkuVO.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/management/vo/GoodsSkuVO.java index c197ed5..55df9f1 100644 --- a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/management/vo/GoodsSkuVO.java +++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/management/vo/GoodsSkuVO.java @@ -2,6 +2,7 @@ import com.fasterxml.jackson.annotation.JsonFormat; import com.ruoyi.common.core.enums.ListingStatusEnum; +import com.ruoyi.system.api.domain.vo.GoodsInfoTitleValueVO; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import java.io.Serializable; @@ -9,7 +10,6 @@ import java.time.LocalDateTime; import java.util.List; import lombok.Data; -import com.ruoyi.system.api.domain.vo.GoodsInfoTitleValueVO; /** * @author mitao * @date 2024/5/20 @@ -86,4 +86,7 @@ @ApiModelProperty(value = "上架状态 0=上架中 1= 已下架") private ListingStatusEnum listingStatus; + + @ApiModelProperty(value = "商品封面图(大屏)") + private String screenCoverPic; } diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/MemberServiceImpl.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/MemberServiceImpl.java index febf68e..aeced8b 100644 --- a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/MemberServiceImpl.java +++ b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/MemberServiceImpl.java @@ -544,7 +544,7 @@ Integer big=byId.getTotalPoints()+dMembeOneDTO.getTotalPoints(); byId.setTotalPoints(big); }else { - Integer big=byId.getTotalPoints()-dMembeOneDTO.getTotalPoints(); + Integer big = Math.max(byId.getTotalPoints() - dMembeOneDTO.getTotalPoints(), 0); byId.setTotalPoints(big); } } diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/forepart/ForepartPaylogController.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/forepart/ForepartPaylogController.java index 6411ef5..487e500 100644 --- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/forepart/ForepartPaylogController.java +++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/forepart/ForepartPaylogController.java @@ -12,7 +12,10 @@ import javax.servlet.http.HttpServletResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.web.bind.annotation.*; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; /** * <p> @@ -50,7 +53,8 @@ public R<Map<String, Object>> getPayInfo(@RequestBody PayInfoDTO payInfoDTO, HttpServletRequest request) { try { - return paylogServiceImpl.getPayInfo(Integer.valueOf(payInfoDTO.getMemberId().intValue()), payInfoDTO.getType(), payInfoDTO.getOrderNO(), payInfoDTO.getOpenId(),request); + return paylogServiceImpl.getPayInfo(payInfoDTO.getMemberId(), payInfoDTO.getType(), + payInfoDTO.getOrderNO(), payInfoDTO.getOpenId(), request); } catch (Exception e) { return R.fail("获取异常"); } diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/IPaylogService.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/IPaylogService.java index db3d456..eb06968 100644 --- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/IPaylogService.java +++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/IPaylogService.java @@ -20,7 +20,7 @@ */ public interface IPaylogService extends IService<Paylog> { - R<Map<String, Object>> getPayInfo(Integer uid, Integer type, String orderID,String openId, + R<Map<String, Object>> getPayInfo(Long uid, Integer type, String orderID,String openId, HttpServletRequest request); diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderAuctionBondServiceImpl.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderAuctionBondServiceImpl.java index 34bc269..b470fd1 100644 --- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderAuctionBondServiceImpl.java +++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderAuctionBondServiceImpl.java @@ -29,8 +29,6 @@ import java.util.List; import java.util.Map; import java.util.Objects; -import java.util.regex.Matcher; -import java.util.regex.Pattern; import java.util.stream.Collectors; import javax.annotation.Resource; import lombok.extern.slf4j.Slf4j; @@ -89,12 +87,9 @@ String money = SinataUtil.doubleRetainTwo(paylog.getPayMoney() * 100d); Integer totalFee = Integer.parseInt(money.substring(0, money.length() - 3)); refundFee = Integer.parseInt(money.substring(0, money.length() - 3)); - - String regEx = "[^0-9]"; - Pattern p = Pattern.compile(regEx); - Matcher m = p.matcher(paylog.getOutTradeNo()); - String ma = m.replaceAll("").trim(); - boolean bo = paylogServiceImpl.refundForWxpay(4, paylog.getTradeNo(), paylog.getOutTradeNo(), "R" + ma, totalFee, refundFee, "2"); + String refundNo = OrderUtil.getOrderNoForPrefix("R"); + boolean bo = paylogServiceImpl.refundForWxpay(4, paylog.getTradeNo(), + paylog.getOutTradeNo(), refundNo, totalFee, refundFee, "2"); if (!bo) { return R.fail("微信退款失败!"); } diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderReturnRequestServiceImpl.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderReturnRequestServiceImpl.java index ea3ac3b..1b4bfc5 100644 --- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderReturnRequestServiceImpl.java +++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderReturnRequestServiceImpl.java @@ -310,26 +310,27 @@ couponMemberDTO.setCouponStatus(CouponUseEnum.UNUSED.getCode()); promotionClient.updCouponMember(couponMemberDTO, SecurityConstants.INNER); } + // 扣除订单积分 + Member member = memberClient.getMembeOne(order.getMemberId(), + SecurityConstants.INNER) + .getData(); + if (StringUtils.isNotNull(member)) { + MemberPointsDTO memberPointsDTO = new MemberPointsDTO(); + memberPointsDTO.setMemberId(order.getMemberId()); + memberPointsDTO.setPointsType(2); + memberPointsDTO.setPointsStatus(PointStatusEnum.REDUCE); + memberPointsDTO.setPoints(order.getPoints()); + memberClient.addMemberPoints(memberPointsDTO); + + updMembeOneDTO updMembeOneDTO = new updMembeOneDTO(); + updMembeOneDTO.setMemberId(order.getMemberId()); + updMembeOneDTO.setType(2); + updMembeOneDTO.setTotalPoints(order.getPoints()); + memberClient.updMembeOne(updMembeOneDTO, SecurityConstants.INNER); + } } orderReturnRequest.setAuditStatus(AuditStatusEnum.PASSED); - // 扣除订单积分 - Member member = memberClient.getMembeOne(order.getMemberId(), SecurityConstants.INNER) - .getData(); - if (StringUtils.isNotNull(member)) { - MemberPointsDTO memberPointsDTO = new MemberPointsDTO(); - memberPointsDTO.setMemberId(order.getMemberId()); - memberPointsDTO.setPointsType(2); - memberPointsDTO.setPointsStatus(PointStatusEnum.REDUCE); - memberPointsDTO.setPoints(order.getPoints()); - memberClient.addMemberPoints(memberPointsDTO); - updMembeOneDTO updMembeOneDTO = new updMembeOneDTO(); - updMembeOneDTO.setMemberId(order.getMemberId()); - updMembeOneDTO.setType(2); - updMembeOneDTO.setTotalPoints( - Math.max(member.getTotalPoints() - order.getPoints(), 0)); - memberClient.updMembeOne(updMembeOneDTO, SecurityConstants.INNER); - } } else { orderReturnRequest.setStatus(ReturnRequestStatusEnum.REJECTED); orderReturnRequest.setAuditStatus(AuditStatusEnum.REJECTED); @@ -395,7 +396,7 @@ updMembeOneDTO updMembeOneDTO = new updMembeOneDTO(); updMembeOneDTO.setMemberId(order.getMemberId()); updMembeOneDTO.setType(2); - updMembeOneDTO.setTotalPoints(Math.max(member.getTotalPoints() - order.getPoints(), 0)); + updMembeOneDTO.setTotalPoints(order.getPoints()); memberClient.updMembeOne(updMembeOneDTO, SecurityConstants.INNER); } if (Objects.nonNull(order.getCouponId())) { diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java index 6cf205f..f760ddc 100644 --- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java +++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java @@ -734,8 +734,7 @@ CustomConfig memberPointsPoints = sysUserClient.getconfig("MEMBER_POINTS_POINTS").getData(); if (pice.doubleValue()>0){ - BigDecimal pic=pice.multiply(new BigDecimal(memberOrderDTO.getGoodsQuantity())); - BigDecimal divide = pic.divide(new BigDecimal(memberPointsMoney.getConfigValue())); + BigDecimal divide = pice.divide(new BigDecimal(memberPointsMoney.getConfigValue())); BigDecimal roundedDown = divide.setScale(0, RoundingMode.DOWN); BigDecimal aDouble= roundedDown.multiply(new BigDecimal(memberPointsPoints.getConfigValue())); order.setPoints(aDouble.intValue()); @@ -1051,6 +1050,12 @@ MembeOneDTO.setTotalPoints(order.getPoints()); memberClient.updMembeOne(MembeOneDTO, SecurityConstants.INNER); + MemberPointsDTO memberPointsDTO = new MemberPointsDTO(); + memberPointsDTO.setMemberId(order.getMemberId()); + memberPointsDTO.setPointsType(2); + memberPointsDTO.setPointsStatus(PointStatusEnum.REDUCE); + memberPointsDTO.setPoints(order.getPoints()); + memberClient.addMemberPoints(memberPointsDTO); if (order.getPaymentMethod() != null && order.getPaymentMethod().getCode() == 2) {//支付宝 //获取支付信息 @@ -1087,6 +1092,9 @@ } } + } + if (order.getOrderFrom().equals(OrderFromEnum.AUCTION_ORDERS)) { + refundBond(order); } } @@ -1166,48 +1174,59 @@ }else{ } - LambdaQueryWrapper<OrderAuctionBond> wrapper= Wrappers.lambdaQuery(); - wrapper.eq(OrderAuctionBond::getOrderId,order.getId()); - OrderAuctionBond orderAuctionBond = orderAuctionBondMapper.selectOne(wrapper); - if(orderAuctionBond!=null){ - if (order.getPaymentMethod() != null && order.getPaymentMethod().getCode() == 2) {//支付宝 - //获取支付信息 - LambdaQueryWrapper<Paylog> paylogEntityWrapper = Wrappers.lambdaQuery(); - paylogEntityWrapper.eq(Paylog::getOutTradeNo, orderAuctionBond.getOrderNo()); - Paylog paylog = iPaylogService.getOne(paylogEntityWrapper); - boolean bo = paylogService.refundForAlipay(paylog.getOutTradeNo(), paylog.getTradeNo(), paylog.getPayMoney()); - if (!bo) { - System.out.println("支付宝退款失败"); - } - } else if (order.getPaymentMethod() != null && order.getPaymentMethod().getCode() == 1) {//微信 - //获取支付信息 - LambdaQueryWrapper<Paylog> paylogEntityWrapper = Wrappers.lambdaQuery(); - paylogEntityWrapper.eq(Paylog::getOutTradeNo, orderAuctionBond.getOrderNo()); - Paylog paylog = iPaylogService.getOne(paylogEntityWrapper); - - String refundMoney = SinataUtil.doubleRetainTwo(paylog.getPayMoney() * 100d); - Integer refundFee = Integer.parseInt(refundMoney.substring(0, refundMoney.length() - 3)); - String money = SinataUtil.doubleRetainTwo(paylog.getPayMoney() * 100d); - Integer totalFee = Integer.parseInt(money.substring(0, money.length() - 3)); - refundFee = 1; - - String regEx = "[^0-9]"; - Pattern p = Pattern.compile(regEx); - Matcher m = p.matcher(order.getOrderNo()); - String ma = m.replaceAll("").trim(); - boolean bo = paylogService.refundForWxpay(4, paylog.getTradeNo(), paylog.getOutTradeNo(), "R" + ma, totalFee, refundFee, "2"); - if (!bo) { - System.out.println("微信退款失败"); - } - } - } - - - - }else{ + refundBond(order); + } else { order.setOrderStatus(OrderStatusEnum.FINISHED); order.setReceiveTime(LocalDateTime.now()); baseMapper.updateById(order); + } + } + + private void refundBond(Order order) { + LambdaQueryWrapper<OrderAuctionBond> wrapper = Wrappers.lambdaQuery(); + wrapper.eq(order.getAuctionOrderType().equals(AuctionOrderTypeEnum.AUCTION_ITEMS), + OrderAuctionBond::getAuctionSalesroomId, order.getAuctionSalesroomId()); + wrapper.eq(order.getAuctionOrderType().equals(AuctionOrderTypeEnum.REGULAR_ITEMS), + OrderAuctionBond::getAuctionGoodsId, order.getGoodsSkuId()); + wrapper.eq(OrderAuctionBond::getMemberId, order.getMemberId()); + wrapper.eq(OrderAuctionBond::getBoundStatus, BondStatusEnum.PAID); + OrderAuctionBond orderAuctionBond = orderAuctionBondMapper.selectOne(wrapper); + if (orderAuctionBond != null && orderAuctionBond.getBond() != null) { + if (order.getPaymentMethod() != null && order.getPaymentMethod().getCode() == 2) {// 支付宝 + // 获取支付信息 + LambdaQueryWrapper<Paylog> paylogEntityWrapper = Wrappers.lambdaQuery(); + paylogEntityWrapper.eq(Paylog::getOutTradeNo, orderAuctionBond.getOrderNo()); + Paylog paylog = iPaylogService.getOne(paylogEntityWrapper); + boolean bo = paylogService.refundForAlipay(paylog.getOutTradeNo(), + paylog.getTradeNo(), paylog.getPayMoney()); + if (!bo) { + System.out.println("支付宝退款失败"); + } else { + orderAuctionBond.setBoundStatus(BondStatusEnum.REFUNDED); + } + } else if (order.getPaymentMethod() != null + && order.getPaymentMethod().getCode() == 1) {// 微信 + // 获取支付信息 + LambdaQueryWrapper<Paylog> paylogEntityWrapper = Wrappers.lambdaQuery(); + paylogEntityWrapper.eq(Paylog::getOutTradeNo, orderAuctionBond.getOrderNo()); + Paylog paylog = iPaylogService.getOne(paylogEntityWrapper); + + String refundMoney = SinataUtil.doubleRetainTwo(paylog.getPayMoney() * 100d); + Integer refundFee = Integer.parseInt( + refundMoney.substring(0, refundMoney.length() - 3)); + String money = SinataUtil.doubleRetainTwo(paylog.getPayMoney() * 100d); + Integer totalFee = Integer.parseInt(money.substring(0, money.length() - 3)); + refundFee = 1; + String refundNo = OrderUtil.getOrderNoForPrefix("R"); + boolean bo = paylogService.refundForWxpay(4, paylog.getTradeNo(), + paylog.getOutTradeNo(), refundNo, totalFee, refundFee, "2"); + if (!bo) { + System.out.println("微信退款失败"); + } else { + orderAuctionBond.setBoundStatus(BondStatusEnum.REFUNDED); + } + } + orderAuctionBondMapper.updateById(orderAuctionBond); } } @@ -1730,12 +1749,9 @@ refundMoney.substring(0, refundMoney.length() - 3)); String money = SinataUtil.doubleRetainTwo(paylog.getPayMoney() * 100D); Integer totalFee = Integer.parseInt(money.substring(0, money.length() - 3)); - String regEx = "[^0-9]"; - Pattern p = Pattern.compile(regEx); - Matcher m = p.matcher(orderNo); - String ma = m.replaceAll("").trim(); + String refundNo = OrderUtil.getOrderNoForPrefix("R"); result = paylogService.refundForWxpay(2, paylog.getTradeNo(), - paylog.getOutTradeNo(), "R" + ma, totalFee, refundFee, "4"); + paylog.getOutTradeNo(), refundNo, totalFee, refundFee, "4"); } else if (paymentMethod == PaymentMethodEnum.ALIPAY) { result = paylogService.refundForAlipay(paylog.getOutTradeNo(), paylog.getTradeNo(), paylog.getPayMoney()); @@ -1811,17 +1827,21 @@ .eq(OrderAuctionBond::getBoundStatus, BondStatusEnum.PAID)); } if (StringUtils.isNotNull(orderAuctionBond)) { - Paylog paylog = iPaylogService.lambdaQuery() + Optional<Paylog> paylogOpt = iPaylogService.lambdaQuery() .in(Paylog::getOutTradeNo, orderAuctionBond.getOrderNo()) - .one(); - boolean result = handleRefund(orderAuctionBond.getPaymentMethod(), paylog, - orderAuctionBond.getOrderNo()); - if (result) { - paylog.setState(3);// 已退款 - orderAuctionBond.setBoundStatus(BondStatusEnum.REFUNDED); - iPaylogService.updateById(paylog); - orderAuctionBondMapper.updateById(orderAuctionBond); + .oneOpt(); + if (paylogOpt.isPresent()) { + Paylog paylog = paylogOpt.get(); + boolean result = handleRefund(orderAuctionBond.getPaymentMethod(), paylog, + orderAuctionBond.getOrderNo()); + if (result) { + paylog.setState(3);// 已退款 + orderAuctionBond.setBoundStatus(BondStatusEnum.REFUNDED); + iPaylogService.updateById(paylog); + orderAuctionBondMapper.updateById(orderAuctionBond); + } } + } } diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/PaylogServiceImpl.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/PaylogServiceImpl.java index 233f554..76dbfc5 100644 --- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/PaylogServiceImpl.java +++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/PaylogServiceImpl.java @@ -30,6 +30,7 @@ import com.ruoyi.system.api.domain.GoodsGroupPurchase; import com.ruoyi.system.api.domain.GoodsGroupPurchaseInfo; import com.ruoyi.system.api.domain.GoodsSku; +import com.ruoyi.system.api.domain.Member; import com.ruoyi.system.api.domain.Order; import com.ruoyi.system.api.domain.OrderAuctionBond; import com.ruoyi.system.api.domain.dto.MemberPointsDTO; @@ -96,7 +97,10 @@ private PaylogMapper paylogMapper; @Override - public R<Map<String, Object>> getPayInfo(Integer uid, Integer type, String orderNO,String openId, HttpServletRequest request) { + public R<Map<String, Object>> getPayInfo(Long uid, Integer type, String orderNO, String openId, + HttpServletRequest request) { + Member member = memberClient.getMembeOne(uid, SecurityConstants.INNER).getData(); + openId = member.getMiniOpenid(); Double price = 0.0; String subject; String body; @@ -723,10 +727,14 @@ System.out.println("证书: " + Configure.getCertLocalPath_2()); String xmlResult = WxPayApi.orderRefund(false, paraMap,Configure.getCertLocalPath_2(), Configure.getMchid()); - + System.out.println("微信退款结果: " + xmlResult); return true; } + public static void main(String[] args) { + refundForWxpay(4, "4200002335202408022336923702", + "BO24080216090001", "R123456789", 1, 1, "2"); + } /** * 获取支付宝 * -- Gitblit v1.7.1