ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/CouponMember.java
@@ -47,7 +47,7 @@ @ApiModelProperty(value = "优惠券类型 1=满减券 2=代金券 3=折扣券") private CouponTypeEnum couponType; @ApiModelProperty(value = "优惠券状态 0:未使用, 1:已使用") @ApiModelProperty(value = "优惠券状态 0:未使用, 1:已使用 2:已过期") private CouponUseEnum couponStatus; @ApiModelProperty(value = "满减金额,例如:满100元") ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/GoodsGroupPurchaseInfo.java
@@ -46,7 +46,7 @@ @ApiModelProperty(value = "成团人数") private Integer groupSize; @ApiModelProperty(value = "0 是未成团,1 是已经成团") @ApiModelProperty(value = "0 是未成团,1 是已经成团 2 成团失败") private Integer groupStatus; @ApiModelProperty(value = "创建者") ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/Order.java
@@ -163,4 +163,5 @@ @ApiModelProperty("团购编号") private String groupNo; } ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/CouponMemberDTO.java
@@ -15,6 +15,6 @@ @ApiModelProperty(value = "会员id") private Long memberId; @ApiModelProperty(value = "优惠券状态 0:未使用, 1:已使用") @ApiModelProperty(value = "优惠券状态 0:未使用, 1:已使用 2:已过期") private Integer couponStatus; } ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/OrderReturnDTO.java
@@ -1,12 +1,8 @@ package com.ruoyi.system.api.domain.dto; import com.ruoyi.common.core.enums.RequestTypeEnum; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import org.springframework.web.multipart.MultipartFile; import java.time.LocalDateTime; @Data @ApiModel(value = "售后订单传输对象", description = "售后订单传输对象") ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/async/AuctionAsyncMethodService.java
@@ -54,7 +54,7 @@ } private boolean isWithinOneHour(LocalDateTime startTime) { LocalDateTime checkTime = LocalDateTime.now().plusHours(1); LocalDateTime checkTime = LocalDateTime.now().plusMinutes(61); return checkTime.isAfter(startTime); } ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionGoodsServiceImpl.java
@@ -317,12 +317,29 @@ id); List<AuctionBidRecord> auctionBidRecordList = new ArrayList<>(); if (StringUtils.isNotEmpty(auctionBidRecords)) { if (auctionBidRecords.size() >= auctionGoods.getAuctionStock()) { // 中标 for (int i = 0; i < auctionGoods.getAuctionStock(); i++) { AuctionBidRecord auctionBidRecord = auctionBidRecords.get(i); auctionBidRecord.setStatus(BidStatusEnum.SUCCESSFUL); auctionBidRecordList.add(auctionBidRecord); } } else { // 中标 for (int i = 0; i < auctionGoods.getAuctionStock(); i++) { AuctionBidRecord auctionBidRecord = auctionBidRecords.get(i); auctionBidRecord.setStatus(BidStatusEnum.SUCCESSFUL); auctionBidRecordList.add(auctionBidRecord); } // 退回剩余库存 GoodsStockUpdDTO goodsStockUpdDTO = new GoodsStockUpdDTO(); goodsStockUpdDTO.setGoodsSkuId(auctionGoods.getGoodsSkuId()); goodsStockUpdDTO.setAuctionStock( auctionGoods.getAuctionStock() - auctionBidRecordList.size()); goodsSkuClient.updGoodsStock(Lists.newArrayList(goodsStockUpdDTO), SecurityConstants.INNER); } auctionBidRecordService.updateBatchById(auctionBidRecordList); // 创建待支付订单 @@ -330,11 +347,12 @@ ConfigEnum.MEMBER_POINTS_MONEY.getKey()).getData(); CustomConfig pointsConfig = sysUserClient.getconfig( ConfigEnum.MEMBER_POINTS_POINTS.getKey()).getData(); double ratio = Double.parseDouble( pointsConfig.getConfigValue()) / Double.parseDouble( moneyConfig.getConfigValue()); for (AuctionBidRecord auctionBidRecord : auctionBidRecordList) { BigDecimal lastBidAmount = auctionBidRecord.getLastBidAmount(); BigDecimal divide = lastBidAmount.divide( new BigDecimal(moneyConfig.getConfigValue()), 0, RoundingMode.DOWN); int points = divide.multiply( new BigDecimal(pointsConfig.getConfigValue())).intValue(); OrderDTO orderDTO = new OrderDTO(); orderDTO.setAuctionType(AuctionOrderTypeEnum.REGULAR_ITEMS); orderDTO.setGoodsQuantity(auctionGoods.getAuctionStock()); @@ -344,8 +362,7 @@ orderDTO.setTotalAmount(auctionBidRecord.getLastBidAmount()); orderDTO.setOrderFrom(OrderFromEnum.AUCTION_ORDERS); orderDTO.setOrderTime(LocalDateTime.now()); orderDTO.setPoints(auctionBidRecord.getLastBidAmount() .multiply(BigDecimal.valueOf(ratio)).intValue()); orderDTO.setPoints(points); orderDTO.setBound(auctionGoods.getBond()); MemberAddress data = memberClient.getMemberAddressOne( auctionBidRecord.getMemberId(), SecurityConstants.INNER).getData(); @@ -692,12 +709,29 @@ id); List<AuctionBidRecord> auctionBidRecordList = new ArrayList<>(); if (StringUtils.isNotEmpty(auctionBidRecords)) { if (auctionBidRecords.size() >= auctionGoods.getAuctionStock()) { // 中标 for (int i = 0; i < auctionGoods.getAuctionStock(); i++) { AuctionBidRecord auctionBidRecord = auctionBidRecords.get(i); auctionBidRecord.setStatus(BidStatusEnum.SUCCESSFUL); auctionBidRecordList.add(auctionBidRecord); } } else { // 中标 for (int i = 0; i < auctionGoods.getAuctionStock(); i++) { AuctionBidRecord auctionBidRecord = auctionBidRecords.get(i); auctionBidRecord.setStatus(BidStatusEnum.SUCCESSFUL); auctionBidRecordList.add(auctionBidRecord); } // 退回剩余库存 GoodsStockUpdDTO goodsStockUpdDTO = new GoodsStockUpdDTO(); goodsStockUpdDTO.setGoodsSkuId(auctionGoods.getGoodsSkuId()); goodsStockUpdDTO.setAuctionStock( auctionGoods.getAuctionStock() - auctionBidRecords.size()); goodsSkuClient.updGoodsStock(Lists.newArrayList(goodsStockUpdDTO), SecurityConstants.INNER); } auctionBidRecordService.updateBatchById(auctionBidRecordList); // 创建待支付订单 @@ -705,12 +739,6 @@ ConfigEnum.MEMBER_POINTS_MONEY.getKey()).getData(); CustomConfig pointsConfig = sysUserClient.getconfig( ConfigEnum.MEMBER_POINTS_POINTS.getKey()).getData(); BigDecimal ratio = BigDecimal.valueOf(Double.parseDouble( pointsConfig.getConfigValue())) .divide(BigDecimal.valueOf(Double.parseDouble( moneyConfig.getConfigValue())), 0, RoundingMode.DOWN); for (AuctionBidRecord auctionBidRecord : auctionBidRecordList) { BigDecimal lastBidAmount = auctionBidRecord.getLastBidAmount(); BigDecimal divide = lastBidAmount.divide( @@ -798,7 +826,7 @@ return null; }).filter(Objects::nonNull).collect(Collectors.toList()); // 远程调用订单服务修改订单状态 orderClient.updateOrderAuctionBondStatus(ids, BondStatusEnum.PAID, orderClient.updateOrderAuctionBondStatus(ids, BondStatusEnum.REFUNDED, SecurityConstants.INNER); } } ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionSalesroomServiceImpl.java
@@ -903,7 +903,7 @@ public String getQrCode(Long id) throws Exception { AuctionSalesroom auctionSalesroom = this.getById(id); String auctionSalesroomNo = auctionSalesroom.getAuctionSalesroomNo(); return CreateQrCode.createQRCode(auctionSalesroomNo); return auctionSalesroom.getQrCode(); } @Override @@ -1502,11 +1502,10 @@ if (lastBidAmount.intValue() > 0) { BigDecimal divide = lastBidAmount.divide( BigDecimal.valueOf(Long.parseLong(memberPointsMoney.getConfigValue())), 0, new BigDecimal(memberPointsMoney.getConfigValue()), 0, RoundingMode.DOWN); int points = divide.multiply( BigDecimal.valueOf( Long.parseLong((memberPointsPoints.getConfigValue())))).intValue(); new BigDecimal(memberPointsPoints.getConfigValue())).intValue(); order.setPoints(points); } else { order.setPoints(0); @@ -1649,10 +1648,14 @@ List<GoodsStockUpdDTO> dtoList = new ArrayList<>(); for (AuctionSalesroomGoods salesroomGoods : auctionSalesroomGoods) { salesroomGoods.setStatus(AuctionGoodsStatusEnum.ENDED); // 等待中的商品退库存 if (salesroomGoods.getStatus().equals(AuctionGoodsStatusEnum.WAITING)) { GoodsStockUpdDTO goodsStockUpdDTO = new GoodsStockUpdDTO(); goodsStockUpdDTO.setGoodsSkuId(salesroomGoods.getGoodsSkuId()); goodsStockUpdDTO.setAuctionStock(salesroomGoods.getSalesroomStock()); dtoList.add(goodsStockUpdDTO); } } // 批量更新商品库存 auctionSalesroomGoodsMapper.updateBatchById(auctionSalesroomGoods); @@ -1662,15 +1665,16 @@ List<AuctionBidRecord> auctionBidRecordList = auctionBidRecordMapper.selectList( Wrappers.<AuctionBidRecord>lambdaQuery() .eq(AuctionBidRecord::getAuctionSalesroomId, auctionSalesroomId) .eq(AuctionBidRecord::getStatus, BidStatusEnum.ELIMINATE)); Set<Long> memberIdlist = auctionBidRecordList.stream().map(AuctionBidRecord::getMemberId) .ne(AuctionBidRecord::getStatus, BidStatusEnum.SUCCESSFUL)); Set<Long> memberIdList = new HashSet<>(); if (CollUtils.isNotEmpty(auctionBidRecordList)) { memberIdList = auctionBidRecordList.stream().map(AuctionBidRecord::getMemberId) .collect(Collectors.toSet()); if (StringUtils.isNotEmpty(memberIdlist)) { } OrderAuctionBondDTO orderAuctionBondDTO = new OrderAuctionBondDTO(); orderAuctionBondDTO.setAuctionSalesroomId(auctionSalesroom.getId()); orderAuctionBondDTO.setUserList(memberIdlist); orderAuctionBondDTO.setUserList(memberIdList); orderClient.getOrderAuctionBond(orderAuctionBondDTO, SecurityConstants.INNER); } Map<String, Object> map = new ConcurrentHashMap<>(); map.put("notification_type", NotificationTypeConstant.AUCTION_SALESROOM); map.put("auctionSalesroomId", auctionSalesroom.getId().toString()); ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/async/AsyncMethodService.java
@@ -79,7 +79,7 @@ } private boolean isWithinOneHour(LocalDateTime startTime) { LocalDateTime checkTime = LocalDateTime.now().plusHours(1); LocalDateTime checkTime = LocalDateTime.now().plusMinutes(61); return checkTime.isAfter(startTime); } ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsGroupPurchaseServiceImpl.java
@@ -285,6 +285,7 @@ groupPurchase.setGroupStatus( res ? GroupStatusEnum.FORMED_INTO_A_GROUP : GroupStatusEnum.GROUP_FAILURE); groupPurchase.setStartStatus(StartStatusEnum.ENDED); this.updateById(groupPurchase); } @@ -349,6 +350,13 @@ orderClient.updateOrderStatusByMubres(formedGroupMubres, SecurityConstants.INNER); return true; } List<GoodsGroupPurchaseInfo> notGroupedList = groupPurchaseInfoList.stream() .filter(g -> !g.getCurrentNumber() .equals(g.getGroupSize())).peek(p -> { p.setGroupStatus(GroupStatusEnum.GROUP_FAILURE.getCode()); }).collect( Collectors.toList()); goodsGroupPurchaseInfoService.updateBatchById(notGroupedList); } return false; } ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/inner/MemberPointsController.java
@@ -2,18 +2,14 @@ import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.utils.page.PageDTO; import com.ruoyi.system.api.domain.MemberPoints; import com.ruoyi.member.service.IMemberPointsService; import com.ruoyi.system.api.domain.dto.MemberDTO; import com.ruoyi.system.api.domain.dto.MemberPointsDTO; import io.swagger.annotations.ApiOperation; import javax.annotation.Resource; 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; import javax.annotation.Resource; /** * <p> @@ -31,11 +27,7 @@ @PostMapping("/addMemberPoints") @ApiOperation(value = "用户端-添加或减少用户积分") public R addMemberPoints(@RequestBody MemberPointsDTO memberPointsDTO) { MemberPoints points=new MemberPoints(); points.setMemberId(memberPointsDTO.getMemberId()); points.setPointsType(memberPointsDTO.getPointsType()); points.setPoints(memberPointsDTO.getPoints()); iMemberPointsService.save(points); iMemberPointsService.addMemberPoints(memberPointsDTO); return R.ok(); } ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/IMemberPointsService.java
@@ -6,6 +6,7 @@ import com.ruoyi.member.controller.management.vo.MgtMemberPointsVO; import com.ruoyi.system.api.domain.MemberPoints; import com.ruoyi.system.api.domain.dto.MemberDTO; import com.ruoyi.system.api.domain.dto.MemberPointsDTO; /** * <p> @@ -26,4 +27,6 @@ * @return PageDTO<MgtMemberPointsVO> */ PageDTO<MgtMemberPointsVO> getMemberPointsPage(MgtMemberPointsQuery query); void addMemberPoints(MemberPointsDTO memberPointsDTO); } ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/MemberPointsServiceImpl.java
@@ -14,6 +14,7 @@ import com.ruoyi.system.api.domain.Member; import com.ruoyi.system.api.domain.MemberPoints; import com.ruoyi.system.api.domain.dto.MemberDTO; import com.ruoyi.system.api.domain.dto.MemberPointsDTO; import com.ruoyi.system.api.feignClient.MemberClient; import java.util.List; import java.util.Map; @@ -22,6 +23,8 @@ import java.util.stream.Collectors; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; /** * <p> @@ -69,6 +72,7 @@ .eq(StringUtils.isNotNull(query.getPointsStatus()), MemberPoints::getPointsStatus, query.getPointsStatus()) .in(StringUtils.isNotEmpty(memberIdSet), MemberPoints::getMemberId, memberIdSet) .eq(StringUtils.isNotNull(query.getId()), MemberPoints::getMemberId, query.getId()) .orderByDesc(MemberPoints::getCreateTime) .page(page); if (StringUtils.isEmpty(page.getRecords())) { @@ -116,4 +120,14 @@ } return memberDTO; } @Override @Transactional(propagation = Propagation.REQUIRES_NEW) public void addMemberPoints(MemberPointsDTO memberPointsDTO) { MemberPoints points = new MemberPoints(); points.setMemberId(memberPointsDTO.getMemberId()); points.setPointsType(memberPointsDTO.getPointsType()); points.setPoints(memberPointsDTO.getPoints()); this.save(points); } } ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/MemberServiceImpl.java
@@ -64,6 +64,8 @@ import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; /** * <p> @@ -525,6 +527,7 @@ } @Override @Transactional(propagation = Propagation.REQUIRES_NEW) public void updMembeOne(updMembeOneDTO dMembeOneDTO) { Member byId = this.getById(dMembeOneDTO.getMemberId()); if (dMembeOneDTO.getMoney()!=null){ ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/management/vo/MgtOrderVO.java
@@ -35,7 +35,7 @@ private LocalDateTime orderTime; @ApiModelProperty(value = "拍卖订单类型 1=普通拍品 2=拍卖会拍品") private AuctionOrderTypeEnum auctionType; private AuctionOrderTypeEnum auctionOrderType; @ApiModelProperty(value = "所属拍卖场") private String salesroomName; ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/MemberInvoiceServiceImpl.java
@@ -34,6 +34,7 @@ import javax.annotation.Resource; import org.jetbrains.annotations.NotNull; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; /** * <p> @@ -208,6 +209,7 @@ * @param dto 管理后台-开票申请审核数据传输对象 */ @Override @Transactional(rollbackFor = Exception.class) public void audit(MgtMemberInvoicingAuditDTO dto) { MemberInvoice memberInvoice = getMemberInvoice(dto.getId()); if (!Objects.equals(memberInvoice.getInvoiceStatus(), 1)) { @@ -222,13 +224,13 @@ List<MemberInvoiceOrder> memberInvoiceOrderList = iMemberInvoiceOrderService.lambdaQuery() .eq(MemberInvoiceOrder::getInvoiceId, memberInvoice) .list(); Set<Long> orderIdSet = memberInvoiceOrderList.stream() .map(MemberInvoiceOrder::getOrderId) Set<String> orderNoSet = memberInvoiceOrderList.stream() .map(MemberInvoiceOrder::getOrderNo) .collect(Collectors.toSet()); if (!orderIdSet.isEmpty()) { if (!orderNoSet.isEmpty()) { iOrderService.lambdaUpdate() .set(Order::getInvoiceStatus, dto.getInvoiceStatus() == 2 ? 3 : 4) .in(Order::getId, orderIdSet).update(); .in(Order::getOrderNo, orderNoSet).update(); } } ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderReturnRequestServiceImpl.java
@@ -8,6 +8,7 @@ import com.ruoyi.common.core.enums.AuditStatusEnum; import com.ruoyi.common.core.enums.OrderStatusEnum; import com.ruoyi.common.core.enums.PaymentMethodEnum; import com.ruoyi.common.core.enums.PointStatusEnum; import com.ruoyi.common.core.enums.RequestTypeEnum; import com.ruoyi.common.core.enums.ReturnRequestStatusEnum; import com.ruoyi.common.core.exception.ServiceException; @@ -28,11 +29,14 @@ import com.ruoyi.system.api.domain.Order; import com.ruoyi.system.api.domain.dto.LogisticsDTO; import com.ruoyi.system.api.domain.dto.MemberDTO; import com.ruoyi.system.api.domain.dto.MemberPointsDTO; import com.ruoyi.system.api.domain.dto.OrderReturnDTO; import com.ruoyi.system.api.domain.dto.updMembeOneDTO; import com.ruoyi.system.api.domain.vo.Express100VO; import com.ruoyi.system.api.domain.vo.OrderReturnVO; import com.ruoyi.system.api.feignClient.MemberClient; import com.ruoyi.system.api.feignClient.SysUserClient; import io.seata.spring.annotation.GlobalTransactional; import java.time.LocalDateTime; import java.util.List; import java.util.Map; @@ -248,7 +252,8 @@ } @Override @Transactional(rollbackFor = Exception.class) @GlobalTransactional(rollbackFor = Exception.class) @Transactional public void confirmReturnRequest(Long id) { OrderReturnRequest orderReturnRequest = getOrderReturnRequest(id); if (orderReturnRequest.getStatus() @@ -268,14 +273,31 @@ String orderNo = order.getOrderNo(); Paylog paylog = paylogService.lambdaQuery().eq(Paylog::getOutTradeNo, orderNo) .last("limit 1").one(); PaymentMethodEnum paymentMethod = order.getPaymentMethod(); if (StringUtils.isNotNull(paylog)) { PaymentMethodEnum paymentMethod = order.getPaymentMethod(); boolean result = handleRefund(paymentMethod, paylog, orderNo); if (result) { paylog.setState(3);// 已退款 paylogService.updateById(paylog); } } // 扣除订单积分 Member member = memberClient.getMembeOne(order.getMemberId(), SecurityConstants.INNER) .getData(); if (StringUtils.isNotNull(member)) { MemberPointsDTO memberPointsDTO = new MemberPointsDTO(); memberPointsDTO.setMemberId(order.getMemberId()); memberPointsDTO.setPointsType(1); memberPointsDTO.setPointsStatus(PointStatusEnum.INCREASE); 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); } } private boolean handleRefund(PaymentMethodEnum paymentMethod, Paylog paylog, String orderNo) { ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java
@@ -14,12 +14,12 @@ import com.ruoyi.common.core.enums.OrderStatusEnum; import com.ruoyi.common.core.enums.OrderTypeEnum; import com.ruoyi.common.core.enums.PaymentMethodEnum; import com.ruoyi.common.core.enums.PointStatusEnum; import com.ruoyi.common.core.enums.RequestTypeEnum; import com.ruoyi.common.core.enums.ReturnRequestStatusEnum; import com.ruoyi.common.core.exception.ServiceException; import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.core.utils.page.BeanUtils; import com.ruoyi.common.core.utils.page.CollUtils; import com.ruoyi.common.core.utils.page.PageDTO; import com.ruoyi.common.redis.service.RedisService; import com.ruoyi.order.controller.management.dto.MgtOrderConfirmShipmentDTO; @@ -56,6 +56,7 @@ import com.ruoyi.system.api.domain.dto.MemberDTO; import com.ruoyi.system.api.domain.dto.MemberOrderDTO; import com.ruoyi.system.api.domain.dto.MemberOrderListDTO; import com.ruoyi.system.api.domain.dto.MemberPointsDTO; import com.ruoyi.system.api.domain.dto.MgtAfterSaleSettingDTO; import com.ruoyi.system.api.domain.dto.OrderDTO; import com.ruoyi.system.api.domain.dto.updMembeOneDTO; @@ -69,6 +70,7 @@ import com.ruoyi.system.api.feignClient.MemberClient; import com.ruoyi.system.api.feignClient.PromotionClient; import com.ruoyi.system.api.feignClient.SysUserClient; import io.seata.spring.annotation.GlobalTransactional; import java.math.BigDecimal; import java.math.RoundingMode; import java.time.LocalDateTime; @@ -1233,7 +1235,8 @@ List<MgtOrderVO> list = voList; // 封装参数查询拍卖会 Set<Long> auctionSalesroomGoodsIdSet = list.stream() .filter(order -> order.getAuctionType() == AuctionOrderTypeEnum.AUCTION_ITEMS) .filter(order -> order.getAuctionOrderType() == AuctionOrderTypeEnum.AUCTION_ITEMS) .map(MgtOrderVO::getGoodsSkuId).collect(Collectors.toSet()); List<AuctionSalesroom> auctionSalesroomList = auctionClient.getAuctionSalesroomByIds( auctionSalesroomGoodsIdSet, SecurityConstants.INNER) @@ -1243,7 +1246,8 @@ AuctionSalesroom::getSalesroomName)); // 封装参数查询拍卖订单保证金 Set<Long> auctionGoodsIdSet = list.stream() .filter(order -> order.getAuctionType() == AuctionOrderTypeEnum.REGULAR_ITEMS) .filter(order -> order.getAuctionOrderType() == AuctionOrderTypeEnum.REGULAR_ITEMS) .map(MgtOrderVO::getGoodsSkuId) .collect(Collectors.toSet()); @@ -1269,7 +1273,7 @@ Function.identity())); list.forEach(order -> { if (order.getAuctionType() == AuctionOrderTypeEnum.AUCTION_ITEMS) { if (order.getAuctionOrderType() == AuctionOrderTypeEnum.AUCTION_ITEMS) { order.setSalesroomName( StringUtils.isNotBlank(salesroomMap.get(order.getGoodsSkuId())) ? salesroomMap.get(order.getAuctionSalesroomId()) : "无"); @@ -1282,7 +1286,7 @@ .getBoundStatus() : null); } if (order.getAuctionType() == AuctionOrderTypeEnum.REGULAR_ITEMS) { if (order.getAuctionOrderType() == AuctionOrderTypeEnum.REGULAR_ITEMS) { order.setSalesroomName("无"); order.setBoundStatus( StringUtils.isNotNull(auctionSalesroomGoodsBondMap.get( @@ -1410,9 +1414,13 @@ * @param id 订单id */ @Override @Transactional(rollbackFor = Exception.class) @GlobalTransactional(rollbackFor = Exception.class) @Transactional public void refund(Long id) { Order order = getOrder(id); if (order.getIsRequest() == 2) { throw new ServiceException("该订单已是售后状态"); } String orderNo = order.getOrderNo(); Paylog paylog = iPaylogService.lambdaQuery().eq(Paylog::getOutTradeNo, orderNo) .last("limit 1").one(); @@ -1431,10 +1439,28 @@ orderReturnRequest.setRequestReason("管理后台退款"); orderReturnRequest.setStatus(ReturnRequestStatusEnum.COMPLETED); orderReturnRequest.setAuditStatus(AuditStatusEnum.PASSED); orderReturnRequest.setAuditTime(LocalDateTime.now()); orderReturnRequestService.save(orderReturnRequest); } order.setIsRequest(2); this.updateById(order); // 扣除订单积分 Member member = memberClient.getMembeOne(order.getMemberId(), SecurityConstants.INNER) .getData(); if (StringUtils.isNotNull(member)) { MemberPointsDTO memberPointsDTO = new MemberPointsDTO(); memberPointsDTO.setMemberId(order.getMemberId()); memberPointsDTO.setPointsType(1); memberPointsDTO.setPointsStatus(PointStatusEnum.INCREASE); 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); } } private boolean handleRefund(PaymentMethodEnum paymentMethod, Paylog paylog, String orderNo) { @@ -1467,6 +1493,9 @@ @Override public void refundReturn(Long id) { Order order = getOrder(id); if (order.getIsRequest() == 2) { throw new ServiceException("该订单已是售后状态"); } if (order.getOrderStatus() == OrderStatusEnum.FINISHED) { OrderReturnRequest orderReturnRequest = new OrderReturnRequest(); order.setIsRequest(2); @@ -1484,6 +1513,7 @@ orderReturnRequest.setRequestReason("管理后台退款退货"); orderReturnRequest.setStatus(ReturnRequestStatusEnum.TO_BE_RETURNED); orderReturnRequest.setAuditStatus(AuditStatusEnum.PASSED); orderReturnRequest.setAuditTime(LocalDateTime.now()); orderReturnRequestService.save(orderReturnRequest); } @@ -1505,33 +1535,33 @@ @Override public void refundBond(Long id) { Order order = getOrder(id); List<OrderAuctionBond> orderAuctionBond; OrderAuctionBond orderAuctionBond; if (order.getAuctionOrderType() == AuctionOrderTypeEnum.AUCTION_ITEMS) { orderAuctionBond = orderAuctionBondMapper.selectList( orderAuctionBond = orderAuctionBondMapper.selectOne( Wrappers.lambdaQuery(OrderAuctionBond.class) .eq(OrderAuctionBond::getOrderId, id) .eq(OrderAuctionBond::getAuctionSalesroomId, order.getAuctionSalesroomId()) .eq(OrderAuctionBond::getBoundStatus, BondStatusEnum.PAID)); } else { orderAuctionBond = orderAuctionBondMapper.selectList( orderAuctionBond = orderAuctionBondMapper.selectOne( Wrappers.lambdaQuery(OrderAuctionBond.class) .eq(OrderAuctionBond::getOrderId, id) .eq(OrderAuctionBond::getAuctionGoodsId, order.getGoodsSkuId()) .eq(OrderAuctionBond::getBoundStatus, BondStatusEnum.PAID)); } if (CollUtils.isNotEmpty(orderAuctionBond)) { for (OrderAuctionBond auctionBond : orderAuctionBond) { if (StringUtils.isNotNull(orderAuctionBond)) { Paylog paylog = iPaylogService.lambdaQuery() .in(Paylog::getOutTradeNo, auctionBond.getOrderNo()) .in(Paylog::getOutTradeNo, orderAuctionBond.getOrderNo()) .one(); boolean result = handleRefund(auctionBond.getPaymentMethod(), paylog, auctionBond.getOrderNo()); boolean result = handleRefund(orderAuctionBond.getPaymentMethod(), paylog, orderAuctionBond.getOrderNo()); if (result) { paylog.setState(3);// 已退款 auctionBond.setBoundStatus(BondStatusEnum.REFUNDED); orderAuctionBond.setBoundStatus(BondStatusEnum.REFUNDED); iPaylogService.updateById(paylog); this.updateById(order); } } } } ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/forepart/vo/CouponMemberVO.java
@@ -1,13 +1,16 @@ package com.ruoyi.promotion.controller.forepart.vo; import com.baomidou.mybatisplus.annotation.*; import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableLogic; import com.ruoyi.common.core.enums.CouponTypeEnum; import com.ruoyi.common.core.enums.CouponUseEnum; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; import java.time.LocalDateTime; import lombok.Data; @Data public class CouponMemberVO { @@ -27,7 +30,7 @@ @ApiModelProperty(value = "优惠券类型 1=满减券 2=代金券 3=折扣券") private CouponTypeEnum couponType; @ApiModelProperty(value = "优惠券状态 0:未使用, 1:已使用") @ApiModelProperty(value = "优惠券状态 0:未使用, 1:已使用 2:已过期") private CouponUseEnum couponStatus; @ApiModelProperty(value = "满减金额,例如:满100元") ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/mapper/CouponMemberMapper.java
@@ -13,4 +13,5 @@ */ public interface CouponMemberMapper extends BaseMapper<CouponMember> { void timingCheckMemberCoupon(); } ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/scheduler/PromotionScheduler.java
New file @@ -0,0 +1,28 @@ package com.ruoyi.promotion.scheduler; import com.ruoyi.promotion.service.ICouponMemberService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; /** * @author mitao * @date 2024/7/20 */ @Slf4j @Component @RequiredArgsConstructor public class PromotionScheduler { private final ICouponMemberService couponMemberService; /** * 每天凌晨定时检查优惠券过期 */ @Scheduled(cron = "1 0 0 * * ?") private void timingCheckMemberCoupon() { log.info("----------------定时检查优惠券过期任务开始执行----------------"); couponMemberService.timingCheckMemberCoupon(); } } ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/service/ICouponMemberService.java
@@ -3,11 +3,10 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.common.core.utils.page.PageDTO; import com.ruoyi.promotion.controller.forepart.vo.CouponMemberVO; import com.ruoyi.system.api.domain.dto.CouponMemberDTO; import com.ruoyi.system.api.domain.CouponMember; import org.springframework.web.bind.annotation.RequestBody; import com.ruoyi.system.api.domain.dto.CouponMemberDTO; import java.util.List; import org.springframework.web.bind.annotation.RequestBody; /** * <p> @@ -30,4 +29,5 @@ List<CouponMemberVO> updCouponMember1(@RequestBody CouponMemberDTO couponMemberDTO); void timingCheckMemberCoupon(); } ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/service/async/AsyncMethodService.java
@@ -33,14 +33,12 @@ Integer issuedQuantity = coupon.getIssuedQuantity(); List<CouponMember> memberCouponList = new ArrayList<>(); for (Long memberId : memberIdList) { for (int i = 0; i < issuedQuantity; i++) { coupon.setId(null); CouponMember couponMember = BeanUtils.copyBean(coupon, CouponMember.class); couponMember.setMemberId(memberId); couponMember.setCouponId(couponId); memberCouponList.add(couponMember); if (StringUtils.isNotNull(issuedQuantity) && memberCouponList.size() >= issuedQuantity) { break; } } if (StringUtils.isNotEmpty(memberCouponList)) { ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/service/impl/CouponMemberServiceImpl.java
@@ -13,19 +13,14 @@ import com.ruoyi.promotion.mapper.CouponMapper; import com.ruoyi.promotion.mapper.CouponMemberMapper; import com.ruoyi.promotion.service.ICouponMemberService; import com.ruoyi.promotion.service.ICouponService; import com.ruoyi.system.api.domain.CouponMember; import com.ruoyi.system.api.domain.GoodsSku; import com.ruoyi.system.api.domain.dto.CouponMemberDTO; import java.util.ArrayList; import java.util.List; import java.util.Set; import java.util.stream.Collectors; import org.springframework.stereotype.Service; import javax.annotation.Resource; import org.springframework.stereotype.Service; /** * <p> @@ -142,4 +137,9 @@ } return couponMemberVOS; } @Override public void timingCheckMemberCoupon() { this.baseMapper.timingCheckMemberCoupon(); } } ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/service/impl/CouponServiceImpl.java
@@ -187,6 +187,10 @@ public PageDTO<CouponReceiveDetailVO> getReceiveDetail(MgtCouponReceiveQuery query) { MemberDTO memberDTO = getMemberQueryParam(query); Set<Long> memberIdSet = getMemberIdSet(memberDTO); if ((StringUtils.isNotBlank(query.getNickname()) || StringUtils.isNotBlank( query.getPhone())) && CollUtils.isEmpty(memberIdSet)) { return PageDTO.empty(0L, 0L); } Page<CouponMember> page = couponMemberService.lambdaQuery() .eq(StringUtils.isNotNull(query.getCouponStatus()), CouponMember::getCouponStatus, query.getCouponStatus()) ruoyi-modules/ruoyi-promotion/src/main/resources/mapper/promotion/CouponMemberMapper.xml
@@ -2,4 +2,11 @@ <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.ruoyi.promotion.mapper.CouponMemberMapper"> <update id="timingCheckMemberCoupon"> UPDATE t_coupon_member SET coupon_status = 2 WHERE del_flag = 0 AND coupon_status = 0 AND end_date < CURDATE() </update> </mapper> ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
@@ -601,11 +601,9 @@ */ @Override public void saveSupplier(SupplierDTO dto) { SysUser user = BeanUtils.copyBean(dto, SysUser.class); // 添加 if (StringUtils.isNull(dto.getUserId())) { SysUser user = BeanUtils.copyBean(dto, SysUser.class); boolean b = checkPhoneUnique(user); if (!b) { throw new ServiceException("该手机号已存在"); @@ -618,25 +616,25 @@ this.save(user); } else { // 编辑 user = this.getById(dto.getUserId()); if (!user.getPhonenumber().equals(dto.getPhonenumber())) { boolean b = checkPhoneUnique(user); SysUser userUpd = this.getById(dto.getUserId()); if (StringUtils.isNull(userUpd)) { throw new ServiceException("供应商不存在"); } userUpd.setNickName(dto.getNickName()); userUpd.setUpdateTime(new Date()); userUpd.setUpdateBy(SecurityUtils.getUsername()); if (StringUtils.isNotBlank(dto.getPassword())) { userUpd.setPassword(SecurityUtils.encryptPassword(dto.getPassword())); } if (!userUpd.getPhonenumber().equals(dto.getPhonenumber())) { userUpd.setPhonenumber(dto.getPhonenumber()); userUpd.setUserName(dto.getPhonenumber()); boolean b = checkPhoneUnique(userUpd); if (!b) { throw new ServiceException("该手机号已存在"); } } if (StringUtils.isNull(user)) { throw new ServiceException("供应商不存在"); } user.setNickName(dto.getNickName()); user.setPhonenumber(dto.getPhonenumber()); user.setUserName(dto.getPhonenumber()); user.setUpdateTime(new Date()); user.setUpdateBy(SecurityUtils.getUsername()); if (StringUtils.isNotBlank(dto.getPassword())) { user.setPassword(SecurityUtils.encryptPassword(dto.getPassword())); } this.updateById(user); this.updateById(userUpd); } } ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
@@ -130,6 +130,7 @@ from sys_user where phonenumber = #{phonenumber} and del_flag = '0' and user_type in ('00', '04') limit 1 </select>