From 3803ae044603bc169a5bd75380eddd4979305221 Mon Sep 17 00:00:00 2001 From: dzq Date: Wed, 23 Apr 2025 16:39:40 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E8=AE=A2=E5=8D=95):=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E5=BA=93=E5=AD=98=E6=89=A3=E5=87=8F=E7=8A=B6=E6=80=81=E5=AD=97?= =?UTF-8?q?=E6=AE=B5=E4=BB=A5=E4=BC=98=E5=8C=96=E5=BA=93=E5=AD=98=E7=AE=A1?= =?UTF-8?q?=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 在订单表中添加`is_deduct_stock`字段,用于标记库存是否已扣减,避免重复扣减库存。同时,在退款逻辑中增加对余额退款的支持,确保退款流程的完整性。 --- .../ReturnApprovalApplicationService.java | 17 ++++++++++++++++- .../shop/order/OrderApplicationService.java | 1 + .../domain/shop/order/db/ShopOrderEntity.java | 4 ++++ .../domain/shop/order/dto/ShopOrderDTO.java | 2 ++ .../domain/shop/order/model/OrderModel.java | 12 ++++++++---- sql/20250329_cabinet_cell_operation.sql | 5 ++++- 6 files changed, 35 insertions(+), 6 deletions(-) diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/shop/approval/ReturnApprovalApplicationService.java b/agileboot-domain/src/main/java/com/agileboot/domain/shop/approval/ReturnApprovalApplicationService.java index 4fc8740..dec2d59 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/shop/approval/ReturnApprovalApplicationService.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/shop/approval/ReturnApprovalApplicationService.java @@ -65,6 +65,7 @@ public class ReturnApprovalApplicationService { private final AccessTokenApplicationService accessTokenApplicationService; private final QyUserService qyUserService; private final CabinetCellModelFactory cabinetCellModelFactory; + private final QyUserService userService; /** * 获取退货审批列表 @@ -141,7 +142,8 @@ public class ReturnApprovalApplicationService { throw new IllegalArgumentException("退款金额不能超过订单总额"); } - if (!Objects.equals(orderModel.getPaymentMethod(), "balance")) { + if (Objects.equals(orderModel.getPaymentMethod(), "wechat")) { + // 微信退款 RefundVO refundVO = null; try { refundVO = paymentApplicationService.refund( @@ -155,6 +157,19 @@ public class ReturnApprovalApplicationService { if (null == refundVO || !refundVO.getSuccess()) { throw new RuntimeException("退款失败"); } + } else if (Objects.equals(orderModel.getPaymentMethod(), "balance")) { + // 余额退款 + try { + QyAccessTokenEntity accessToken = accessTokenApplicationService.getByAppid("QWTONG_YS_WXSHOP", WeixinConstants.corpid); + String userid = QywxApiUtil.convertToUserid(accessToken.getAccessToken(), orderModel.getOpenid()).getUserid(); + QyUserEntity qyUser = userService.getUserByUserId(userid, WeixinConstants.corpid); + if (null != qyUser) { + qyUser.setBalance(qyUser.getBalance().add(command.getReturnAmount())); + } + userService.updateById(qyUser); + } catch (Exception e) { + log.error("余额退款失败", e); + } } // 审批人信息 diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/OrderApplicationService.java b/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/OrderApplicationService.java index 285b961..b1fc27e 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/OrderApplicationService.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/OrderApplicationService.java @@ -151,6 +151,7 @@ public class OrderApplicationService { orderModel.setIsInternal(command.getIsInternal()); orderModel.setUserid(command.getQyUserid()); orderModel.setName(command.getName()); + orderModel.setIsDeductStock(0); orderModel.insert(); processOrderGoods(orderModel, goodsList); diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/db/ShopOrderEntity.java b/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/db/ShopOrderEntity.java index 553cd32..209cae2 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/db/ShopOrderEntity.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/db/ShopOrderEntity.java @@ -77,6 +77,10 @@ public class ShopOrderEntity extends BaseEntity { @TableField("pay_status") private Integer payStatus; + @ApiModelProperty("已扣减库存(0否 1是)") + @TableField("is_deduct_stock") + private Integer isDeductStock; + @ApiModelProperty("支付方式") @TableField("payment_method") private String paymentMethod; diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/dto/ShopOrderDTO.java b/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/dto/ShopOrderDTO.java index 9abb590..6afd70c 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/dto/ShopOrderDTO.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/dto/ShopOrderDTO.java @@ -41,6 +41,8 @@ public class ShopOrderDTO { private Integer status; @ApiModelProperty("支付状态(1未支付 2已支付 3退款中 4已退款)") private Integer payStatus; + @ApiModelProperty("已扣减库存(0否 1是)") + private Integer isDeductStock; @ApiModelProperty("支付方式") private String paymentMethod; @ApiModelProperty("支付时间") diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/model/OrderModel.java b/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/model/OrderModel.java index 55475ab..0608442 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/model/OrderModel.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/model/OrderModel.java @@ -93,12 +93,16 @@ public class OrderModel extends ShopOrderEntity { } catch (Exception e) { log.error("支付时间转换失败", e); } + boolean isDeductStock = this.getIsDeductStock().equals(1); + this.setIsDeductStock(1); this.updateById(); - orderGoodsService.selectByOrderId(this.getOrderId()).forEach(orderGoods -> { - // 扣减库存 - deductGoodsStock(orderGoods.getGoodsId(), orderGoods.getQuantity(), orderGoods.getCellId()); - }); + if (!isDeductStock) { + orderGoodsService.selectByOrderId(this.getOrderId()).forEach(orderGoods -> { + // 扣减库存 + deductGoodsStock(orderGoods.getGoodsId(), orderGoods.getQuantity(), orderGoods.getCellId()); + }); + } } public void handleRefundSuccess() { diff --git a/sql/20250329_cabinet_cell_operation.sql b/sql/20250329_cabinet_cell_operation.sql index 7a4bc9c..558d0da 100644 --- a/sql/20250329_cabinet_cell_operation.sql +++ b/sql/20250329_cabinet_cell_operation.sql @@ -24,4 +24,7 @@ CREATE TABLE `cabinet_cell_operation` ( ALTER TABLE `shop_goods` -ADD COLUMN `auto_approval` TINYINT NOT NULL DEFAULT 0 COMMENT '免审批(0否 1是)' AFTER `status`; \ No newline at end of file +ADD COLUMN `auto_approval` TINYINT NOT NULL DEFAULT 0 COMMENT '免审批(0否 1是)' AFTER `status`; + +ALTER TABLE `shop_order` +ADD COLUMN `is_deduct_stock` TINYINT NOT NULL DEFAULT 0 COMMENT '已扣减库存(0否 1是)' AFTER `pay_status`; \ No newline at end of file