From 30aee72acaff7e1b865e3906f8a1edcaddae5c71 Mon Sep 17 00:00:00 2001
From: mitao <2763622819@qq.com>
Date: 星期五, 14 六月 2024 18:51:22 +0800
Subject: [PATCH] 提交【管理后台】订单管理相关接口

---
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/management/vo/MgtOrderVO.java             |   26 +++
 ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionGoodsServiceImpl.java        |    1 
 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/AuctionClient.java                 |   12 
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/management/MgtOrderController.java        |   59 ++++++-
 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/AuctionFallbackFactory.java            |   12 
 ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionSalesroomServiceImpl.java    |   19 +
 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/Order.java                              |    2 
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java                   |  254 +++++++++++++++++++++++++++++--
 ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/IAuctionSalesroomService.java            |    3 
 ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/enums/OrderStatusEnum.java                |    6 
 ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/inner/AuctionSalesroomController.java |   17 +
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/IOrderService.java                           |   29 +++
 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/vo/Express100VO.java                    |    4 
 13 files changed, 383 insertions(+), 61 deletions(-)

diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/Order.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/Order.java
index 0713367..1432c70 100644
--- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/Order.java
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/Order.java
@@ -61,7 +61,7 @@
     @ApiModelProperty(value = "支付合计")
     private BigDecimal totalAmount;
 
-    @ApiModelProperty(value = "订单状态 1=待支付 2=待发货 3=待收货 4=已完成 5=已取消,6 售后")
+    @ApiModelProperty(value = "订单状态 1=待支付 2=待发货 3=待收货 4=已完成 5=已取消 6=售后中 7=已退款 8=已退款退货")
     private OrderStatusEnum orderStatus;
 
     @ApiModelProperty(value = "支付时间")
diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/vo/Express100VO.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/vo/Express100VO.java
index 24d2235..ce11e80 100644
--- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/vo/Express100VO.java
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/vo/Express100VO.java
@@ -1,8 +1,7 @@
 package com.ruoyi.system.api.domain.vo;
 
-import lombok.Data;
-
 import java.util.List;
+import lombok.Data;
 
 @Data
 public class Express100VO {
@@ -10,6 +9,7 @@
     private String nu;
     private String ischeck;
     private String com;
+    private String state;
     private String status;
     private List<LogisticsInfoVO> data;
 }
diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/AuctionFallbackFactory.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/AuctionFallbackFactory.java
index 6a001c5..eeb64e1 100644
--- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/AuctionFallbackFactory.java
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/AuctionFallbackFactory.java
@@ -4,15 +4,13 @@
 import com.ruoyi.system.api.domain.AppMiniLoginVO;
 import com.ruoyi.system.api.domain.AuctionGoods;
 import com.ruoyi.system.api.domain.AuctionSalesroom;
-import com.ruoyi.system.api.domain.OrderAuctionBond;
 import com.ruoyi.system.api.domain.dto.AppMiniLoginDTO;
-import com.ruoyi.system.api.domain.dto.AuctionGoodsListDTO;
 import com.ruoyi.system.api.domain.dto.BondDTO;
 import com.ruoyi.system.api.domain.dto.MemberAuctionSalesroomBondDTO;
 import com.ruoyi.system.api.feignClient.AuctionClient;
-import org.springframework.cloud.openfeign.FallbackFactory;
-
+import java.util.Collection;
 import java.util.List;
