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; } 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; 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(); 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())); 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); 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; } 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; } 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); } } 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("获取异常"); } 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); 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("微信退款失败!"); } 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())) { 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); } } } } 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"); } /** * 获取支付宝 *