From 855921d253a4854d4fb78b83bfcf7c6e93b3f68d Mon Sep 17 00:00:00 2001 From: mitao <2763622819@qq.com> Date: 星期三, 29 五月 2024 19:43:50 +0800 Subject: [PATCH] 1.提交【管理后台】团购、拍卖商品立即结束退款处理 2.提交【管理后台】拍卖场管理部分接口 --- ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/management/MgtAuctionGoodsController.java | 2 ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/management/MgtAuctionSalesroomController.java | 46 ++ ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/PaylogServiceImpl.java | 17 ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionGoodsServiceImpl.java | 52 ++ ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderAuctionBondServiceImpl.java | 41 ++ ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionSalesroomServiceImpl.java | 94 ++++ ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/management/dto/MgtAuctionSalesroomQuery.java | 41 ++ ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/Order.java | 2 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsGroupPurchaseServiceImpl.java | 43 + pom.xml | 14 ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/domain/AuctionSalesroom.java | 2 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/inner/OrderAuctionBondController.java | 98 +++++ ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/util/MatrixToImageConfig.java | 63 +++ ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/IOrderAuctionBondService.java | 26 + ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/IOrderService.java | 1 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/OrderAuctionBondController.java | 38 -- ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/util/CreateQrCode.java | 38 ++ ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/util/MatrixToImageWriter.java | 126 +++++++ ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/inner/PayController.java | 2 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/OrderFallbackFactory.java | 21 + ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/OrderUpdDTO.java | 92 +++++ ruoyi-modules/ruoyi-auction/pom.xml | 6 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/OrderClient.java | 47 ++ ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/OrderController.java | 15 ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/IAuctionSalesroomService.java | 20 + ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/enums/BondStatusEnum.java | 4 ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/management/vo/MgtAuctionSalesroomVO.java | 71 +++ 27 files changed, 921 insertions(+), 101 deletions(-) diff --git a/pom.xml b/pom.xml index 84c2ec1..3f6d66a 100644 --- a/pom.xml +++ b/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> 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 2809b2c..c5ee7ad 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=已取消") + @ApiModelProperty(value = "订单状态 1=待支付 2=待发货 3=待收货 4=已完成 5=已取消") private OrderStatusEnum orderStatus; @ApiModelProperty(value = "支付时间") diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/OrderUpdDTO.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/OrderUpdDTO.java new file mode 100644 index 0000000..6920211 --- /dev/null +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/OrderUpdDTO.java @@ -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; + +} diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/OrderFallbackFactory.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/OrderFallbackFactory.java index c067433..1c118f9 100644 --- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/OrderFallbackFactory.java +++ b/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()); + } }; } diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/OrderClient.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/OrderClient.java index 7ce3c03..0733bcc 100644 --- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/OrderClient.java +++ b/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); } diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/enums/BondStatusEnum.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/enums/BondStatusEnum.java index 3fb6ec3..c567ec0 100644 --- a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/enums/BondStatusEnum.java +++ b/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; diff --git a/ruoyi-modules/ruoyi-auction/pom.xml b/ruoyi-modules/ruoyi-auction/pom.xml index d8c7873..55dc172 100644 --- a/ruoyi-modules/ruoyi-auction/pom.xml +++ b/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> diff --git a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/management/MgtAuctionGoodsController.java b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/management/MgtAuctionGoodsController.java index c9bf4ca..f8e18fc 100644 --- a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/management/MgtAuctionGoodsController.java +++ b/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") diff --git a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/management/MgtAuctionSalesroomController.java b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/management/MgtAuctionSalesroomController.java index 1e4f465..8fe2c7b 100644 --- a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/management/MgtAuctionSalesroomController.java +++ b/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(); + } + } } diff --git a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/management/dto/MgtAuctionSalesroomQuery.java b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/management/dto/MgtAuctionSalesroomQuery.java new file mode 100644 index 0000000..93244fa --- /dev/null +++ b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/management/dto/MgtAuctionSalesroomQuery.java @@ -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; + +} diff --git a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/management/vo/MgtAuctionSalesroomVO.java b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/management/vo/MgtAuctionSalesroomVO.java new file mode 100644 index 0000000..03312d1 --- /dev/null +++ b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/management/vo/MgtAuctionSalesroomVO.java @@ -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; +} diff --git a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/domain/AuctionSalesroom.java b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/domain/AuctionSalesroom.java index 0c2355b..71a3e78 100644 --- a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/domain/AuctionSalesroom.java +++ b/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; 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 9775dfa..3b64f66 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 @@ -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; } 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 089761a..f97c276 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 @@ -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); + } } } } 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 4a89185..48111e6 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 @@ -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); + } } diff --git a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/util/CreateQrCode.java b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/util/CreateQrCode.java new file mode 100644 index 0000000..095f5a3 --- /dev/null +++ b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/util/CreateQrCode.java @@ -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; + } +} \ No newline at end of file diff --git a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/util/MatrixToImageConfig.java b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/util/MatrixToImageConfig.java new file mode 100644 index 0000000..96a1edf --- /dev/null +++ b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/util/MatrixToImageConfig.java @@ -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; + } + +} \ No newline at end of file diff --git a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/util/MatrixToImageWriter.java b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/util/MatrixToImageWriter.java new file mode 100644 index 0000000..1210f6c --- /dev/null +++ b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/util/MatrixToImageWriter.java @@ -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); + } + } + +} \ No newline at end of file diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsGroupPurchaseServiceImpl.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsGroupPurchaseServiceImpl.java index a51d3a5..6423dd4 100644 --- a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsGroupPurchaseServiceImpl.java +++ b/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 退款 - } - if (PaymentMethodEnum.WECHAT.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); + } + }); + // 处理退款结果 + 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() diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/OrderAuctionBondController.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/OrderAuctionBondController.java index 617fa84..b65c001 100644 --- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/OrderAuctionBondController.java +++ b/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); - - } } diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/OrderController.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/OrderController.java index 4219436..5814434 100644 --- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/OrderController.java +++ b/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(); + } } diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/inner/OrderAuctionBondController.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/inner/OrderAuctionBondController.java new file mode 100644 index 0000000..c91bcc1 --- /dev/null +++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/inner/OrderAuctionBondController.java @@ -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(); + } + +} diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/inner/PayController.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/inner/PayController.java index e4c6465..99c0cdb 100644 --- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/inner/PayController.java +++ b/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 { diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/IOrderAuctionBondService.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/IOrderAuctionBondService.java index af9697b..0e5e81c 100644 --- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/IOrderAuctionBondService.java +++ b/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); } 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 9fed17b..d4c3098 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 @@ -40,4 +40,5 @@ * @return 订单列表 */ List<Order> getOrderByGroupPurchaseId(Long id); + } diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderAuctionBondServiceImpl.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderAuctionBondServiceImpl.java index 7ac01fd..5cec9be 100644 --- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderAuctionBondServiceImpl.java +++ b/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(); + } } diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/PaylogServiceImpl.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/PaylogServiceImpl.java index c7f3ed1..24d6073 100644 --- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/PaylogServiceImpl.java +++ b/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, -- Gitblit v1.7.1