+import org.springframework.cloud.openfeign.FallbackFactory;
 
 /**
  * @author mitao
@@ -53,7 +51,11 @@
                 return R.fail("修改保证金支付状态失败" + cause.getMessage());
             }
 
-
+            @Override
+            public R<List<AuctionSalesroom>> getAuctionSalesroomByIds(
+                    Collection<Long> auctionSalesroomGoodsIdSet, String source) {
+                return R.fail("获取拍卖场列表失败" + cause.getMessage());
+            }
         };
     }
 }
diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/AuctionClient.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/AuctionClient.java
index 80c3dff..de72fdc 100644
--- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/AuctionClient.java
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/AuctionClient.java
@@ -6,20 +6,18 @@
 import com.ruoyi.system.api.domain.AppMiniLoginVO;
 import com.ruoyi.system.api.domain.AuctionGoods;
 import com.ruoyi.system.api.domain.AuctionSalesroom;
-import com.ruoyi.system.api.domain.OrderAuctionBond;
 import com.ruoyi.system.api.domain.dto.AppMiniLoginDTO;
-import com.ruoyi.system.api.domain.dto.AuctionGoodsListDTO;
 import com.ruoyi.system.api.domain.dto.BondDTO;
 import com.ruoyi.system.api.domain.dto.MemberAuctionSalesroomBondDTO;
 import com.ruoyi.system.api.factory.AuctionFallbackFactory;
+import java.util.Collection;
+import java.util.List;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.PutMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestHeader;
-
-import java.util.List;
 
 @FeignClient(contextId = "auctionClient", value = ServiceNameConstants.RUOYI_AUCTION, fallbackFactory = AuctionFallbackFactory.class)
 public interface AuctionClient {
@@ -45,6 +43,8 @@
     @PostMapping("/order-auction-bond/UpdateBond")
     R<?> UpdateBond(@RequestBody BondDTO BondVO, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
 
-
-
+    @PostMapping("/auction-salesroom/list-by-ids")
+    R<List<AuctionSalesroom>> getAuctionSalesroomByIds(
+            @RequestBody Collection<Long> auctionSalesroomGoodsIdSet,
+            @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
 }
diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/enums/OrderStatusEnum.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/enums/OrderStatusEnum.java
index b971430..cd39232 100644
--- a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/enums/OrderStatusEnum.java
+++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/enums/OrderStatusEnum.java
@@ -10,13 +10,15 @@
 @AllArgsConstructor
 public enum OrderStatusEnum {
 
-    /*订单状态 1=待发货 2=待收货 3=已完成 4=已取消*/
+    /*订单状态 1=待发货 2=待收货 3=已完成 4=已取消 5=售后中 6=售后中 7=已退款 8=已退货退款*/
     TO_PLAY(1, "待支付"),
     TO_BE_SHIPPED(2, "待发货"),
     GOODS_TO_BE_RECEIVED(3, "待收货"),
     FINISHED(4, "已完成"),
     CANCELED(5, "已取消"),
-    AFTER_SALE(6, "售后");
+    AFTER_SALE(6, "售后中"),
+    REFUNDED(7, "已退款"),
+    REFUNDED_AND_RETURNED(8, "已退货退款");
 
     @EnumValue
     private final int code;
diff --git a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/inner/AuctionSalesroomController.java b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/inner/AuctionSalesroomController.java
index c82a555..bbe3d49 100644
--- a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/inner/AuctionSalesroomController.java
+++ b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/inner/AuctionSalesroomController.java
@@ -6,9 +6,14 @@
 import com.ruoyi.common.security.annotation.InnerAuth;
 import com.ruoyi.system.api.domain.AuctionSalesroom;
 import com.ruoyi.system.api.domain.dto.MemberAuctionSalesroomBondDTO;
-import org.springframework.web.bind.annotation.*;
-
+import java.util.Collection;
+import java.util.List;
 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.ResponseBody;
