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 66070c6e3..604739aa5 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 @@ -150,8 +150,13 @@ public class HardAfterSaleController { @Operation(summary = "分页查询", description = "分页查询") @GetMapping("/page") @PreAuthorize("@pms.hasPermission('hard_hardAfterSale_view')") - public R getHardAfterSalePage(@ParameterObject Page page, @ParameterObject HardAfterSaleEntity hardAfterSale) { - LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(); + public R getHardAfterSalePage(@ParameterObject Page page, @ParameterObject HardAfterSaleDto dto) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper() + .eq(HardAfterSaleEntity::getOrderId, dto.getOrderId()) + .eq(HardAfterSaleEntity::getUserId, dto.getUserId()) + .eq(HardAfterSaleEntity::getStatus, dto.getStatus()) + .orderByDesc(HardAfterSaleEntity::getCreateTime) + .orderByDesc(HardAfterSaleEntity::getOrderId); return R.ok(hardAfterSaleService.page(page, wrapper)); } 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 21fe03ac7..9d684f1e2 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 @@ -40,6 +40,7 @@ import com.bsd.pjcloud.hard.mapper.order.HardAfterSaleMapper; import com.bsd.pjcloud.hard.mapper.order.HardOrderMapper; import com.bsd.pjcloud.hard.service.HardAfterSaleService; import com.bsd.pjcloud.hard.service.HardOrderService; +import com.bsd.pjcloud.thirdparty.constant.pay.ThirdPayVoStatusEnum; 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; @@ -228,6 +229,11 @@ public class HardAfterSaleServiceImpl extends ServiceImpl walletRefundResult = walletRechargeService.refund(hardRefundDto); if (walletRefundResult.getCode() != 0 || ObjectUtil.isEmpty(walletRefundResult.getData())) { @@ -239,7 +245,7 @@ public class HardAfterSaleServiceImpl extends ServiceImpl afterList = baseMapper.selectList(new LambdaQueryWrapper() + .eq(HardAfterSaleEntity::getOrderId, order.getId()) + .eq(HardAfterSaleEntity::getType, HardSaleTypeEnum.AFTER_SALE.getType()) + .in(HardAfterSaleEntity::getStatus, List.of(HardSaleStatusEnum.APPLY.getStatus(), HardSaleStatusEnum.COMPLETE.getStatus())) + ); + // 退款金额 + int totalPrice = afterList.stream().filter(v -> ObjectUtil.isNotEmpty(v.getRefundPrice())).map(HardAfterSaleEntity::getRefundPrice).reduce(0, Integer::sum); + if (totalPrice > order.getPayPrice()) { + throw new RuntimeException("退款总金额大于支付总金额"); } return orderVo; } diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/third/HardThirdPayServiceImpl.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/third/HardThirdPayServiceImpl.java index 7541f61f5..60e70ff26 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/third/HardThirdPayServiceImpl.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/third/HardThirdPayServiceImpl.java @@ -185,15 +185,27 @@ public class HardThirdPayServiceImpl implements HardThirdPayService { try { String orderType = getOrderType(soureType); // 订单是否存在 - long orderCount = hardOrderService.count(new LambdaQueryWrapper() + HardOrderEntity orderEntity = hardOrderService.getOne(new LambdaQueryWrapper() .eq(HardOrderEntity::getId, dto.getPlatformOrderId()) .eq(HardOrderEntity::getOrderType, orderType) - .eq(HardOrderEntity::getOrderStatus, HardOrderStatusEnum.PAY.getType()) ); - if (orderCount <= 0) { + if (ObjectUtil.isEmpty(orderEntity)) { baseVo.set(ThirdPayVoStatusEnum.ORDER_EXIST); return baseVo; } + // 查询所有成功的退款 + List afterList = hardAfterSaleService.list(new LambdaQueryWrapper() + .eq(HardAfterSaleEntity::getOrderId, orderEntity.getId()) + .eq(HardAfterSaleEntity::getType, HardSaleTypeEnum.AFTER_SALE.getType()) + .eq(HardAfterSaleEntity::getStatus, HardSaleStatusEnum.COMPLETE.getStatus()) + ); + // 退款金额 + int totalPrice = afterList.stream().filter(v -> ObjectUtil.isNotEmpty(v.getRefundPrice())).map(HardAfterSaleEntity::getRefundPrice).reduce(0, Integer::sum); + int executeTotalPrice = totalPrice + dto.getPrice(); + if (executeTotalPrice > orderEntity.getPayPrice()) { + baseVo.set(ThirdPayVoStatusEnum.REFUND_TOTAL_PRICE); + return baseVo; + } // 退款id是否重复 long refundCount = hardAfterSaleService.count(new LambdaQueryWrapper() .eq(HardAfterSaleEntity::getNo, dto.getThirdRefundId()) @@ -204,21 +216,15 @@ public class HardThirdPayServiceImpl implements HardThirdPayService { baseVo.set(ThirdPayVoStatusEnum.ORDER_HAVE_REFUND); return baseVo; } - // 是否已退款 - HardOrderVo order = hardAfterSaleService.validateOrderCanRefund(Long.valueOf(dto.getPlatformOrderId())); - if (ObjectUtil.isEmpty(order)) { - baseVo.set(ThirdPayVoStatusEnum.ORDER_HAVE_REFUND); - return baseVo; - } // 添加售后订单 HardAfterSaleEntity saveObj = BeanUtils.toBean(dto, HardAfterSaleEntity.class); saveObj.setType(HardSaleTypeEnum.AFTER_SALE.getType()); saveObj.setStatus(HardSaleStatusEnum.COMPLETE.getStatus()); saveObj.setNo(dto.getThirdRefundId()); saveObj.setWay("10"); - saveObj.setOrderId(order.getId()); + saveObj.setOrderId(orderEntity.getId()); saveObj.setRefundPrice(dto.getPrice()); - saveObj.setUserId(order.getUserId()); + saveObj.setUserId(orderEntity.getUserId()); saveObj.setAuditUserId(null); saveObj.setAuditTime(LocalDateTime.now()); saveObj.setApplyReason("宁波银行(美好生活)api退款"); @@ -228,9 +234,9 @@ public class HardThirdPayServiceImpl implements HardThirdPayService { // 添加售后进度 HardAfterSaleLogEntity saveLogObj = HardAfterSaleLogEntity.builder() .afterSaleId(saveObj.getId()) - .userId(order.getUserId()) + .userId(orderEntity.getUserId()) .operateType(HardAfterSaleOperateTypeEnum.ADMIN_REFUND.getType()) - .beforeStatus(order.getOrderStatus()) + .beforeStatus(orderEntity.getOrderStatus()) .afterStatus(HardSaleStatusEnum.COMPLETE.getStatus()) .content(HardSaleStatusEnum.COMPLETE.getContent()) .build(); @@ -240,7 +246,7 @@ public class HardThirdPayServiceImpl implements HardThirdPayService { // 返回 RefundVo refundVo = new RefundVo(); refundVo.setRefundTime(LocalDateTimeUtil.format(LocalDateTime.now(), DatePattern.NORM_DATETIME_PATTERN)); - refundVo.setThirdOrderId(order.getOrderNo()); + refundVo.setThirdOrderId(orderEntity.getOrderNo()); refundVo.setThirdRefundId(dto.getThirdRefundId()); refundVo.setPlatformOrderId(dto.getPlatformOrderId()); refundVo.setPlatformRefundId(String.valueOf(saveObj.getId())); diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/constant/pay/ThirdPayVoStatusEnum.java b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/constant/pay/ThirdPayVoStatusEnum.java index 77b1e2675..280bf3279 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/constant/pay/ThirdPayVoStatusEnum.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/constant/pay/ThirdPayVoStatusEnum.java @@ -24,6 +24,7 @@ public enum ThirdPayVoStatusEnum { ORDER_HAVE_PAY(506, "订单已支付"), ORDER_HAVE_REFUND(507, "订单已退款"), DETAIL_ITEM_NOT_ONE(508, "查询详情条目不为一"), + REFUND_TOTAL_PRICE(509, "退款总金额大于支付总金额"), UNKNOWN_ERROR(599, "未知错误,请联系管理员"), ; diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/test/java/com/bsd/pjcloud/admin/PayTest.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/test/java/com/bsd/pjcloud/admin/PayTest.java index 4e3c1421f..365686a20 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/test/java/com/bsd/pjcloud/admin/PayTest.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/test/java/com/bsd/pjcloud/admin/PayTest.java @@ -29,8 +29,8 @@ import java.util.Map; @SpringBootTest(classes = ThirdPartyApp.class) public class PayTest { - private final String baseUrl = "http://123.156.230.15:8089/api"; - // private final String baseUrl = "http://127.0.0.1:9999"; + // private final String baseUrl = "http://123.156.230.15:8089/api"; + private final String baseUrl = "http://127.0.0.1:9999"; private final String walletInfoUrl = "/third/third-pay-api/user-wallet"; @@ -80,7 +80,7 @@ public class PayTest { Map paramsMap = new HashMap<>(); paramsMap.put("userId", 1875049673022279681L); paramsMap.put("thirdOrderId", System.currentTimeMillis()); - paramsMap.put("price", 100); + paramsMap.put("price", 1000); paramsMap.put("products", null); String body = JSONUtil.toJsonStr(paramsMap); // 发送请求 @@ -119,9 +119,9 @@ public class PayTest { public void walletRefund() throws Exception { ThirdKeyManageEntity config = getLbConfig(); Map paramsMap = new HashMap<>(); - paramsMap.put("platformOrderId", "1919704180908027905"); - paramsMap.put("thirdRefundId", "10"); - paramsMap.put("price", "1000"); + paramsMap.put("platformOrderId", "1928019909587054593"); + paramsMap.put("thirdRefundId", System.currentTimeMillis()); + paramsMap.put("price", "300"); String body = JSONUtil.toJsonStr(paramsMap); // 发送请求 String res = HttpRequest.post(baseUrl + walletRefundUrl).contentType("application/json").header(apiCountersign(body)).body(body).execute().body();