1.提交【管理后台】团购、拍卖商品立即结束退款处理
2.提交【管理后台】拍卖场管理部分接口
7个文件已添加
20个文件已修改
1018 ■■■■■ 已修改文件
pom.xml 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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/dto/OrderUpdDTO.java 92 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/OrderFallbackFactory.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/OrderClient.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/enums/BondStatusEnum.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-auction/pom.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/management/MgtAuctionGoodsController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/management/MgtAuctionSalesroomController.java 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/management/dto/MgtAuctionSalesroomQuery.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/management/vo/MgtAuctionSalesroomVO.java 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/domain/AuctionSalesroom.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/IAuctionSalesroomService.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionGoodsServiceImpl.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionSalesroomServiceImpl.java 94 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/util/CreateQrCode.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/util/MatrixToImageConfig.java 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/util/MatrixToImageWriter.java 126 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsGroupPurchaseServiceImpl.java 41 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/OrderAuctionBondController.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/OrderController.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/inner/OrderAuctionBondController.java 98 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/inner/PayController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/IOrderAuctionBondService.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/IOrderService.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderAuctionBondServiceImpl.java 41 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/PaylogServiceImpl.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pom.xml
@@ -35,6 +35,7 @@
        <minio.version>8.2.2</minio.version>
        <poi.version>4.1.2</poi.version>
        <transmittable-thread-local.version>2.14.2</transmittable-thread-local.version>
        <zxing.version>3.2.1</zxing.version>
    </properties>
    <!-- 依赖声明 -->
@@ -142,6 +143,12 @@
                <artifactId>transmittable-thread-local</artifactId>
                <version>${transmittable-thread-local.version}</version>
            </dependency>
            <!--二维码工具-->
            <dependency>
                <groupId>com.google.zxing</groupId>
                <artifactId>core</artifactId>
                <version>${zxing.version}</version>
            </dependency>
            <!-- 核心模块 -->
            <dependency>
@@ -203,13 +210,6 @@
            <dependency>
                <groupId>com.ruoyi</groupId>
                <artifactId>ruoyi-api-system</artifactId>
                <version>${ruoyi.version}</version>
            </dependency>
            <!--后台配置接口-->
            <dependency>
                <groupId>com.ruoyi</groupId>
                <artifactId>ruoyi-api-management</artifactId>
                <version>${ruoyi.version}</version>
            </dependency>
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=已取消")
    @ApiModelProperty(value = "订单状态 1=待支付 2=待发货 3=待收货 4=已完成 5=已取消")
    private OrderStatusEnum orderStatus;
    @ApiModelProperty(value = "支付时间")
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/OrderUpdDTO.java
New file
@@ -0,0 +1,92 @@
package com.ruoyi.system.api.domain.dto;
import com.ruoyi.common.core.enums.AuctionOrderTypeEnum;
import com.ruoyi.common.core.enums.OrderFromEnum;
import com.ruoyi.common.core.enums.OrderStatusEnum;
import com.ruoyi.common.core.enums.PaymentMethodEnum;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import lombok.Data;
/**
 * @author mitao
 * @date 2024/5/29
 */