+import org.springframework.web.bind.annotation.RestController;
 
 /**
  * <p>
@@ -34,4 +39,12 @@
         return R.ok(auctionSalesroomOne);
 
     }
+
+    @InnerAuth
+    @PostMapping("/list-by-ids")
+    R<List<AuctionSalesroom>> getAuctionSalesroomByIds(
+            @RequestBody Collection<Long> auctionSalesroomGoodsIdSet) {
+
+        return R.ok(iAuctionSalesroomService.getAuctionSalesroomByIds(auctionSalesroomGoodsIdSet));
+    }
 }
diff --git a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/IAuctionSalesroomService.java b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/IAuctionSalesroomService.java
index a124b2f..e1755ac 100644
--- a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/IAuctionSalesroomService.java
+++ b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/IAuctionSalesroomService.java
@@ -29,6 +29,7 @@
 import com.ruoyi.system.api.domain.vo.PayInfoVO;
 import com.ruoyi.system.api.domain.vo.WdMemberAuctionSalesroomVO;
 import java.io.IOException;
+import java.util.Collection;
 import java.util.List;
 import org.springframework.web.bind.annotation.RequestBody;
 
@@ -193,4 +194,6 @@
     void startCurrentAuctionSalesroom(Long auctionSalesroomId) throws JsonProcessingException;
 
     void stopCurrentAuctionSalesroom(Long auctionSalesroomId) throws JsonProcessingException;
+
+    List<AuctionSalesroom> getAuctionSalesroomByIds(Collection<Long> auctionSalesroomGoodsIdSet);
 }
diff --git a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionGoodsServiceImpl.java b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionGoodsServiceImpl.java
index aeeacf1..ca1d8ec 100644
--- a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionGoodsServiceImpl.java
+++ b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionGoodsServiceImpl.java
@@ -586,6 +586,7 @@
                 .equals(AuctionStartStatusEnum.IN_AUCTION)) {
             this.lambdaUpdate().set(AuctionGoods::getStartStatus, AuctionStartStatusEnum.ENDED)
                     .eq(AuctionGoods::getId, id);
+            // TODO 退保证金
             Map<String, Object> map = new ConcurrentHashMap<>();
             map.put("notification_type", NotificationTypeConstant.AUCTION_GOODS);
             map.put("notification_time", LocalDateTime.now());
diff --git a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionSalesroomServiceImpl.java b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionSalesroomServiceImpl.java
index 5979702..34ac9c3 100644
--- a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionSalesroomServiceImpl.java
+++ b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionSalesroomServiceImpl.java
@@ -1,14 +1,8 @@
 package com.ruoyi.auction.service.impl;
 
 import cn.binarywang.wx.miniapp.api.WxMaService;
-import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
-import com.alibaba.fastjson.TypeReference;
-import com.alibaba.fastjson.parser.Feature;
-import com.alipay.api.AlipayApiException;
 import com.alipay.api.AlipayClient;
-import com.alipay.api.internal.util.AlipayEncrypt;
-import com.alipay.api.internal.util.AlipaySignature;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -97,6 +91,7 @@
 import java.time.LocalDateTime;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collection;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
@@ -1348,4 +1343,16 @@
         String msg = objectMapper.writeValueAsString(map);
         WebSocketUsers.sendMessageToUsersByType(ClientTypeEnum.AUCTIONEER.getCode(), msg);
     }
+
+    @Override
+    public List<AuctionSalesroom> getAuctionSalesroomByIds(
+            Collection<Long> auctionSalesroomGoodsIdSet) {
+        List<AuctionSalesroomGoods> auctionSalesroomGoods = auctionSalesroomGoodsMapper.selectList(
+                Wrappers.lambdaQuery(AuctionSalesroomGoods.class)
+                        .in(AuctionSalesroomGoods::getId, auctionSalesroomGoodsIdSet));
+        Set<Long> auctionSalesroomIdSet = auctionSalesroomGoods.stream()
+                .map(AuctionSalesroomGoods::getAuctionSalesroomId).collect(
+                        Collectors.toSet());
+        return this.listByIds(auctionSalesroomIdSet);
+    }
 }
diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/management/MgtOrderController.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/management/MgtOrderController.java
index fa43bc2..50274c5 100644
--- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/management/MgtOrderController.java
+++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/management/MgtOrderController.java
@@ -5,7 +5,7 @@
 import com.ruoyi.common.core.utils.page.PageDTO;
 import com.ruoyi.order.controller.management.dto.MgtMallOrderQuery;
 import com.ruoyi.order.controller.management.dto.MgtOrderConfirmShipmentDTO;
-import com.ruoyi.order.controller.management.vo.MgtMallOrderVO;
+import com.ruoyi.order.controller.management.vo.MgtOrderVO;
 import com.ruoyi.order.service.IOrderService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -45,11 +45,11 @@
      * @param query 商城订单查询对象
      * @return PageDTO<MgtMallOrderVO>
      */
