rentaiming
2024-06-14 5bc0375793f9187e3d90b7ec6846ab4d8eac5f36
Merge remote-tracking branch 'origin/master'
1 文件已重命名
12个文件已修改
444 ■■■■ 已修改文件
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/Order.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/vo/Express100VO.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/AuctionFallbackFactory.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/AuctionClient.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/enums/OrderStatusEnum.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/inner/AuctionSalesroomController.java 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/IAuctionSalesroomService.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionGoodsServiceImpl.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionSalesroomServiceImpl.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/management/MgtOrderController.java 59 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/management/vo/MgtOrderVO.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/IOrderService.java 29 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java 254 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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 = "支付时间")
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;
}
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());
            }
        };
    }
}
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);
}
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;
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));
    }
}
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);
}
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());
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);
    }
}
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();
    }
}
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/management/vo/MgtOrderVO.java
File was renamed from ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/management/vo/MgtMallOrderVO.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;
}
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);
}
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);
            }
        }
    }
}