From d153ce27c1fc956ca628c082bcb707d8de5714de Mon Sep 17 00:00:00 2001 From: dzc <2388224167@qq.com> Date: Wed, 27 Aug 2025 20:15:08 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E8=B4=AD=E7=89=A9=E8=BD=A6=E5=95=86?= =?UTF-8?q?=E5=93=81=E7=BA=A7=E9=80=80=E6=AC=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entity/order/HardAfterSaleCarEntity.java | 1 - .../order/HardAfterSaleController.java | 1 + .../controller/order/HardCarController.java | 10 +++ .../mapper/order/HardAfterSaleCarMapper.java | 4 ++ .../hard/service/HardAfterSaleCarService.java | 9 +++ .../order/HardAfterSaleCarServiceImpl.java | 38 +++++++++++ .../impl/order/HardAfterSaleServiceImpl.java | 67 ++++++++++++++++--- .../mapper/order/HardAfterSaleCarMapper.xml | 55 +++++++++++++++ 8 files changed, 176 insertions(+), 9 deletions(-) diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/entity/order/HardAfterSaleCarEntity.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/entity/order/HardAfterSaleCarEntity.java index 7b0000504..6fb403f0c 100644 --- a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/entity/order/HardAfterSaleCarEntity.java +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/entity/order/HardAfterSaleCarEntity.java @@ -20,7 +20,6 @@ import java.time.LocalDateTime; @Schema(description = "购物车退款表") public class HardAfterSaleCarEntity extends Model { - /** * 编号 */ diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardAfterSaleController.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardAfterSaleController.java index 7a68b9b5f..dcfb53d39 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardAfterSaleController.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardAfterSaleController.java @@ -23,6 +23,7 @@ import org.springframework.http.HttpHeaders; import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.Operation; import lombok.RequiredArgsConstructor; +import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import java.util.List; diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardCarController.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardCarController.java index 1ad5dadcc..933598f32 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardCarController.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardCarController.java @@ -14,9 +14,11 @@ import com.bsd.pjcloud.hard.api.constant.HardTypeEnum; import com.bsd.pjcloud.hard.api.constant.order.HardOrderTypeEnum; import com.bsd.pjcloud.hard.api.dto.app.HardCarSaveOrUpdateDto; import com.bsd.pjcloud.hard.api.dto.order.HardCarDto; +import com.bsd.pjcloud.hard.api.entity.order.HardAfterSaleCarEntity; import com.bsd.pjcloud.hard.api.entity.order.HardCarEntity; import com.bsd.pjcloud.hard.api.entity.order.HardOrderEntity; import com.bsd.pjcloud.hard.api.vo.order.HardCarVo; +import com.bsd.pjcloud.hard.service.HardAfterSaleCarService; import com.bsd.pjcloud.hard.service.HardCarService; import com.bsd.pjcloud.hard.service.HardOrderService; import org.springframework.security.access.prepost.PreAuthorize; @@ -46,6 +48,7 @@ public class HardCarController { private final HardCarService hardCarService; private final HardOrderService hardOrderService; + private final HardAfterSaleCarService hardAfterSaleCarService; /* ************************************* start app start ************************************* */ @GetMapping("/app/mch-detail") @@ -88,9 +91,16 @@ public class HardCarController { return R.ok(hardCarService.pageJoin(page, dto)); } + @GetMapping("/refund-car") + @Operation(summary = "查询退款购物车根据订单id") + public R> refundCar(@RequestParam Long orderId) { + return R.ok(hardAfterSaleCarService.getByOrderId(orderId)); + } + @Operation(summary = "分页查询", description = "分页查询") @GetMapping("/page") @PreAuthorize("@pms.hasPermission('hard_hardCar_view')") + public R getHardCarPage(@ParameterObject Page page, @ParameterObject HardCarEntity hardCar) { LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(); return R.ok(hardCarService.page(page, wrapper)); diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/mapper/order/HardAfterSaleCarMapper.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/mapper/order/HardAfterSaleCarMapper.java index 1555b92e1..8b57cbb67 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/mapper/order/HardAfterSaleCarMapper.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/mapper/order/HardAfterSaleCarMapper.java @@ -3,9 +3,13 @@ package com.bsd.pjcloud.hard.mapper.order; import com.bsd.pjcloud.common.data.datascope.PjcloudBaseMapper; import com.bsd.pjcloud.hard.api.entity.order.HardAfterSaleCarEntity; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; @Mapper public interface HardAfterSaleCarMapper extends PjcloudBaseMapper { + List getByCarPrentId(@Param("carParentId") Long carParentId); } \ No newline at end of file diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardAfterSaleCarService.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardAfterSaleCarService.java index 890be4167..779316aae 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardAfterSaleCarService.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardAfterSaleCarService.java @@ -2,7 +2,16 @@ package com.bsd.pjcloud.hard.service; import com.baomidou.mybatisplus.extension.service.IService; import com.bsd.pjcloud.hard.api.entity.order.HardAfterSaleCarEntity; +import com.bsd.pjcloud.hard.api.entity.order.HardAfterSaleEntity; +import com.bsd.pjcloud.hard.api.entity.order.HardOrderEntity; + +import java.util.List; public interface HardAfterSaleCarService extends IService { + List getByOrderId(Long orderId); + + List getByCarPrentId(Long carParentId); + + void create(List carList, HardOrderEntity order, HardAfterSaleEntity afterSale); } \ No newline at end of file diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardAfterSaleCarServiceImpl.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardAfterSaleCarServiceImpl.java index b5b9b79ba..d032dab6d 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardAfterSaleCarServiceImpl.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardAfterSaleCarServiceImpl.java @@ -1,15 +1,53 @@ package com.bsd.pjcloud.hard.service.impl.order; +import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.bsd.pjcloud.hard.api.entity.order.HardAfterSaleCarEntity; +import com.bsd.pjcloud.hard.api.entity.order.HardAfterSaleEntity; +import com.bsd.pjcloud.hard.api.entity.order.HardOrderEntity; import com.bsd.pjcloud.hard.mapper.order.HardAfterSaleCarMapper; +import com.bsd.pjcloud.hard.mapper.order.HardOrderMapper; import com.bsd.pjcloud.hard.service.HardAfterSaleCarService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.validation.annotation.Validated; + +import java.util.List; /** * 购物车退款表 */ +@Validated +@Slf4j +@RequiredArgsConstructor @Service public class HardAfterSaleCarServiceImpl extends ServiceImpl implements HardAfterSaleCarService { + private final HardOrderMapper hardOrderMapper; + + @Override + public List getByOrderId(Long orderId) { + HardOrderEntity order = hardOrderMapper.selectById(orderId); + if (ObjectUtil.isEmpty(order)) return null; + return getByCarPrentId(order.getParentCarId()); + } + + @Override + public List getByCarPrentId(Long carParentId) { + return baseMapper.getByCarPrentId(carParentId); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void create(List carList, HardOrderEntity order, HardAfterSaleEntity afterSale) { + if (ObjectUtil.isEmpty(carList)) return; + carList = carList.stream().map(item -> { + item.setParentCarId(order.getParentCarId()); + item.setRefundId(afterSale.getId()); + return item; + }).toList(); + saveBatch(carList); + } } \ No newline at end of file diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardAfterSaleServiceImpl.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardAfterSaleServiceImpl.java index ee62ae5cb..d2e6f1f02 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardAfterSaleServiceImpl.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardAfterSaleServiceImpl.java @@ -36,21 +36,21 @@ import com.bsd.pjcloud.hard.api.entity.order.HardAfterSaleLogEntity; import com.bsd.pjcloud.hard.api.entity.order.HardOrderEntity; import com.bsd.pjcloud.hard.api.utils.HardUtil; import com.bsd.pjcloud.hard.api.vo.order.HardAfterSaleVo; +import com.bsd.pjcloud.hard.api.vo.order.HardCarVo; import com.bsd.pjcloud.hard.api.vo.order.HardOrderVo; import com.bsd.pjcloud.hard.api.vo.wechat.WechantRefunCallbackVo; import com.bsd.pjcloud.hard.api.vo.wechat.WechatRefundVo; import com.bsd.pjcloud.hard.mapper.order.HardAfterSaleLogMapper; import com.bsd.pjcloud.hard.mapper.order.HardAfterSaleMapper; +import com.bsd.pjcloud.hard.mapper.order.HardCarMapper; import com.bsd.pjcloud.hard.mapper.order.HardOrderMapper; -import com.bsd.pjcloud.hard.service.AlipayService; -import com.bsd.pjcloud.hard.service.HardAfterSaleService; -import com.bsd.pjcloud.hard.service.HardOrderService; -import com.bsd.pjcloud.hard.service.WechatPayService; +import com.bsd.pjcloud.hard.service.*; import com.bsd.pjcloud.wallet.api.dto.recharge.WalletRechargeRefundDto; import com.bsd.pjcloud.wallet.api.feign.RemoteWalletRechargeService; import com.bsd.pjcloud.wallet.api.vo.recharge.WalletRechargeVo; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.security.core.parameters.P; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; @@ -81,6 +81,8 @@ public class HardAfterSaleServiceImpl extends ServiceImpl carList) { - if (ObjectUtil.isEmpty(carList)) throw new RuntimeException("售后商品列表不能为空"); + public void validateOrderCarCanRefund(HardOrderEntity order, List refundCarList) { + if (ObjectUtil.isEmpty(refundCarList)) throw new RuntimeException("售后商品列表不能为空"); // 查询订单购物车 - return false; + List orderCarList = hardCarService.getByOrderId(order.getId()); + if (ObjectUtil.isEmpty(orderCarList)) throw new RuntimeException("订单购物车不存在"); + // 查询已退款商品 + List refundSuccessCarList = hardAfterSaleCarService.getByCarPrentId(order.getParentCarId()); + for (HardAfterSaleCarEntity refundCar : refundCarList) { + HardCarVo orderCar = orderCarList.stream().filter(v -> ObjectUtil.equal(v.getId(), refundCar.getId())).findFirst().orElse(null); + if (orderCar == null) throw new RuntimeException("退款商品<" + refundCar.getProductName() + ">不存在"); + int refundCount = 0; + if (ObjectUtil.isNotEmpty(refundCar.getProductCount())) { + refundCount = refundCar.getProductCount(); + } + // 已经退货成功的商品列表 + if (ObjectUtil.isNotEmpty(refundSuccessCarList)) { + HardAfterSaleCarEntity refundSuccessCar = refundSuccessCarList.stream().filter(v -> ObjectUtil.equal(v.getId(), refundCar.getId())).findFirst().orElse(null); + if (ObjectUtil.isNotEmpty(refundSuccessCar)) { + refundCount += refundSuccessCar.getProductCount(); + } + } + if (orderCar.getProductCount() < refundCount) { + throw new RuntimeException("退款商品<" + refundCar.getProductName() + ">数量超出"); + } + } } private HardAfterSaleEntity validateAfterSaleAuditable(Long id) { @@ -504,7 +527,9 @@ public class HardAfterSaleServiceImpl extends ServiceImpl + + select a.id, + a.refund_id, + a.parent_car_id, + a.product_id, + a.product_name, + a.product_pic, + a.product_price, + a.product_count, + a.product_weight, + a.total_price, + a.create_by, + a.create_time, + a.update_by, + a.update_time, + a.del_flag, + a.tenant_id + + + a.del_flag = '0' + + and a.id = #{id} + + + and a.refund_id = #{refundId} + + + and a.parent_car_id = #{parentCarId} + + + + \ No newline at end of file