@Data
public class OrderUpdDTO implements Serializable {
    private static final long serialVersionUID = -437243191517275308L;
    @ApiModelProperty(value = "订单id")
    private Long id;
    @ApiModelProperty(value = "订单编号")
    private String orderNo;
    @ApiModelProperty(value = "下单时间")
    private LocalDateTime orderTime;
    @ApiModelProperty(value = "订单来源 1=商品订单 2=秒杀订单 3=团购订单 4=拍卖订单")
    private OrderFromEnum orderFrom;
    @ApiModelProperty(value = "拍卖订单类型 1=普通拍品 2=拍卖会拍品")
    private AuctionOrderTypeEnum auctionType;
    @ApiModelProperty(value = "会员id")
    private Long memberId;
    @ApiModelProperty(value = "支付方式 1=微信 2=支付宝")
    private PaymentMethodEnum paymentMethod;
    @ApiModelProperty(value = "支付合计")
    private BigDecimal totalAmount;
    @ApiModelProperty(value = "订单状态 1=待支付 2=待发货 3=待收货 4=已完成 5=已取消")
    private OrderStatusEnum orderStatus;
    @ApiModelProperty(value = "支付时间")
    private LocalDateTime payTime;
    @ApiModelProperty(value = "取消时间")
    private LocalDateTime cancelTime;
    @ApiModelProperty(value = "订单备注")
    private String orderRemark;
    @ApiModelProperty(value = "发货时间")
    private LocalDateTime deliveryTime;
    @ApiModelProperty(value = "确认收货时间")
    private LocalDateTime receiveTime;
    @ApiModelProperty(value = "优惠金额")
    private BigDecimal discountMoney;
    @ApiModelProperty(value = "商品数量")
    private Integer goodsQuantity;
    @ApiModelProperty(value = "快递单号")
    private String courierNumber;
    @ApiModelProperty(value = "收货人姓名")
    private String receiverName;
    @ApiModelProperty(value = "收货人电话")
    private String receiverphone;
    @ApiModelProperty(value = "城市")
    private String receiverCity;
    @ApiModelProperty(value = "详细地址")
    private String receiverDetailAddress;
    @ApiModelProperty(value = "保证金")
    private BigDecimal bound;
    @ApiModelProperty(value = "开票状态 开票状态 1 待开票,2待审核,3 已开票,4 拒绝")
    private Integer invoiceStatus;
}
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/OrderFallbackFactory.java
@@ -1,11 +1,14 @@
package com.ruoyi.system.api.factory;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.enums.AuctionOrderTypeEnum;
import com.ruoyi.common.core.enums.BondStatusEnum;
import com.ruoyi.system.api.domain.Order;
import com.ruoyi.system.api.domain.OrderAuctionBond;
import com.ruoyi.system.api.domain.dto.MemberAuctionSalesroomDTO;
import com.ruoyi.system.api.domain.dto.OrderAuctionBondDTO;
import com.ruoyi.system.api.domain.dto.OrderDTO;
import com.ruoyi.system.api.domain.dto.OrderUpdDTO;
import com.ruoyi.system.api.domain.dto.RefundDTO;
import com.ruoyi.system.api.feignClient.OrderClient;
import java.util.List;
@@ -57,6 +60,24 @@
            public R<Map<String, Object>> refund(List<RefundDTO> refundDTOS, String source) {
                return R.fail("批量退款失败" + cause.getMessage());
            }
            @Override
            public R<List<OrderAuctionBond>> getOrderAuctionBondList(Long id,
                    AuctionOrderTypeEnum auctionOrderTypeEnum, BondStatusEnum bondStatusEnum,
                    String source) {
                return R.fail("获取保证金订单列表失败" + cause.getMessage());
            }
            @Override
            public R<?> updateOrderAuctionBondStatus(List<Long> ids,
                    BondStatusEnum bondStatusEnum) {
                return R.fail("批量更新保证金订单状态失败" + cause.getMessage());
            }
            @Override
            public R<?> updateOrderList(List<OrderUpdDTO> orderUpdDTOS, String source) {
                return R.fail("批量更新订单失败" + cause.getMessage());
            }
        };
    }
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/OrderClient.java
@@ -3,11 +3,14 @@
import com.ruoyi.common.core.constant.SecurityConstants;
import com.ruoyi.common.core.constant.ServiceNameConstants;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.enums.AuctionOrderTypeEnum;
import com.ruoyi.common.core.enums.BondStatusEnum;
import com.ruoyi.system.api.domain.Order;
import com.ruoyi.system.api.domain.OrderAuctionBond;
import com.ruoyi.system.api.domain.dto.MemberAuctionSalesroomDTO;
import com.ruoyi.system.api.domain.dto.OrderAuctionBondDTO;
import com.ruoyi.system.api.domain.dto.OrderDTO;
import com.ruoyi.system.api.domain.dto.OrderUpdDTO;
import com.ruoyi.system.api.domain.dto.RefundDTO;
import com.ruoyi.system.api.factory.OrderFallbackFactory;
import java.util.List;
@@ -16,8 +19,10 @@
import org.springframework.web.bind.annotation.GetMapping;
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 org.springframework.web.bind.annotation.RequestParam;
@FeignClient(contextId = "orderClient", value = ServiceNameConstants.RUOYI_ORDER, fallbackFactory = OrderFallbackFactory.class)
public interface OrderClient {
@@ -65,7 +70,47 @@
    R<List<OrderAuctionBond>> getOrderAuctionBondList(@RequestBody MemberAuctionSalesroomDTO memberAuctionSalesroomDTO,
                                                      @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
    @PostMapping("/inner/pay/refund-batch")
    /**
     * 批量退款
     *
     * @param refundDTOS 退款数据传输对象
     * @param source     内部调用标志
     * @return Map<String, Object>
     */
    @PostMapping("/pay/refund-batch")
    R<Map<String, Object>> refund(@RequestBody List<RefundDTO> refundDTOS,
            @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
    /**
     * 查询保证金订单列表
     *
     * @param id                   拍卖商品id
     * @param auctionOrderTypeEnum 拍卖类型: 普通拍品 拍卖会拍品
     * @param bondStatusEnum       保证金状态 待支付 已支付 已退款 为null则查询所有
     * @param source               内部调用标志
     * @return List<OrderAuctionBond>
     */
    @PostMapping("/order-auction-bond/list")
    R<List<OrderAuctionBond>> getOrderAuctionBondList(@RequestParam("id") Long id,
            @RequestParam("auctionOrderTypeEnum") AuctionOrderTypeEnum auctionOrderTypeEnum,
            @RequestParam(value = "bondStatusEnum", required = false) BondStatusEnum bondStatusEnum,
            @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
    /**
     * @param ids            保证金订单id列表
     * @param bondStatusEnum 保证金状态
     */
    @PutMapping("/order-auction-bond")
    R<?> updateOrderAuctionBondStatus(@RequestParam("ids") List<Long> ids,
            @RequestParam("bondStatusEnum") BondStatusEnum bondStatusEnum);
    /**
     * 批量更新订单状态
     *
     * @param orderUpdDTOS 订单更新数据传输对象列表
     * @param source       内部调用标志
     */
    @PutMapping("/order/upd-batch")
    R<?> updateOrderList(@RequestBody List<OrderUpdDTO> orderUpdDTOS,
            @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
}
ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/enums/BondStatusEnum.java
@@ -10,10 +10,10 @@
@AllArgsConstructor
public enum BondStatusEnum {
    /*订单状态 1=待发货 2=待收货 3=已完成 4=已取消*/
    /*保证金状态 1=待支付 2=已支付 3=已退款*/
    TO_PLAY(1, "待支付"),
    PAID(2, "已支付"),
    REFUNDED(3, "待收货");
    REFUNDED(3, "已退款");
    @EnumValue
    private final int code;
ruoyi-modules/ruoyi-auction/pom.xml
@@ -125,12 +125,18 @@
      <groupId>com.ruoyi</groupId>
      <artifactId>ruoyi-common-seata</artifactId>
    </dependency>
    <dependency>
      <groupId>com.ruoyi</groupId>
      <artifactId>ruoyi-modules-member</artifactId>
      <version>3.6.2</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>com.google.zxing</groupId>
      <artifactId>core</artifactId>
    </dependency>
  </dependencies>
  <build>
ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/management/MgtAuctionGoodsController.java
@@ -27,7 +27,7 @@
 * @author mitao
 * @since 2024-05-16
 */
@Api(value = "管理后台拍卖商品相关接口", tags = {"管理后台接口"})
@Api(value = "拍卖商品管理相关接口", tags = {"管理后台接口"})
@RestController
@RequiredArgsConstructor
@RequestMapping("/mgt/auction-goods")
ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/management/MgtAuctionSalesroomController.java
@@ -1,6 +1,18 @@
package com.ruoyi.auction.controller.management;
import com.ruoyi.auction.controller.management.dto.MgtAuctionSalesroomQuery;
import com.ruoyi.auction.controller.management.vo.MgtAuctionSalesroomVO;
import com.ruoyi.auction.service.IAuctionSalesroomService;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.utils.page.PageDTO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@@ -12,8 +24,42 @@
 * @author mitao
 * @since 2024-05-16
 */
@Slf4j
@RestController
@RequestMapping("/mgt/auction-salesroom")
@RequiredArgsConstructor
@Api(value = "拍卖场管理相关接口", tags = {"管理后台接口"})
public class MgtAuctionSalesroomController {
    private final IAuctionSalesroomService auctionSalesroomService;
    /**
     * 分页查询拍卖场
     *
     * @param query 拍卖场查询对象
     * @return PageDTO<MgtAuctionSalesroomVO>
     */
    @PostMapping("/page")
    @ApiOperation(value = "获取拍卖场列表的分页数据", notes = "获取拍卖场列表的分页数据")
    public R<PageDTO<MgtAuctionSalesroomVO>> getAuctionSalesroomPage(
            MgtAuctionSalesroomQuery query) {
        return R.ok(auctionSalesroomService.getAuctionSalesroomPage(query));
    }
    /**
     * 查看二维码
     *
     * @param id 拍卖场id
     * @return 二维码
     */
    @GetMapping("/qr-code/{id}")
    @ApiOperation(value = "查看二维码", notes = "查看二维码")
    public R<String> getQrCode(@PathVariable("id") Long id) {
        try {
            return R.ok(auctionSalesroomService.getQrCode(id));
        } catch (Exception e) {
            log.info("查看二维码异常", e);
            return R.fail();
        }
    }
}
ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/management/dto/MgtAuctionSalesroomQuery.java
New file
@@ -0,0 +1,41 @@
package com.ruoyi.auction.controller.management.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.core.enums.AuctionStartStatusEnum;
import com.ruoyi.common.core.enums.AuthenticationEnum;
import com.ruoyi.common.core.web.page.BasePage;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.time.LocalDateTime;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
 * @author mitao
 * @date 2024/5/29
 */
@Data
@EqualsAndHashCode(callSuper = true)
@ApiModel(value = "拍卖场查询对象", description = "拍卖场查询对象")
public class MgtAuctionSalesroomQuery extends BasePage {
    private static final long serialVersionUID = -4766716589148941634L;
    @ApiModelProperty(value = "拍卖场名称")
    private String salesroomName;
    @ApiModelProperty(value = "实名认证 0=不需实名 1=需要实名", notes = "传文字")
    private AuthenticationEnum authentication;
    @ApiModelProperty(value = "开始状态 0=预展中 1=拍卖中 2=已结束", notes = "传文字")
    private AuctionStartStatusEnum status;
    @ApiModelProperty(value = "开始时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime startTime;
    @ApiModelProperty(value = "结束时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime endTime;
}
ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/management/vo/MgtAuctionSalesroomVO.java
New file
@@ -0,0 +1,71 @@
package com.ruoyi.auction.controller.management.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.core.enums.AuctionStartStatusEnum;
import com.ruoyi.common.core.enums.AuctionTypeEnum;
import com.ruoyi.common.core.enums.AuthenticationEnum;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import lombok.Data;
/**
 * @author mitao
 * @date 2024/5/29
 */
@Data
@ApiModel(value = "拍卖场视图对象", description = "拍卖场视图对象")
public class MgtAuctionSalesroomVO implements Serializable {
    private static final long serialVersionUID = -7682015246094307938L;
    @ApiModelProperty(value = "拍卖场id")
    private Long id;
    @ApiModelProperty(value = "拍卖场名称")
    private String salesroomName;
    @ApiModelProperty(value = "开始时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime startTime;
    @ApiModelProperty(value = "结束时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime endTime;
    @ApiModelProperty(value = "拍卖时间 0=线下拍卖 1=线上线下结合")
    private AuctionTypeEnum type;
    @ApiModelProperty(value = "保证金")
    private BigDecimal bound;
    @ApiModelProperty(value = "实名认证 0=不需认证 1=需要实名")
    private AuthenticationEnum authentication;
    @ApiModelProperty(value = "拍卖场说明")
    private String description;
    @ApiModelProperty(value = "拍卖场封面图")
    private String coverPic;
    @ApiModelProperty(value = "分享标题")
    private String shareTitle;
    @ApiModelProperty(value = "分享图片")
    private String sharePic;
    @ApiModelProperty(value = "拍卖状态 0=预展中 1=拍卖中 2=已结束")
    private AuctionStartStatusEnum status;
    @ApiModelProperty(value = "拍卖场编码")
    private String auctionSalesroomNo;
    @ApiModelProperty(value = "创建时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime createTime;
    @ApiModelProperty(value = "拍卖商品数")
    private Integer auctionGoodsNum;
}
ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/domain/AuctionSalesroom.java
@@ -34,7 +34,7 @@
public class AuctionSalesroom implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty(value = "拍卖场id")
    @TableId(value = "id", type = IdType.ASSIGN_ID)
    private Long id;
ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/IAuctionSalesroomService.java
@@ -3,14 +3,16 @@
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.auction.controller.forepart.dto.AuctionSalesroomGoodsDTO;
import com.ruoyi.auction.controller.forepart.dto.ForepartAuctionBidRecordDTO;
import com.ruoyi.system.api.domain.dto.MemberAuctionSalesroomDTO;
import com.ruoyi.auction.controller.forepart.vo.ForepartAuctionSalesroomVO;
import com.ruoyi.auction.controller.forepart.vo.MemberAuctionSalesroomInfoVO;
import com.ruoyi.auction.controller.forepart.vo.MemberAuctionSalesroomVO;
import com.ruoyi.auction.controller.management.dto.MgtAuctionSalesroomQuery;
import com.ruoyi.auction.controller.management.vo.MgtAuctionSalesroomVO;
import com.ruoyi.auction.domain.AuctionSalesroom;
import com.ruoyi.common.core.utils.page.PageDTO;
import com.ruoyi.system.api.domain.AppMiniLoginVO;
import com.ruoyi.system.api.domain.dto.AppMiniLoginDTO;
import com.ruoyi.system.api.domain.dto.MemberAuctionSalesroomDTO;
import org.springframework.web.bind.annotation.RequestBody;
/**
@@ -45,4 +47,20 @@
    MemberAuctionSalesroomInfoVO getMemberAuctionSalesroomInfo( MemberAuctionSalesroomDTO memberAuctionSalesroomDTO);
    MemberAuctionSalesroomVO getMemberAuctionSalesroomSweep( MemberAuctionSalesroomDTO MemberAuctionSalesroomDTO);
    /**
     * 分页查询拍卖场
     *
     * @param query 拍卖场查询对象
     * @return PageDTO<MgtAuctionSalesroomVO>
     */
    PageDTO<MgtAuctionSalesroomVO> getAuctionSalesroomPage(MgtAuctionSalesroomQuery query);
    /**
     * 查看二维码
     *
     * @param id 拍卖场id
     * @return 二维码
     */
    String getQrCode(Long id) throws Exception;
}
ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionGoodsServiceImpl.java
@@ -15,6 +15,7 @@
import com.ruoyi.common.core.enums.AuctionOrderTypeEnum;
import com.ruoyi.common.core.enums.AuctionStartStatusEnum;
import com.ruoyi.common.core.enums.BidStatusEnum;
import com.ruoyi.common.core.enums.BondStatusEnum;
import com.ruoyi.common.core.enums.OrderFromEnum;
import com.ruoyi.common.core.exception.ServiceException;
import com.ruoyi.common.core.utils.StringUtils;
@@ -23,14 +24,18 @@
import com.ruoyi.system.api.domain.GoodsSku;
import com.ruoyi.system.api.domain.Member;
import com.ruoyi.system.api.domain.MemberAddress;
import com.ruoyi.system.api.domain.OrderAuctionBond;
import com.ruoyi.system.api.domain.dto.OrderDTO;
import com.ruoyi.system.api.domain.dto.RefundDTO;
import com.ruoyi.system.api.feignClient.GoodsSkuClient;
import com.ruoyi.system.api.feignClient.MemberClient;
import com.ruoyi.system.api.feignClient.OrderClient;
import io.seata.spring.annotation.GlobalTransactional;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;
import lombok.RequiredArgsConstructor;
@@ -202,12 +207,13 @@
            // 查询出价记录
            List<AuctionBidRecord> auctionBidRecords = auctionBidRecordService.getBidRecordByGoodsId(
                    id);
            Long memberId = null;
            if (StringUtils.isNotEmpty(auctionBidRecords)) {
                // 中标
                AuctionBidRecord auctionBidRecord = auctionBidRecords.get(0);
                auctionBidRecord.setStatus(BidStatusEnum.SUCCESSFUL);
                auctionBidRecordService.updateById(auctionBidRecord);
                memberId = auctionBidRecord.getMemberId();
                // 创建待支付订单
                OrderDTO orderDTO = new OrderDTO();
                orderDTO.setAuctionType(AuctionOrderTypeEnum.REGULAR_ITEMS);
@@ -235,9 +241,47 @@
            // 结束拍卖
            this.lambdaUpdate().set(AuctionGoods::getStartStatus, AuctionStartStatusEnum.ENDED)
                    .eq(AuctionGoods::getId, id).update();
            // 查询已支付保证基记录
            // TODO 退还保证金
            // 查询已支付保证金记录
            List<OrderAuctionBond> auctionBondList = orderClient.getOrderAuctionBondList(id,
                    AuctionOrderTypeEnum.REGULAR_ITEMS,
                    BondStatusEnum.PAID,
                    SecurityConstants.INNER).getData();
            if (StringUtils.isNotEmpty(auctionBondList)) {
                List<RefundDTO> refundDTOList = new ArrayList<>();
                for (OrderAuctionBond orderAuctionBond : auctionBondList) {
                    // 已中标需在订单完成后退保证金
                    if (orderAuctionBond.getMemberId().equals(memberId)) {
                        continue;
                    }
                    RefundDTO refundDTO = new RefundDTO();
                    refundDTO.setOrderNo(orderAuctionBond.getOrderNo());
                    refundDTO.setAmount(orderAuctionBond.getBond());
                }
                // 远程调用订单服务进行退款
                Map<String, Object> data = orderClient.refund(refundDTOList,
                        SecurityConstants.INNER).getData();
                // 处理退款返回结果
                List<String> successfulOrders = new ArrayList<>();
                List<String> failedOrders = new ArrayList<>();
          
                data.forEach((key, value) -> {
                    if ((boolean) value) {
                        successfulOrders.add(key);
                    } else {
                        failedOrders.add(key);
                    }
                });
                log.info("订单号:{},退款失败", failedOrders);
                // 退款成功的订单修改状态
                List<Long> ids = auctionBondList.stream().map(bond -> {
                    if (successfulOrders.contains(bond.getOrderNo())) {
                        return bond.getId();
                    }
                    return null;
                }).filter(Objects::nonNull).collect(Collectors.toList());
                // 远程调用订单服务修改订单状态
                orderClient.updateOrderAuctionBondStatus(ids, BondStatusEnum.PAID);
            }
        }
    }
}
ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionSalesroomServiceImpl.java
@@ -16,40 +16,46 @@
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.auction.controller.forepart.dto.AuctionSalesroomGoodsDTO;
import com.ruoyi.auction.controller.forepart.dto.ForepartAuctionBidRecordDTO;
import com.ruoyi.system.api.domain.OrderAuctionBond;
import com.ruoyi.system.api.domain.dto.MemberAuctionSalesroomDTO;
import com.ruoyi.auction.controller.forepart.vo.ForepartAuctionSalesroomGoodsVO;
import com.ruoyi.auction.controller.forepart.vo.ForepartAuctionSalesroomVO;
import com.ruoyi.auction.controller.forepart.vo.MemberAuctionSalesroomInfoVO;
import com.ruoyi.auction.controller.forepart.vo.MemberAuctionSalesroomVO;
import com.ruoyi.auction.domain.*;
import com.ruoyi.auction.controller.management.dto.MgtAuctionSalesroomQuery;
import com.ruoyi.auction.controller.management.vo.MgtAuctionSalesroomVO;
import com.ruoyi.auction.domain.AuctionBidRecord;
import com.ruoyi.auction.domain.AuctionSalesroom;
import com.ruoyi.auction.domain.AuctionSalesroomGoods;
import com.ruoyi.auction.domain.AuctionVideo;
import com.ruoyi.auction.mapper.AuctionSalesroomGoodsMapper;
import com.ruoyi.auction.mapper.AuctionSalesroomMapper;
import com.ruoyi.auction.service.*;
import com.ruoyi.auction.service.IAuctionBidRecordService;
import com.ruoyi.auction.service.IAuctionSalesroomService;
import com.ruoyi.auction.service.IAuctionVideoService;
import com.ruoyi.auction.util.CreateQrCode;
import com.ruoyi.auction.util.HttpUtils;
import com.ruoyi.common.core.constant.SecurityConstants;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.exception.ServiceException;
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.common.core.utils.page.PageDTO;
import com.ruoyi.auction.util.HttpUtils;
import com.ruoyi.system.api.domain.AppMiniLoginVO;
import com.ruoyi.system.api.domain.GoodsSku;
import com.ruoyi.system.api.domain.OrderAuctionBond;
import com.ruoyi.system.api.domain.SysUser;
import com.ruoyi.system.api.domain.dto.AppMiniLoginDTO;
import com.ruoyi.system.api.domain.dto.MemberAuctionSalesroomDTO;
import com.ruoyi.system.api.feignClient.GoodsSkuClient;
import com.ruoyi.system.api.feignClient.OrderClient;
import com.ruoyi.system.api.feignClient.SysUserClient;
import javax.annotation.Resource;
import org.apache.http.HttpResponse;
import org.apache.http.util.EntityUtils;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import javax.annotation.Resource;
import org.apache.http.HttpResponse;
import org.apache.http.util.EntityUtils;
import org.springframework.stereotype.Service;
/**
 * <p>
@@ -401,4 +407,68 @@
            HttpResponse response = HttpUtils.doPost(host, "", "POST", headers, querys, body);
            return EntityUtils.toString(response.getEntity());
        }
    /**
     * 分页查询拍卖场
     *
     * @param query 拍卖场查询对象
     * @return PageDTO<MgtAuctionSalesroomVO>
     */
    @Override
    public PageDTO<MgtAuctionSalesroomVO> getAuctionSalesroomPage(MgtAuctionSalesroomQuery query) {
        // 分页查询
        Page<AuctionSalesroom> page = this.lambdaQuery()
                .select(AuctionSalesroom::getId, AuctionSalesroom::getSalesroomName,
                        AuctionSalesroom::getCreateTime, AuctionSalesroom::getStartTime,
                        AuctionSalesroom::getEndTime, AuctionSalesroom::getType,
                        AuctionSalesroom::getAuthentication, AuctionSalesroom::getStatus)
                .like(StringUtils.isNotEmpty(query.getSalesroomName()),
                        AuctionSalesroom::getSalesroomName, query.getSalesroomName())
                .eq(StringUtils.isNotNull(query.getAuthentication()),
                        AuctionSalesroom::getAuthentication, query.getAuthentication())
                .eq(StringUtils.isNotNull(query.getStatus()), AuctionSalesroom::getStatus,
                        query.getStatus()).between(
                        StringUtils.isNotNull(query.getStartTime()) && StringUtils.isNotNull(
                                query.getEndTime()), AuctionSalesroom::getStartTime,
                        query.getStartTime(),
                        query.getEndTime())
                .page(new Page<>(query.getPageCurr(), query.getPageSize()));
        List<AuctionSalesroom> records = page.getRecords();
        if (StringUtils.isNull(records)) {
            return PageDTO.empty(page);
        }
        PageDTO<MgtAuctionSalesroomVO> auctionSalesroomVOPageDTO = PageDTO.of(page,
                MgtAuctionSalesroomVO.class);
        List<MgtAuctionSalesroomVO> list = auctionSalesroomVOPageDTO.getList();
        List<Long> auctionSalesroomIdList = list.stream().map(MgtAuctionSalesroomVO::getId)
                .collect(Collectors.toList());
        // 所有拍卖场的拍卖商品
        List<AuctionSalesroomGoods> auctionSalesroomGoods = auctionSalesroomGoodsMapper.selectList(
                Wrappers.<AuctionSalesroomGoods>lambdaQuery()
                        .in(AuctionSalesroomGoods::getAuctionSalesroomId, auctionSalesroomIdList));
        // 计算每个拍卖场所有拍品数量
        Map<Long, Integer> map = auctionSalesroomGoods.stream()
                .collect(Collectors.groupingBy(AuctionSalesroomGoods::getAuctionSalesroomId,
                        Collectors.summingInt(AuctionSalesroomGoods::getSalesroomStock)));
        for (MgtAuctionSalesroomVO mgtAuctionSalesroomVO : list) {
            Integer i = map.get(mgtAuctionSalesroomVO.getId());
            if (StringUtils.isNotNull(i)) {
                mgtAuctionSalesroomVO.setAuctionGoodsNum(i);
            }
        }
        return auctionSalesroomVOPageDTO;
    }
    /**
     * 查看二维码
     *
     * @param id 拍卖场id
     * @return 二维码
     */
    @Override
    public String getQrCode(Long id) throws Exception {
        AuctionSalesroom auctionSalesroom = this.getById(id);
        String auctionSalesroomNo = auctionSalesroom.getAuctionSalesroomNo();
        return CreateQrCode.createQRCode(auctionSalesroomNo);
    }
}
ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/util/CreateQrCode.java
New file
@@ -0,0 +1,38 @@
package com.ruoyi.auction.util;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.WriterException;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.QRCodeWriter;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.Base64;
import java.util.HashMap;
public class CreateQrCode {
    private static final String base64Url = "data:image/png;base64,";
    /**
     * 创建二维码
     *
     * @param
     * @param
     * @return
     * @throws IOException
     * @throws WriterException
     */
    public static String createQRCode(String json) throws IOException, WriterException {
        QRCodeWriter qrCodeWriter = new QRCodeWriter();
        HashMap<EncodeHintType, Object> hints = new HashMap<>();
        hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
        BitMatrix bitMatrix = qrCodeWriter.encode(json, BarcodeFormat.QR_CODE, 600, 600, hints);
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        MatrixToImageWriter.writeToStream(bitMatrix, "PNG", outputStream);
        Base64.Encoder encoder = Base64.getEncoder();
        String text = encoder.encodeToString(outputStream.toByteArray());
        return base64Url + text;
    }
}
ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/util/MatrixToImageConfig.java
New file
@@ -0,0 +1,63 @@
/*
 * Copyright 2012 ZXing authors
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.ruoyi.auction.util;
import java.awt.image.BufferedImage;
/**
 * Encapsulates custom configuration used in methods of {@link MatrixToImageWriter}.
 */
public final class MatrixToImageConfig {
    public static final int BLACK = 0xFF000000;
    public static final int WHITE = 0xFFFFFFFF;
    private final int onColor;
    private final int offColor;
    /**
     * Creates a default config with on color {@link #BLACK} and off color {@link #WHITE},
     * generating normal black-on-white barcodes.
     */
    public MatrixToImageConfig() {
        this(BLACK, WHITE);
    }
    /**
     * @param onColor  pixel on color, specified as an ARGB value as an int
     * @param offColor pixel off color, specified as an ARGB value as an int
     */
    public MatrixToImageConfig(int onColor, int offColor) {
        this.onColor = onColor;
        this.offColor = offColor;
    }
    public int getPixelOnColor() {
        return onColor;
    }
    public int getPixelOffColor() {
        return offColor;
    }
    int getBufferedImageColorModel() {
        // Use faster BINARY if colors match default
        return onColor == BLACK && offColor == WHITE ? BufferedImage.TYPE_BYTE_BINARY
                : BufferedImage.TYPE_INT_RGB;
    }
}
ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/util/MatrixToImageWriter.java
New file
@@ -0,0 +1,126 @@
/*
 * Copyright 2009 ZXing authors
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.ruoyi.auction.util;
import com.google.zxing.common.BitMatrix;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.io.OutputStream;
import java.nio.file.Path;
import javax.imageio.ImageIO;
/**
 * Writes a {@link BitMatrix} to {@link BufferedImage}, file or stream. Provided here instead of
 * core since it depends on Java SE libraries.
 *
 * @author Sean Owen
 */
public final class MatrixToImageWriter {
    private static final MatrixToImageConfig DEFAULT_CONFIG = new MatrixToImageConfig();
    private MatrixToImageWriter() {
    }
    /**
     * Renders a {@link BitMatrix} as an image, where "false" bits are rendered as white, and "true"
     * bits are rendered as black.
     */
    public static BufferedImage toBufferedImage(BitMatrix matrix) {
        return toBufferedImage(matrix, DEFAULT_CONFIG);
    }
    /**
     * As {@link #toBufferedImage(BitMatrix)}, but allows customization of the output.
     */
    public static BufferedImage toBufferedImage(BitMatrix matrix, MatrixToImageConfig config) {
        int width = matrix.getWidth();
        int height = matrix.getHeight();
        BufferedImage image = new BufferedImage(width, height, config.getBufferedImageColorModel());
        int onColor = config.getPixelOnColor();
        int offColor = config.getPixelOffColor();
        for (int x = 0; x < width; x++) {
            for (int y = 0; y < height; y++) {
                image.setRGB(x, y, matrix.get(x, y) ? onColor : offColor);
            }
        }
        return image;
    }
    /**
     * @deprecated use {@link #writeToPath(BitMatrix, String, Path)}
     */
    @Deprecated
    public static void writeToFile(BitMatrix matrix, String format, File file) throws IOException {
        writeToPath(matrix, format, file.toPath());
    }
    /**
     * Writes a {@link BitMatrix} to a file.
     *
     * @see #toBufferedImage(BitMatrix)
     */
    public static void writeToPath(BitMatrix matrix, String format, Path file) throws IOException {
        writeToPath(matrix, format, file, DEFAULT_CONFIG);
    }
    /**
     * @deprecated use {@link #writeToPath(BitMatrix, String, Path, MatrixToImageConfig)}
     */
    @Deprecated
    public static void writeToFile(BitMatrix matrix, String format, File file,
            MatrixToImageConfig config)
            throws IOException {
        writeToPath(matrix, format, file.toPath(), config);
    }
    /**
     * As {@link #writeToFile(BitMatrix, String, File)}, but allows customization of the output.
     */
    public static void writeToPath(BitMatrix matrix, String format, Path file,
            MatrixToImageConfig config)
            throws IOException {
        BufferedImage image = toBufferedImage(matrix, config);
        if (!ImageIO.write(image, format, file.toFile())) {
            throw new IOException("Could not write an image of format " + format + " to " + file);
        }
    }
    /**
     * Writes a {@link BitMatrix} to a stream.
     *
     * @see #toBufferedImage(BitMatrix)
     */
    public static void writeToStream(BitMatrix matrix, String format, OutputStream stream)
            throws IOException {
        writeToStream(matrix, format, stream, DEFAULT_CONFIG);
    }
    /**
     * As {@link #writeToStream(BitMatrix, String, OutputStream)}, but allows customization of the
     * output.
     */
    public static void writeToStream(BitMatrix matrix, String format, OutputStream stream,
            MatrixToImageConfig config)
            throws IOException {
        BufferedImage image = toBufferedImage(matrix, config);
        if (!ImageIO.write(image, format, stream)) {
            throw new IOException("Could not write an image of format " + format);
        }
    }
}
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsGroupPurchaseServiceImpl.java
@@ -7,7 +7,7 @@
import com.ruoyi.common.core.constant.SecurityConstants;
import com.ruoyi.common.core.enums.GroupStatusEnum;
import com.ruoyi.common.core.enums.ListingStatusEnum;
import com.ruoyi.common.core.enums.PaymentMethodEnum;
import com.ruoyi.common.core.enums.OrderStatusEnum;
import com.ruoyi.common.core.enums.StartStatusEnum;
import com.ruoyi.common.core.exception.ServiceException;
import com.ruoyi.common.core.utils.StringUtils;
@@ -27,11 +27,15 @@
import com.ruoyi.system.api.domain.GoodsSku;
import com.ruoyi.system.api.domain.Order;
import com.ruoyi.system.api.domain.dto.ListStatusDTO;
import com.ruoyi.system.api.domain.dto.OrderUpdDTO;
import com.ruoyi.system.api.domain.dto.RefundDTO;
import com.ruoyi.system.api.feignClient.OrderClient;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.stream.Collectors;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@@ -221,13 +225,36 @@
            //查询关联订单
            List<Order> orderList = orderClient.getOrderByGroupPurchaseId(id,
                    SecurityConstants.INNER).getData();
            for (Order order : orderList) {
                if (PaymentMethodEnum.ALIPAY.equals(order.getPaymentMethod())) {
                    //TODO 退款
            List<RefundDTO> refundDTOList = orderList.stream().map(order -> {
                RefundDTO refundDTO = new RefundDTO();
                refundDTO.setOrderNo(order.getOrderNo());
                refundDTO.setAmount(order.getTotalAmount());
                return refundDTO;
            }).collect(Collectors.toList());
            Map<String, Object> data = orderClient.refund(refundDTOList,
                    SecurityConstants.INNER).getData();
            if (StringUtils.isNotEmpty(data)) {
                // 处理退款返回结果
                List<String> successfulOrders = new ArrayList<>();
                List<String> failedOrders = new ArrayList<>();
                data.forEach((key, value) -> {
                    if ((boolean) value) {
                        successfulOrders.add(key);
                    } else {
                        failedOrders.add(key);
                }
                if (PaymentMethodEnum.WECHAT.equals(order.getPaymentMethod())) {
                    //TODO 退款
                }
                });
                // 处理退款结果
                List<Order> updateOrderList = orderList.stream()
                        .filter(order -> successfulOrders.contains(order.getOrderNo()))
                        .peek(order -> {
                            order.setOrderStatus(OrderStatusEnum.CANCELED);
                        }).collect(Collectors.toList());
                List<OrderUpdDTO> orderUpdDTOS = BeanUtils.copyList(updateOrderList,
                        OrderUpdDTO.class);
                orderClient.updateOrderList(orderUpdDTOS, SecurityConstants.INNER);
            }
        } else {
            this.lambdaUpdate()
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/OrderAuctionBondController.java
@@ -1,23 +1,10 @@
package com.ruoyi.order.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.security.annotation.InnerAuth;
import com.ruoyi.system.api.domain.OrderAuctionBond;
import com.ruoyi.order.service.IOrderAuctionBondService;
import com.ruoyi.system.api.domain.dto.MemberAuctionSalesroomDTO;
import com.ruoyi.system.api.domain.dto.OrderAuctionBondDTO;
import javax.annotation.Resource;
import org.apache.poi.ss.formula.functions.T;
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;
import java.util.List;
/**
 * <p>
@@ -34,31 +21,6 @@
    @Resource
    private IOrderAuctionBondService  iOrderAuctionBondService;
    /**
     * 获取当前商品信息
     *
     */
    @InnerAuth
    @PostMapping("/getOrderAuctionBond")
    @ResponseBody
    public R<T> getOrderAuctionBond(@RequestBody OrderAuctionBondDTO orderAuctionBondDTO) {
        iOrderAuctionBondService.getOrderAuctionBond(orderAuctionBondDTO);
        return R.ok();
    }
    @InnerAuth
    @PostMapping("/getOrderAuctionBondList")
    @ResponseBody
    public R<List<OrderAuctionBond>> getOrderAuctionBondList(@RequestBody MemberAuctionSalesroomDTO memberAuctionSalesroomDTO) {
        LambdaQueryWrapper<OrderAuctionBond> wrapper= Wrappers.lambdaQuery();
        wrapper.eq(OrderAuctionBond::getMemberId,memberAuctionSalesroomDTO.getMemberId());
        wrapper.eq(OrderAuctionBond::getAuctionSalesroomId,memberAuctionSalesroomDTO.getAuctionSalesroomId());
        wrapper.eq(OrderAuctionBond::getDelFlag,0);
        List<OrderAuctionBond> list = iOrderAuctionBondService.list(wrapper);
        return R.ok(list);
    }
}
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/OrderController.java
@@ -2,10 +2,12 @@
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.utils.page.BeanUtils;
import com.ruoyi.common.security.annotation.InnerAuth;
import com.ruoyi.order.service.IOrderService;
import com.ruoyi.system.api.domain.Order;
import com.ruoyi.system.api.domain.dto.OrderDTO;
import com.ruoyi.system.api.domain.dto.OrderUpdDTO;
import java.util.List;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@@ -13,6 +15,7 @@
import org.springframework.web.bind.annotation.GetMapping;
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.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@@ -78,4 +81,16 @@
    R<List<Order>> getOrderByGroupPurchaseId(@PathVariable("id") Long id) {
        return R.ok(orderService.getOrderByGroupPurchaseId(id));
    }
    /**
     * 批量更新订单状态
     *
     * @param orderUpdDTOS 订单更新数据传输对象列表
     */
    @PutMapping("/upd-batch")
    R<?> updateOrderList(@RequestBody List<OrderUpdDTO> orderUpdDTOS) {
        List<Order> orders = BeanUtils.copyList(orderUpdDTOS, Order.class);
        orderService.updateBatchById(orders);
        return R.ok();
    }
}
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/inner/OrderAuctionBondController.java
New file
@@ -0,0 +1,98 @@
package com.ruoyi.order.controller.inner;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.enums.AuctionOrderTypeEnum;
import com.ruoyi.common.core.enums.BondStatusEnum;
import com.ruoyi.common.security.annotation.InnerAuth;
import com.ruoyi.order.service.IOrderAuctionBondService;
import com.ruoyi.system.api.domain.OrderAuctionBond;
import com.ruoyi.system.api.domain.dto.MemberAuctionSalesroomDTO;
import com.ruoyi.system.api.domain.dto.OrderAuctionBondDTO;
import java.util.List;
import javax.annotation.Resource;
import org.apache.poi.ss.formula.functions.T;
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.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
/**
 * <p>
 * 拍卖保证金表 前端控制器
 * </p>
 *
 * @author mitao
 * @since 2024-05-16
 */
@RestController
@RequestMapping("/order-auction-bond")
public class OrderAuctionBondController {
    @Resource
    private IOrderAuctionBondService iOrderAuctionBondService;
    /**
     * 获取当前商品信息
     */
    @InnerAuth
    @PostMapping("/getOrderAuctionBond")
    @ResponseBody
    public R<T> getOrderAuctionBond(@RequestBody OrderAuctionBondDTO orderAuctionBondDTO) {
        iOrderAuctionBondService.getOrderAuctionBond(orderAuctionBondDTO);
        return R.ok();
    }
    @InnerAuth
    @PostMapping("/getOrderAuctionBondList")
    @ResponseBody
    public R<List<OrderAuctionBond>> getOrderAuctionBondList(
            @RequestBody MemberAuctionSalesroomDTO memberAuctionSalesroomDTO) {
        LambdaQueryWrapper<OrderAuctionBond> wrapper = Wrappers.lambdaQuery();
        wrapper.eq(OrderAuctionBond::getMemberId, memberAuctionSalesroomDTO.getMemberId());
        wrapper.eq(OrderAuctionBond::getAuctionSalesroomId,
                memberAuctionSalesroomDTO.getAuctionSalesroomId());
        wrapper.eq(OrderAuctionBond::getDelFlag, 0);
        List<OrderAuctionBond> list = iOrderAuctionBondService.list(wrapper);
        return R.ok(list);
    }
    /**
     * 查询保证金订单列表
     *
     * @param id                   拍卖商品id
     * @param auctionOrderTypeEnum 拍卖类型: 普通拍品 拍卖会拍品
     * @param bondStatusEnum       保证金状态 待支付 已支付 已退款 为null则查询所有
     * @return List<OrderAuctionBond>
     */
    @InnerAuth
    @PostMapping("/list")
    public R<List<OrderAuctionBond>> getOrderAuctionBondList(@RequestParam("id") Long id,
            @RequestParam("auctionOrderTypeEnum") AuctionOrderTypeEnum auctionOrderTypeEnum,
            @RequestParam(value = "bondStatusEnum", required = false) BondStatusEnum bondStatusEnum) {
        return R.ok(iOrderAuctionBondService.getOrderAuctionBondList(id, auctionOrderTypeEnum,
                bondStatusEnum));
    }
    /**
     * 批量更新保证金订单状态
     *
     * @param ids            保证金订单id列表
     * @param bondStatusEnum 保证金状态
     */
    @InnerAuth
    @PutMapping
    R<?> updateOrderAuctionBondStatus(@RequestParam("ids") List<Long> ids,
            @RequestParam("bondStatusEnum") BondStatusEnum bondStatusEnum) {
        iOrderAuctionBondService.updateOrderAuctionBondStatus(ids, bondStatusEnum);
        return R.ok();
    }
}
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/inner/PayController.java
@@ -18,7 +18,7 @@
 * @date 2024/5/29
 */
@RestController
@RequestMapping("/inner/pay")
@RequestMapping("/pay")
@RequiredArgsConstructor
public class PayController {
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/IOrderAuctionBondService.java
@@ -1,9 +1,12 @@
package com.ruoyi.order.service;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.system.api.domain.OrderAuctionBond;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.enums.AuctionOrderTypeEnum;
import com.ruoyi.common.core.enums.BondStatusEnum;
import com.ruoyi.system.api.domain.OrderAuctionBond;
import com.ruoyi.system.api.domain.dto.OrderAuctionBondDTO;
import java.util.List;
import org.apache.poi.ss.formula.functions.T;
/**
@@ -17,4 +20,23 @@
public interface IOrderAuctionBondService extends IService<OrderAuctionBond> {
   R<T> getOrderAuctionBond(OrderAuctionBondDTO orderAuctionBondDTO);
    /**
     * 查询保证金订单列表
     *
     * @param id                   拍卖商品id
     * @param auctionOrderTypeEnum 拍卖类型: 普通拍品 拍卖会拍品
     * @param bondStatusEnum       保证金状态 待支付 已支付 已退款 为null则查询所有
     * @return List<OrderAuctionBond>
     */
    List<OrderAuctionBond> getOrderAuctionBondList(Long id,
            AuctionOrderTypeEnum auctionOrderTypeEnum,
            BondStatusEnum bondStatusEnum);
    /**
     * 批量更新保证金订单状态
     *
     * @param ids            保证金订单id列表
     * @param bondStatusEnum 保证金状态
     */
    void updateOrderAuctionBondStatus(List<Long> ids, BondStatusEnum bondStatusEnum);
}
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/IOrderService.java
@@ -40,4 +40,5 @@
     * @return 订单列表
     */
    List<Order> getOrderByGroupPurchaseId(Long id);
}
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderAuctionBondServiceImpl.java
@@ -2,20 +2,22 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.system.api.domain.OrderAuctionBond;
import com.ruoyi.common.core.enums.AuctionOrderTypeEnum;
import com.ruoyi.common.core.enums.BondStatusEnum;
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.order.domain.pojo.Paylog;
import com.ruoyi.order.mapper.OrderAuctionBondMapper;
import com.ruoyi.order.service.IOrderAuctionBondService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.order.service.IPaylogService;
import com.ruoyi.order.util.SinataUtil;
import com.ruoyi.system.api.domain.OrderAuctionBond;
import com.ruoyi.system.api.domain.dto.OrderAuctionBondDTO;
import java.util.List;
import javax.annotation.Resource;
import org.apache.poi.ss.formula.functions.T;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
/**
 * <p>
@@ -69,4 +71,33 @@
        }
        return R.ok();
    }
    /**
     * 查询保证金订单列表
     *
     * @param id                   拍卖商品id
     * @param auctionOrderTypeEnum 拍卖类型: 普通拍品 拍卖会拍品
     * @param bondStatusEnum       保证金状态 待支付 已支付 已退款 为null则查询所有
     * @return List<OrderAuctionBond>
     */
    @Override
    public List<OrderAuctionBond> getOrderAuctionBondList(Long id,
            AuctionOrderTypeEnum auctionOrderTypeEnum, BondStatusEnum bondStatusEnum) {
        return this.lambdaQuery().eq(OrderAuctionBond::getAuctionGoodsId, id)
                .eq(OrderAuctionBond::getBondType, auctionOrderTypeEnum).eq(
                        StringUtils.isNotNull(bondStatusEnum), OrderAuctionBond::getBoundStatus,
                        bondStatusEnum).list();
    }
    /**
     * 批量更新保证金订单状态
     *
     * @param ids            保证金订单id列表
     * @param bondStatusEnum 保证金状态
     */
    @Override
    public void updateOrderAuctionBondStatus(List<Long> ids, BondStatusEnum bondStatusEnum) {
        this.lambdaUpdate().set(OrderAuctionBond::getBoundStatus, bondStatusEnum)
                .in(OrderAuctionBond::getId, ids).update();
    }
}
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/PaylogServiceImpl.java
@@ -31,7 +31,6 @@
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.Set;
import java.util.function.Function;
@@ -464,22 +463,6 @@
            iPaylogService.updateBatchById(updList);
        }
        return map;
    }
    public static void main(String[] args) {
        Map<String, Object> map = new HashMap<>();
        map.put("1", true);
        map.put("2", false);
        map.put("3", true);
        map.put("4", false);
        map.put("5", true);
        List<String> collect = map.entrySet().stream().map(entry -> {
            if (!(boolean) entry.getValue()) {
                return entry.getKey();
            }
            return null;
        }).filter(Objects::nonNull).collect(Collectors.toList());
        System.out.println(collect);
    }
    private Boolean handleRefund(Paylog paylog, BigDecimal amount,