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