-    @ApiOperation("商城订单分页列表")
-    @PostMapping("/mall-page")
-    public R<PageDTO<MgtMallOrderVO>> getMallOrderPage(
+    @ApiOperation("订单分页列表")
+    @PostMapping("/page")
+    public R<PageDTO<MgtOrderVO>> getOrderPage(
             @Validated @RequestBody MgtMallOrderQuery query) {
-        return R.ok(orderService.getMallOrderPage(query));
+        return R.ok(orderService.getOrderPage(query));
     }
 
     /**
@@ -60,18 +60,18 @@
      */
     @ApiOperation("查看详情")
     @GetMapping("/detail/{id}")
-    public R<MgtMallOrderVO> getMallOrderDetail(
+    public R<MgtOrderVO> getMallOrderDetail(
             @ApiParam(name = "id", value = "订单id", required = true)
-            @Validated @RequestBody Long id) {
-        return R.ok(orderService.getMallOrderDetail(id));
+            @Validated @PathVariable("id") Long id) {
+        return R.ok(orderService.getOrderDetail(id));
     }
 
     /**
      * 确认发货
      *
-     * @param dto 确认收货请求对象
+     * @param dto 确认发货请求对象
      */
-    @ApiOperation("确认收货")
+    @ApiOperation("确认发货")
     @PutMapping("/confirm-shipment")
     public R<?> confirmShipmentOrder(@Validated @RequestBody MgtOrderConfirmShipmentDTO dto) {
         orderService.confirmShipmentOrder(dto);
@@ -90,4 +90,43 @@
         orderService.receivedGoods(id);
         return R.ok();
     }
+
+    /**
+     * 退款
+     *
+     * @param id 订单id
+     */
+    @ApiOperation("退款")
+    @GetMapping("/refund/{id}")
+    public R<?> refund(
+            @ApiParam(name = "id", value = "订单id", required = true) @PathVariable("id") Long id) {
+        orderService.refund(id);
+        return R.ok();
+    }
+
+    /**
+     * 退款退货
+     *
+     * @param id 订单id
+     */
+    @ApiOperation("退款退货")
+    @GetMapping("/refund-return/{id}")
+    public R<?> refundReturn(
+            @ApiParam(name = "id", value = "订单id", required = true) @PathVariable("id") Long id) {
+        orderService.refundReturn(id);
+        return R.ok();
+    }
+
+    /**
+     * 拍卖订单退保证金
+     *
+     * @param id 订单id
+     */
+    @ApiOperation("拍卖订单退保证金")
+    @PutMapping("/refund-bond/{id}")
+    public R<?> refundBond(
+            @ApiParam(name = "id", value = "订单id", required = true) @PathVariable("id") Long id) {
+        orderService.refundBond(id);
+        return R.ok();
+    }
 }
diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/management/vo/MgtMallOrderVO.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/management/vo/MgtOrderVO.java
similarity index 80%
rename from ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/management/vo/MgtMallOrderVO.java
rename to ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/management/vo/MgtOrderVO.java
index ae72017..dafca6c 100644
--- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/management/vo/MgtMallOrderVO.java
+++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/management/vo/MgtOrderVO.java
@@ -1,9 +1,12 @@
 package com.ruoyi.order.controller.management.vo;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.common.core.enums.AuctionOrderTypeEnum;
+import com.ruoyi.common.core.enums.BondStatusEnum;
 import com.ruoyi.common.core.enums.OrderFromEnum;
 import com.ruoyi.common.core.enums.OrderStatusEnum;
 import com.ruoyi.common.core.enums.PaymentMethodEnum;
+import com.ruoyi.system.api.domain.vo.Express100VO;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiModelProperty;
 import java.io.Serializable;
@@ -17,7 +20,7 @@
  */
 @Data
 @Api(value = "商城订单视图对象")
-public class MgtMallOrderVO implements Serializable {
+public class MgtOrderVO implements Serializable {
 
     private static final long serialVersionUID = -7047076906373189300L;
 
@@ -31,6 +34,18 @@
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private LocalDateTime orderTime;
 
+    @ApiModelProperty(value = "拍卖订单类型 1=普通拍品 2=拍卖会拍品")
+    private AuctionOrderTypeEnum auctionType;
+
+    @ApiModelProperty(value = "所属拍卖场")
+    private String salesroomName;
+
+    @ApiModelProperty(value = "保证金")
+    private BigDecimal bound;
+
+    @ApiModelProperty(value = "保证金状态 1=待支付 2=已支付 3=已退款")
+    private BondStatusEnum boundStatus;
+    
     @ApiModelProperty(value = "订单来源 1=商品订单 2=秒杀订单 3=团购订单 4=拍卖订单")
     private OrderFromEnum orderFrom;
 
@@ -72,6 +87,12 @@
 
     @ApiModelProperty(value = "优惠金额")
     private BigDecimal discountMoney;
+
+    @ApiModelProperty("秒杀价格")
+    private BigDecimal seckillPrice;
+
+    @ApiModelProperty("秒杀价格")
+    private BigDecimal groupPurchasesPrice;
 
     @ApiModelProperty(value = "商品数量")
     private Integer goodsQuantity;
@@ -117,4 +138,7 @@
 
     @ApiModelProperty("售后信息")
     private MgtOrderReturnRequestVO returnRequestVO;
+
+    @ApiModelProperty("物流信息")
+    private Express100VO express100VO;
 }
diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/IOrderService.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/IOrderService.java
index 8903573..6ce91c4 100644
--- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/IOrderService.java
+++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/IOrderService.java
@@ -4,7 +4,7 @@
 import com.ruoyi.common.core.utils.page.PageDTO;
 import com.ruoyi.order.controller.management.dto.MgtMallOrderQuery;
 import com.ruoyi.order.controller.management.dto.MgtOrderConfirmShipmentDTO;
-import com.ruoyi.order.controller.management.vo.MgtMallOrderVO;
+import com.ruoyi.order.controller.management.vo.MgtOrderVO;
 import com.ruoyi.system.api.domain.Order;
 import com.ruoyi.system.api.domain.dto.HomeGoodsSkuDTO;
 import com.ruoyi.system.api.domain.dto.MemberOrderDTO;
@@ -81,7 +81,7 @@
      * @param query 商城订单查询对象
      * @return PageDTO<MgtMallOrderVO>
      */
-    PageDTO<MgtMallOrderVO> getMallOrderPage(MgtMallOrderQuery query);
+    PageDTO<MgtOrderVO> getOrderPage(MgtMallOrderQuery query);
 
     /**
      * 获取商城订单详情
@@ -89,12 +89,12 @@
      * @param id 订单id
      * @return MgtMallOrderVO
      */
-    MgtMallOrderVO getMallOrderDetail(Long id);
+    MgtOrderVO getOrderDetail(Long id);
 
     /**
      * 确认发货
      *
-     * @param dto 确认收货请求对象
+     * @param dto 确认发货请求对象
      */
     void confirmShipmentOrder(MgtOrderConfirmShipmentDTO dto);
 
@@ -104,4 +104,25 @@
      * @param id 订单id
      */
     void receivedGoods(Long id);
+
+    /**
+     * 退款
+     *
+     * @param id 订单id
+     */
+    void refund(Long id);
+
+    /**
+     * 退款退货
+     *
+     * @param id 订单id
+     */
+    void refundReturn(Long id);
+
+    /**
+     * 拍卖订单退保证金
+     *
+     * @param id 订单id
+     */
+    void refundBond(Long id);
 }
diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java
index 5b27bff..ceca2e9 100644
--- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java
+++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java
@@ -7,9 +7,14 @@
 import com.google.common.collect.Lists;
 import com.ruoyi.common.core.constant.CacheConstants;
 import com.ruoyi.common.core.constant.SecurityConstants;
+import com.ruoyi.common.core.enums.AuctionOrderTypeEnum;
+import com.ruoyi.common.core.enums.AuditStatusEnum;
+import com.ruoyi.common.core.enums.BondStatusEnum;
 import com.ruoyi.common.core.enums.OrderFromEnum;
 import com.ruoyi.common.core.enums.OrderStatusEnum;
 import com.ruoyi.common.core.enums.PaymentMethodEnum;
+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;
@@ -17,17 +22,19 @@
 import com.ruoyi.common.redis.service.RedisService;
 import com.ruoyi.order.controller.management.dto.MgtMallOrderQuery;
 import com.ruoyi.order.controller.management.dto.MgtOrderConfirmShipmentDTO;
-import com.ruoyi.order.controller.management.vo.MgtMallOrderVO;
 import com.ruoyi.order.controller.management.vo.MgtOrderReturnRequestVO;
+import com.ruoyi.order.controller.management.vo.MgtOrderVO;
 import com.ruoyi.order.domain.OrderReturnRequest;
 import com.ruoyi.order.domain.Paylog;
 import com.ruoyi.order.mapper.OrderAuctionBondMapper;
 import com.ruoyi.order.mapper.OrderMapper;
+import com.ruoyi.order.service.ILogisticsService;
 import com.ruoyi.order.service.IOrderReturnRequestService;
 import com.ruoyi.order.service.IOrderService;
 import com.ruoyi.order.service.IPaylogService;
 import com.ruoyi.order.util.OrderUtil;
 import com.ruoyi.order.util.SinataUtil;
+import com.ruoyi.system.api.domain.AuctionSalesroom;
 import com.ruoyi.system.api.domain.CouponMember;
 import com.ruoyi.system.api.domain.CustomConfig;
 import com.ruoyi.system.api.domain.GoodsGroupPurchase;
@@ -40,14 +47,17 @@
 import com.ruoyi.system.api.domain.dto.CouponMemberDTO;
 import com.ruoyi.system.api.domain.dto.GoodsStockUpdDTO;
 import com.ruoyi.system.api.domain.dto.HomeGoodsSkuDTO;
+import com.ruoyi.system.api.domain.dto.LogisticsDTO;
 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.OrderDTO;
 import com.ruoyi.system.api.domain.dto.updMembeOneDTO;
+import com.ruoyi.system.api.domain.vo.Express100VO;
 import com.ruoyi.system.api.domain.vo.MemberOrderListVO;
 import com.ruoyi.system.api.domain.vo.MemberTiOrderVO;
 import com.ruoyi.system.api.domain.vo.OrderVO;
+import com.ruoyi.system.api.feignClient.AuctionClient;
 import com.ruoyi.system.api.feignClient.GoodsSkuClient;
 import com.ruoyi.system.api.feignClient.MemberClient;
 import com.ruoyi.system.api.feignClient.PromotionClient;
@@ -56,16 +66,15 @@
 import java.time.LocalDateTime;
 import java.util.Collection;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.TimeUnit;
+import java.util.function.Function;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 import javax.annotation.Resource;
-
 import lombok.Synchronized;
-import org.apache.commons.beanutils.BeanUtils;
-import org.redisson.api.RLock;
 import org.redisson.api.RedissonClient;
 import org.springframework.stereotype.Service;
 
@@ -110,6 +119,11 @@
     @Resource
     private RedisService redisService;
 
+    @Resource
+    private ILogisticsService logisticsService;
+
+    @Resource
+    private AuctionClient auctionClient;
 
     @Override
     public void saveOrderOne(OrderDTO OrderDTO) {
@@ -680,8 +694,8 @@
      * @return PageDTO<MgtMallOrderVO>
      */
     @Override
-    public PageDTO<MgtMallOrderVO> getMallOrderPage(MgtMallOrderQuery query) {
-        PageDTO<MgtMallOrderVO> pageVO;
+    public PageDTO<MgtOrderVO> getOrderPage(MgtMallOrderQuery query) {
+        PageDTO<MgtOrderVO> pageVO;
         // 封装会员条件查询对象
         MemberDTO memberDTO = null;
         Set<Long> memberIdSet = null;
@@ -716,7 +730,64 @@
         if (StringUtils.isEmpty(page.getRecords())) {
             pageVO = PageDTO.empty(page);
         }
-        pageVO = PageDTO.of(page, MgtMallOrderVO.class);
+        pageVO = PageDTO.of(page, MgtOrderVO.class);
+        if (query.getOrderFrom() == OrderFromEnum.AUCTION_ORDERS) {
+            List<MgtOrderVO> list = pageVO.getList();
+            // 封装参数查询拍卖订单保证金
+            Set<Long> orderIdSet = list.stream().map(MgtOrderVO::getId)
+                    .collect(Collectors.toSet());
+            List<OrderAuctionBond> auctionBondList = orderAuctionBondMapper.selectList(
+                    Wrappers.lambdaQuery(OrderAuctionBond.class)
+                            .in(OrderAuctionBond::getOrderId, orderIdSet)
+                            .eq(OrderAuctionBond::getBoundStatus,
+                                    BondStatusEnum.PAID));
+            Map<String, OrderAuctionBond> auctionSalesroomBondMap = auctionBondList.stream()
+                    .filter(bond -> bond.getBondType() == AuctionOrderTypeEnum.AUCTION_ITEMS)
+                    .collect(Collectors.toMap(
+                            bond -> bond.getAuctionSalesroomId() + "-" + bond.getMemberId(),
+                            Function.identity()));
+            Map<String, OrderAuctionBond> auctionSalesroomGoodsBondMap = auctionBondList.stream()
+                    .filter(bond -> bond.getBondType() == AuctionOrderTypeEnum.REGULAR_ITEMS)
+                    .collect(Collectors.toMap(
+                            bond -> bond.getAuctionGoodsId() + "-" + bond.getMemberId(),
+                            Function.identity()));
+            // 封装参数查询拍卖会
+            Set<Long> auctionSalesroomGoodsIdSet = list.stream()
+                    .filter(order -> order.getAuctionType() == AuctionOrderTypeEnum.AUCTION_ITEMS)
+                    .map(MgtOrderVO::getGoodsSkuId).collect(Collectors.toSet());
+            List<AuctionSalesroom> auctionSalesroomList = auctionClient.getAuctionSalesroomByIds(
+                            auctionSalesroomGoodsIdSet, SecurityConstants.INNER)
+                    .getData();
+            Map<Long, String> salesroomMap = auctionSalesroomList.stream()
+                    .collect(Collectors.toMap(AuctionSalesroom::getId,
+                            AuctionSalesroom::getSalesroomName));
+            list.forEach(order -> {
+                if (order.getAuctionType() == AuctionOrderTypeEnum.AUCTION_ITEMS) {
+                    order.setSalesroomName(
+                            StringUtils.isNotBlank(salesroomMap.get(order.getGoodsSkuId()))
+                                    ? salesroomMap.get(order.getGoodsSkuId()) : "无");
+                    order.setBoundStatus(
+                            StringUtils.isNotNull(auctionSalesroomBondMap.get(
+                                            order.getGoodsSkuId() + "-" + order.getMemberId())
+                                    .getBoundStatus())
+                                    ? auctionSalesroomBondMap.get(
+                                            order.getGoodsSkuId() + "-" + order.getMemberId())
+                                    .getBoundStatus()
+                                    : null);
+                }
+                if (order.getAuctionType() == AuctionOrderTypeEnum.REGULAR_ITEMS) {
+                    order.setSalesroomName("无");
+                    order.setBoundStatus(
+                            StringUtils.isNotNull(auctionSalesroomGoodsBondMap.get(
+                                            order.getGoodsSkuId() + "-" + order.getMemberId())
+                                    .getBoundStatus())
+                                    ? auctionSalesroomGoodsBondMap.get(
+                                            order.getGoodsSkuId() + "-" + order.getMemberId())
+                                    .getBoundStatus()
+                                    : null);
+                }
+            });
+        }
         return pageVO;
     }
 
@@ -727,15 +798,25 @@
      * @return MgtMallOrderVO
      */
     @Override
-    public MgtMallOrderVO getMallOrderDetail(Long id) {
+    public MgtOrderVO getOrderDetail(Long id) {
         Order order = this.getById(id);
-        MgtMallOrderVO mgtMallOrderVO = BeanUtils.copyBean(order, MgtMallOrderVO.class);
+        MgtOrderVO mgtOrderVO = BeanUtils.copyBean(order, MgtOrderVO.class);
         // 查询用户信息
         Member member = memberClient.getMembeOne(order.getMemberId(), SecurityConstants.INNER)
                 .getData();
         if (StringUtils.isNotNull(member)) {
-            mgtMallOrderVO.setNickname(member.getNickname());
-            mgtMallOrderVO.setPhone(member.getPhone());
+            mgtOrderVO.setNickname(member.getNickname());
+            mgtOrderVO.setPhone(member.getPhone());
+        }
+        // 拍卖订单查询拍卖会信息
+        if (order.getOrderFrom() == OrderFromEnum.AUCTION_ORDERS && (order.getAuctionType()
+                == AuctionOrderTypeEnum.AUCTION_ITEMS)) {
+            List<AuctionSalesroom> auctionSalesroom = auctionClient.getAuctionSalesroomByIds(
+                    Lists.newArrayList(order.getGoodsSkuId())
+                    , SecurityConstants.INNER).getData();
+            if (StringUtils.isNotNull(auctionSalesroom)) {
+                mgtOrderVO.setSalesroomName(auctionSalesroom.get(0).getSalesroomName());
+            }
         }
         // 查询售后信息
         if (order.getOrderStatus() == OrderStatusEnum.AFTER_SALE) {
@@ -744,24 +825,43 @@
                             .eq(OrderReturnRequest::getOrderId,
                                     order.getId()).last("limit 1"));
             if (StringUtils.isNotNull(orderReturnRequest)) {
-                mgtMallOrderVO.setReturnRequestVO(BeanUtils.copyBean(orderReturnRequest,
+                mgtOrderVO.setReturnRequestVO(BeanUtils.copyBean(orderReturnRequest,
                         MgtOrderReturnRequestVO.class));
             }
         }
-        return mgtMallOrderVO;
+        // 如果订单状态为已发货、已完成、售后, 查询物流信息
+        if (order.getOrderStatus() == OrderStatusEnum.GOODS_TO_BE_RECEIVED
+                || order.getOrderStatus() == OrderStatusEnum.FINISHED
+                || order.getOrderStatus() == OrderStatusEnum.AFTER_SALE) {
+            LogisticsDTO logisticsDTO = new LogisticsDTO();
+            logisticsDTO.setCompany(order.getLogisticsNum());
+            logisticsDTO.setPostid(order.getCourierNumber());
+            Express100VO logisticsList = logisticsService.getLogisticsList(logisticsDTO);
+            if (StringUtils.isNotNull(logisticsList)) {
+                mgtOrderVO.setExpress100VO(logisticsList);
+            }
+        }
+        if (order.getOrderFrom() == OrderFromEnum.SNAP_ORDERS) {
+            GoodsSeckill data = goodsSkuClient.getGoodsSeckillOne(order.getGoodsSkuId(),
+                    SecurityConstants.INNER).getData();
+            mgtOrderVO.setSeckillPrice(data.getSeckillPrice());
+        } else if (order.getOrderFrom() == OrderFromEnum.GROUP_PURCHASE_ORDERS) {
+            GoodsGroupPurchase data = goodsSkuClient.getGoodsSeckiGoodsGroupPurchaseOne(
+                    order.getGoodsSkuId(),
+                    SecurityConstants.INNER).getData();
+            mgtOrderVO.setGroupPurchasesPrice(data.getGroupPurchasePrice());
+        }
+        return mgtOrderVO;
     }
 
     /**
      * 确认发货
      *
-     * @param dto 确认收货请求对象
+     * @param dto 确认发货请求对象
      */
     @Override
     public void confirmShipmentOrder(MgtOrderConfirmShipmentDTO dto) {
-        Order order = this.getById(dto.getId());
-        if (StringUtils.isNull(order)) {
-            throw new ServiceException("订单不存在");
-        }
+        Order order = getOrder(dto.getId());
         order.setOrderStatus(OrderStatusEnum.GOODS_TO_BE_RECEIVED);
         order.setDeliveryTime(LocalDateTime.now());
         order.setCourierNumber(dto.getCourierNumber());
@@ -776,14 +876,124 @@
      */
     @Override
     public void receivedGoods(Long id) {
-        Order order = this.getById(id);
-        if (StringUtils.isNull(order)) {
-            throw new ServiceException("订单不存在");
-        }
+        Order order = getOrder(id);
         if (order.getOrderStatus() == OrderStatusEnum.GOODS_TO_BE_RECEIVED) {
             order.setOrderStatus(OrderStatusEnum.FINISHED);
             order.setReceiveTime(LocalDateTime.now());
             this.updateById(order);
         }
     }
+
+    /**
+     * 退款
+     *
+     * @param id 订单id
+     */
+    @Override
+    public void refund(Long id) {
+        Order order = getOrder(id);
+        String orderNo = order.getOrderNo();
+        Paylog paylog = iPaylogService.lambdaQuery().eq(Paylog::getOutTradeNo, orderNo)
+                .last("limit 1").one();
+        PaymentMethodEnum paymentMethod = order.getPaymentMethod();
+
+        if (StringUtils.isNotNull(paylog)) {
+            boolean result = handleRefund(paymentMethod, paylog, orderNo);
+            if (result) {
+                paylog.setState(3);// 已退款
+                order.setOrderStatus(OrderStatusEnum.REFUNDED);
+                iPaylogService.updateById(paylog);
+                this.updateById(order);
+            }
+            OrderReturnRequest orderReturnRequest = new OrderReturnRequest();
+            orderReturnRequest.setOrderId(id);
+            orderReturnRequest.setRequestTime(LocalDateTime.now());
+            orderReturnRequest.setRequestType(RequestTypeEnum.REFUND);
+            orderReturnRequest.setRequestReason("管理后台退款");
+            orderReturnRequest.setStatus(ReturnRequestStatusEnum.COMPLETED);
+            orderReturnRequest.setAuditStatus(AuditStatusEnum.PASSED);
+            orderReturnRequestService.save(orderReturnRequest);
+        }
+    }
+
+    private boolean handleRefund(PaymentMethodEnum paymentMethod, Paylog paylog, String orderNo) {
+        boolean result = false;
+        if (paymentMethod == PaymentMethodEnum.WECHAT) {
+            String refundMoney = SinataUtil.doubleRetainTwo(paylog.getPayMoney() * 100D);
+            int 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));
+            String regEx = "[^0-9]";
+            Pattern p = Pattern.compile(regEx);
+            Matcher m = p.matcher(orderNo);
+            String ma = m.replaceAll("").trim();
+            result = paylogService.refundForWxpay(2, paylog.getTradeNo(),
+                    paylog.getOutTradeNo(), "R" + ma, totalFee, refundFee, "4");
+        } else if (paymentMethod == PaymentMethodEnum.ALIPAY) {
+            result = paylogService.refundForAlipay(paylog.getOutTradeNo(), paylog.getTradeNo(),
+                    paylog.getPayMoney());
+
+        }
+        return result;
+    }
+
+    /**
+     * 退款退货
+     *
+     * @param id 订单id
+     */
+    @Override
+    public void refundReturn(Long id) {
+        Order order = getOrder(id);
+        if (order.getOrderStatus() == OrderStatusEnum.TO_BE_SHIPPED
+                || order.getOrderStatus() == OrderStatusEnum.GOODS_TO_BE_RECEIVED
+                || order.getOrderStatus() == OrderStatusEnum.FINISHED) {
+            OrderReturnRequest orderReturnRequest = new OrderReturnRequest();
+            order.setOrderStatus(OrderStatusEnum.AFTER_SALE);
+            this.updateById(order);
+            orderReturnRequest.setOrderId(id);
+            orderReturnRequest.setRequestTime(LocalDateTime.now());
+            orderReturnRequest.setRequestType(RequestTypeEnum.REFUNDS_AND_RETURNS);
+            orderReturnRequest.setRequestReason("管理后台退款退货");
+            orderReturnRequest.setStatus(ReturnRequestStatusEnum.TO_BE_RETURNED);
+            orderReturnRequest.setAuditStatus(AuditStatusEnum.PASSED);
+            orderReturnRequestService.save(orderReturnRequest);
+        }
+
+    }
+
+    private Order getOrder(Long id) {
+        Order order = this.getById(id);
+        if (StringUtils.isNull(order)) {
+            throw new ServiceException("订单不存在");
+        }
+        return order;
+    }
+
+    /**
+     * 拍卖订单退保证金
+     *
+     * @param id 订单id
+     */
+    @Override
+    public void refundBond(Long id) {
+        Order order = getOrder(id);
+        OrderAuctionBond orderAuctionBond = orderAuctionBondMapper.selectOne(
+                Wrappers.lambdaQuery(OrderAuctionBond.class)
+                        .eq(OrderAuctionBond::getOrderId, id));
+        Paylog paylog = iPaylogService.lambdaQuery()
+                .eq(Paylog::getOutTradeNo, orderAuctionBond.getOrderNo())
+                .last("limit 1").one();
+        PaymentMethodEnum paymentMethod = orderAuctionBond.getPaymentMethod();
+        if (orderAuctionBond.getBoundStatus() == BondStatusEnum.PAID) {
+            boolean result = handleRefund(paymentMethod, paylog, orderAuctionBond.getOrderNo());
+            if (result) {
+                paylog.setState(3);// 已退款
+                orderAuctionBond.setBoundStatus(BondStatusEnum.REFUNDED);
+                iPaylogService.updateById(paylog);
+                this.updateById(order);
+            }
+        }
+    }
 }

--
Gitblit v1.7.1