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