From f8b0501988a78ff919819a2d7c4cf21d0bbca17b Mon Sep 17 00:00:00 2001 From: quyixiao <2621048238@qq.com> Date: Sun, 9 Nov 2025 14:43:21 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E6=82=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entity/vv/VvTradeOrderLineEntity.java | 42 +++++- .../request/mm/enums/RefundTypeEnums.java | 34 +++++ .../alibaba/request/mm/order/VvCancelDTO.java | 23 ++++ .../request/mm/order/VvDeliveredDTO.java | 5 +- .../mm/reverse/AppliyReverseRequest.java | 9 ++ .../heyu/api/service/ReverseOrderService.java | 16 +++ .../service/impl/ReverseOrderServiceImpl.java | 126 ++++++++++++++++++ .../controller/mm/AdminOrderController.java | 46 ++++++- .../controller/vv/AppReverseController.java | 84 ------------ .../delay/handler/WeiXinPayCloseHandler.java | 1 - 10 files changed, 288 insertions(+), 98 deletions(-) create mode 100644 api-third/src/main/java/com/heyu/api/alibaba/request/mm/enums/RefundTypeEnums.java create mode 100644 api-third/src/main/java/com/heyu/api/alibaba/request/mm/order/VvCancelDTO.java create mode 100644 api-third/src/main/java/com/heyu/api/service/ReverseOrderService.java create mode 100644 api-third/src/main/java/com/heyu/api/service/impl/ReverseOrderServiceImpl.java diff --git a/api-mapper/src/main/java/com/heyu/api/data/entity/vv/VvTradeOrderLineEntity.java b/api-mapper/src/main/java/com/heyu/api/data/entity/vv/VvTradeOrderLineEntity.java index 4622b44..ef0b685 100644 --- a/api-mapper/src/main/java/com/heyu/api/data/entity/vv/VvTradeOrderLineEntity.java +++ b/api-mapper/src/main/java/com/heyu/api/data/entity/vv/VvTradeOrderLineEntity.java @@ -1,12 +1,12 @@ package com.heyu.api.data.entity.vv; + import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; -import com.lz.mybatis.plugin.annotations.AS; import java.math.BigDecimal; -import java.util.Date;import java.util.Date; +import java.util.Date; /** *购物车 * @author quyixiao @@ -84,6 +84,8 @@ private static final long serialVersionUID = 1L; public final static String delivered_user = CLASS_NAME + "delivered_user"; // delivered的用户 public final static String shipping_user = CLASS_NAME + "shipping_user"; // shipping的用户 public final static String unpack_user = CLASS_NAME + "unpack_user"; // unpack的用户 + public final static String gmt_cancel = CLASS_NAME + "gmt_cancel"; // 订单取消时间 + public final static String cancel_user = CLASS_NAME + "cancel_user"; // 订单取消用户 // @TableId(value = "id", type = IdType.AUTO) private Long id; @@ -211,6 +213,10 @@ private static final long serialVersionUID = 1L; private String shippingUser; //unpack的用户 private String unpackUser; + //订单取消时间 + private Date gmtCancel; + //订单取消用户 + private String cancelUser; /** * * @return @@ -1156,6 +1162,36 @@ private static final long serialVersionUID = 1L; this.unpackUser = unpackUser; } + /** + * 订单取消时间 + * @return + */ + public Date getGmtCancel() { + return gmtCancel; + } + /** + * 订单取消时间 + * @param gmtCancel + */ + public void setGmtCancel(Date gmtCancel) { + this.gmtCancel = gmtCancel; + } + + /** + * 订单取消用户 + * @return + */ + public String getCancelUser() { + return cancelUser; + } + /** + * 订单取消用户 + * @param cancelUser + */ + public void setCancelUser(String cancelUser) { + this.cancelUser = cancelUser; + } + @Override public String toString() { return "VvTradeOrderLineEntity{" + @@ -1222,6 +1258,8 @@ private static final long serialVersionUID = 1L; ",deliveredUser=" + deliveredUser + ",shippingUser=" + shippingUser + ",unpackUser=" + unpackUser + + ",gmtCancel=" + gmtCancel + + ",cancelUser=" + cancelUser + "}"; } } \ No newline at end of file diff --git a/api-third/src/main/java/com/heyu/api/alibaba/request/mm/enums/RefundTypeEnums.java b/api-third/src/main/java/com/heyu/api/alibaba/request/mm/enums/RefundTypeEnums.java new file mode 100644 index 0000000..1b5488f --- /dev/null +++ b/api-third/src/main/java/com/heyu/api/alibaba/request/mm/enums/RefundTypeEnums.java @@ -0,0 +1,34 @@ +package com.heyu.api.alibaba.request.mm.enums; + +public enum RefundTypeEnums { + + only_refund(1,"仅退款"), + return_refund(2,"退货退款"), + + ; + + + + private Integer code; + private String desc; + RefundTypeEnums(Integer code, String desc) { + this.code = code; + this.desc = desc; + } + + public Integer getCode() { + return code; + } + + public void setCode(Integer code) { + this.code = code; + } + + public String getDesc() { + return desc; + } + + public void setDesc(String desc) { + this.desc = desc; + } +} diff --git a/api-third/src/main/java/com/heyu/api/alibaba/request/mm/order/VvCancelDTO.java b/api-third/src/main/java/com/heyu/api/alibaba/request/mm/order/VvCancelDTO.java new file mode 100644 index 0000000..2183c25 --- /dev/null +++ b/api-third/src/main/java/com/heyu/api/alibaba/request/mm/order/VvCancelDTO.java @@ -0,0 +1,23 @@ +package com.heyu.api.alibaba.request.mm.order; + + +import com.heyu.api.alibaba.request.mm.AdminBaseDTO; +import lombok.Data; + +@Data +public class VvCancelDTO extends AdminBaseDTO { + + /*** + * 订单取消 + */ + private Long tradeOrderId; + + + /*** + * 订单取消原因 + */ + private String cancelReason; + +} + + diff --git a/api-third/src/main/java/com/heyu/api/alibaba/request/mm/order/VvDeliveredDTO.java b/api-third/src/main/java/com/heyu/api/alibaba/request/mm/order/VvDeliveredDTO.java index a4d5200..4a8f6b3 100644 --- a/api-third/src/main/java/com/heyu/api/alibaba/request/mm/order/VvDeliveredDTO.java +++ b/api-third/src/main/java/com/heyu/api/alibaba/request/mm/order/VvDeliveredDTO.java @@ -4,15 +4,12 @@ package com.heyu.api.alibaba.request.mm.order; import com.heyu.api.alibaba.request.mm.AdminBaseDTO; import lombok.Data; -import java.util.List; - @Data public class VvDeliveredDTO extends AdminBaseDTO { - /*** * 子订单号 */ - private List tradeOrderLineIds; + private String trackNumber; diff --git a/api-third/src/main/java/com/heyu/api/alibaba/request/mm/reverse/AppliyReverseRequest.java b/api-third/src/main/java/com/heyu/api/alibaba/request/mm/reverse/AppliyReverseRequest.java index a2631cc..d355fc2 100644 --- a/api-third/src/main/java/com/heyu/api/alibaba/request/mm/reverse/AppliyReverseRequest.java +++ b/api-third/src/main/java/com/heyu/api/alibaba/request/mm/reverse/AppliyReverseRequest.java @@ -10,17 +10,26 @@ import java.util.List; @Data public class AppliyReverseRequest extends AppBaseRequest { + /** + * 后台登录的用户名 + */ + + + private String userName; + /*** * 物流单号 */ private String trackNumber; + /*** * 申请退款金额,如果卖家没有选择修改,则不需要传 */ private BigDecimal refundAmount; + /*** * 退款类型 1 仅退款, 2 退款退货 */ diff --git a/api-third/src/main/java/com/heyu/api/service/ReverseOrderService.java b/api-third/src/main/java/com/heyu/api/service/ReverseOrderService.java new file mode 100644 index 0000000..9eace59 --- /dev/null +++ b/api-third/src/main/java/com/heyu/api/service/ReverseOrderService.java @@ -0,0 +1,16 @@ +package com.heyu.api.service; + +import com.heyu.api.alibaba.request.mm.reverse.AppliyReverseRequest; +import com.heyu.api.data.entity.vv.VvTradeOrderLineEntity; +import com.heyu.api.data.utils.R; + +import java.util.List; + +public interface ReverseOrderService { + + + + + R createReverseOrder(List vvTradeOrderLineEntityList, AppliyReverseRequest appliyReverseRequest) ; + +} diff --git a/api-third/src/main/java/com/heyu/api/service/impl/ReverseOrderServiceImpl.java b/api-third/src/main/java/com/heyu/api/service/impl/ReverseOrderServiceImpl.java new file mode 100644 index 0000000..8d16e59 --- /dev/null +++ b/api-third/src/main/java/com/heyu/api/service/impl/ReverseOrderServiceImpl.java @@ -0,0 +1,126 @@ +package com.heyu.api.service.impl; + + +import com.heyu.api.alibaba.request.mm.enums.ReverseStatusEnums; +import com.heyu.api.alibaba.request.mm.enums.ReverseUploadSceneEnums; +import com.heyu.api.alibaba.request.mm.order.ResourceDTO; +import com.heyu.api.alibaba.request.mm.reverse.AppliyReverseRequest; +import com.heyu.api.data.dao.vv.*; +import com.heyu.api.data.entity.vv.*; +import com.heyu.api.data.utils.BigDecimalUtil; +import com.heyu.api.data.utils.R; +import com.heyu.api.data.utils.SanUtils; +import com.heyu.api.service.ReverseOrderService; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections.CollectionUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; +import java.util.Map; + +@Service +@Slf4j +public class ReverseOrderServiceImpl implements ReverseOrderService { + + @Autowired + private VvTradeOrderDao vvTradeOrderDao; + + + @Autowired + private VvReverseOrderLineDao vvReverseOrderLineDao; + + @Autowired + private VvReverseOrderDao vvReverseOrderDao; + + @Autowired + private VvTradeOrderLineDao vvTradeOrderLineDao; + + @Autowired + private VvReverseOrderProveDao vvReverseOrderProveDao; + + @Override + public R createReverseOrder(List vvTradeOrderLineEntityList, AppliyReverseRequest appliyReverseRequest) { + List tradeOrderLineIds = SanUtils.list2list(vvTradeOrderLineEntityList, VvTradeOrderLineEntity::getId); + Map vvTradeOrderLineEntityMap = SanUtils.list2Map(vvTradeOrderLineEntityList, VvTradeOrderLineEntity::getId); + + Long tradeOrderId = SanUtils.findAnyNotNull(vvTradeOrderLineEntityList, VvTradeOrderLineEntity::getTradeOrderId); + + VvTradeOrderEntity vvTradeOrderEntity = vvTradeOrderDao.selectVvTradeOrderById(tradeOrderId); + VvReverseOrderEntity vvReverseOrderEntity = new VvReverseOrderEntity(); + vvReverseOrderEntity.setTradeOrderId(vvTradeOrderEntity.getId()); + vvReverseOrderEntity.setStatus(ReverseStatusEnums.buyer_apply_reverse_wait_seller_agree.getStatus()); + + BigDecimal realRefundAmount = appliyReverseRequest.getRefundAmount() == null + ? SanUtils.sum(vvTradeOrderLineEntityList, VvTradeOrderLineEntity::getPromotionPrice) + : appliyReverseRequest.getRefundAmount(); + // 设置退款金额 + vvReverseOrderEntity.setRefundAmount(realRefundAmount); + BigDecimal originRefundAmount = SanUtils.sum(vvTradeOrderLineEntityList, VvTradeOrderLineEntity::getPromotionPrice); // 本来应该退款金额 + if (realRefundAmount.compareTo(originRefundAmount) > 0) { + return R.error("退款金额不能超过商品总额度"); + } + + vvReverseOrderEntity.setRefundTradeOrderLineCount(tradeOrderLineIds.size()); + vvReverseOrderEntity.setRefundType(appliyReverseRequest.getRefundType()); + vvReverseOrderEntity.setGmtBuyerApplyRefund(new Date()); + vvReverseOrderEntity.setCreateTimestamp(System.currentTimeMillis()); + vvReverseOrderEntity.setModifyTimestamp(System.currentTimeMillis()); + vvReverseOrderEntity.setRefundCount(tradeOrderLineIds.size()); + vvReverseOrderEntity.setGmtBuyerApplyRefund(new Date()); + vvReverseOrderEntity.setRefundReason(appliyReverseRequest.getRefundReason()); + vvReverseOrderDao.insertOrUpdateVvReverseOrder(vvReverseOrderEntity); + + BigDecimal preSum = BigDecimal.ZERO; + for (int i = 0; i < tradeOrderLineIds.size(); i++) { + Long tradeOrderLineId = tradeOrderLineIds.get(i); + VvTradeOrderLineEntity vvTradeOrderLineEntity = vvTradeOrderLineEntityMap.get(tradeOrderLineId); + VvReverseOrderLineEntity vvReverseOrderLineEntity = new VvReverseOrderLineEntity(); + vvReverseOrderLineEntity.setReverseOrderId(vvReverseOrderEntity.getId()); + vvReverseOrderLineEntity.setTradeOrderId(vvTradeOrderEntity.getId()); + vvReverseOrderLineEntity.setTradeOrderLineId(tradeOrderLineId); + if (appliyReverseRequest.getRefundAmount() == null) { + vvReverseOrderLineEntity.setRefundAmount(vvTradeOrderLineEntity.getPromotionPrice()); + } else { + if (i == tradeOrderLineIds.size() - 1) { + BigDecimal lastRefundAmount = BigDecimalUtil.subtract(realRefundAmount, preSum); + vvReverseOrderLineEntity.setRefundAmount(lastRefundAmount); + } else { + BigDecimal allPrice = BigDecimalUtil.multiply(vvTradeOrderLineEntity.getPromotionPrice(), realRefundAmount); + BigDecimal subLineRefundAmount = BigDecimalUtil.divide(allPrice, originRefundAmount); + preSum = preSum.add(subLineRefundAmount); + vvReverseOrderLineEntity.setRefundAmount(subLineRefundAmount); + } + } + vvReverseOrderLineEntity.setSellerId(vvTradeOrderLineEntity.getSellerId()); + vvReverseOrderLineEntity.setSellerName(vvTradeOrderLineEntity.getSellerName()); + vvReverseOrderLineEntity.setProductId(vvTradeOrderLineEntity.getProductId()); + vvReverseOrderLineEntity.setProductName(vvTradeOrderLineEntity.getProductName()); + vvReverseOrderLineEntity.setSkuImageUrl(vvTradeOrderLineEntity.getSkuImageUrl()); + // 保存逆向子单 + vvReverseOrderLineDao.insertVvReverseOrderLine(vvReverseOrderLineEntity); + + // 设置退款相关的东西 + vvTradeOrderLineEntity.setRefundCount(1); + vvTradeOrderLineEntity.setRefundAmount(vvReverseOrderLineEntity.getRefundAmount()); + // 更新子单的逆向状态 + vvTradeOrderLineEntity.setReverseStatus(ReverseStatusEnums.buyer_apply_reverse_wait_seller_agree.getStatus()); + vvTradeOrderLineDao.updateVvTradeOrderLineById(vvTradeOrderLineEntity); + } + + if (CollectionUtils.isNotEmpty(appliyReverseRequest.getResourceDTOList())) { + for (ResourceDTO resourceDTO : appliyReverseRequest.getResourceDTOList()) { + VvReverseOrderProveEntity vvReverseOrderProveEntity = new VvReverseOrderProveEntity(); + vvReverseOrderProveEntity.setReverseOrderId(vvReverseOrderEntity.getId()); + vvReverseOrderProveEntity.setResourceUrl(resourceDTO.getResourceUrl()); + vvReverseOrderProveEntity.setType(resourceDTO.getType()); + vvReverseOrderProveEntity.setScene(ReverseUploadSceneEnums.upload_reverse_prove.getCode()); + vvReverseOrderProveDao.insertOrUpdateVvReverseOrderProve(vvReverseOrderProveEntity); + } + } + return R.ok().setData(vvReverseOrderEntity); + } + +} diff --git a/api-web/api-interface/src/main/java/com/heyu/api/controller/mm/AdminOrderController.java b/api-web/api-interface/src/main/java/com/heyu/api/controller/mm/AdminOrderController.java index ac99811..26c32e2 100644 --- a/api-web/api-interface/src/main/java/com/heyu/api/controller/mm/AdminOrderController.java +++ b/api-web/api-interface/src/main/java/com/heyu/api/controller/mm/AdminOrderController.java @@ -5,10 +5,12 @@ import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.metadata.IPage; import com.heyu.api.alibaba.request.mm.VvUnPackDTO; import com.heyu.api.alibaba.request.mm.enums.OrderStatusEnums; +import com.heyu.api.alibaba.request.mm.enums.RefundTypeEnums; import com.heyu.api.alibaba.request.mm.enums.ShippingTypeEnums; import com.heyu.api.alibaba.request.mm.order.*; import com.heyu.api.alibaba.request.mm.order.resp.VVOrderDetailResp; import com.heyu.api.alibaba.request.mm.order.resp.VVOrderListResp; +import com.heyu.api.alibaba.request.mm.reverse.AppliyReverseRequest; import com.heyu.api.data.dao.vv.*; import com.heyu.api.data.dto.PackageDelivedDelayDTO; import com.heyu.api.data.entity.vv.*; @@ -17,6 +19,7 @@ import com.heyu.api.data.utils.BigDecimalUtil; import com.heyu.api.data.utils.DateUtils; import com.heyu.api.data.utils.R; import com.heyu.api.data.utils.SanUtils; +import com.heyu.api.service.ReverseOrderService; import com.heyu.api.service.VvTradeOrderConvertService; import com.heyu.api.utils.ISelect; import com.heyu.api.utils.PPageUtils; @@ -83,6 +86,9 @@ public class AdminOrderController { @Autowired private RabbitTemplate rabbitTemplate; + @Autowired + private ReverseOrderService reverseOrderService; + /*** @@ -221,6 +227,7 @@ public class AdminOrderController { /*** * 取消打包 + * http://localhost:8888/mm/order/unpack */ @RequestMapping("/unpack") public R unpack(@RequestBody VvUnPackDTO vvOrderRequest) { @@ -237,6 +244,7 @@ public class AdminOrderController { /*** * 已签收 + * http://localhost:8888/mm/order/shipped */ @RequestMapping("/shipped") public R shipped(@RequestBody VvShippedDTO vvDeliveredDTO) { @@ -252,15 +260,13 @@ public class AdminOrderController { tradeOrderLineEntity.setUnpackUser(vvDeliveredDTO.getUserName()); vvTradeOrderLineDao.updateVvTradeOrderLineById(tradeOrderLineEntity); } - - VvPackageEntity vvPackageEntity = vvPackageDao.selectVvPackageByTrackNumber(vvDeliveredDTO.getTrackNumber()); - + VvPackageEntity vvPackageEntity = vvPackageDao.selectVvPackageByTrackNumber(vvDeliveredDTO.getTrackNumber()); Date time = new Date(); Date timeAfter15 = DateUtils.addDays(time, 15); // 设置签收时间 vvPackageEntity.setGmtSignReceipt(time); PackageDelivedDelayDTO dto = new PackageDelivedDelayDTO(); - dto.setPackageId(vvPackageEntity.getId() ); + dto.setPackageId(vvPackageEntity.getId()); dto.setRole(vvDeliveredDTO.getUserName()); dto.setSendTime(DateUtils.formatDate(new Date(), com.heyu.api.data.utils.DateUtils.YYYY_MM_DD_HH_MM_SS)); dto.setDelayTime(DateUtils.formatDate(timeAfter15, com.heyu.api.data.utils.DateUtils.YYYY_MM_DD_HH_MM_SS)); @@ -269,7 +275,7 @@ public class AdminOrderController { int second = DateUtils.betweenSecond(time, timeAfter15); - log.info("AdminOrderController delay send :{}",JSON.toJSONString(dto)); + log.info("AdminOrderController delay send :{}", JSON.toJSONString(dto)); // 通过广播模式发布延时消息 延时30分钟 持久化消息 消费后销毁 这里无需指定路由,会广播至每个绑定此交换机的队列 rabbitTemplate.convertAndSend(delayExchangeName, "", JSON.toJSONString(dto), message -> { @@ -286,9 +292,9 @@ public class AdminOrderController { */ @RequestMapping("/delivered") public R delivered(@RequestBody VvDeliveredDTO vvDeliveredDTO) { - List vvTradeOrderLineEntityList = vvTradeOrderLineDao.selectVvTradeOrderLineByIds(vvDeliveredDTO.getTradeOrderLineIds()); + List vvTradeOrderLineEntityList = vvTradeOrderLineDao.selectVvTradeOrderLineByTrackNumber(vvDeliveredDTO.getTrackNumber()); for (VvTradeOrderLineEntity tradeOrderLineEntity : vvTradeOrderLineEntityList) { - if (!OrderStatusEnums.shipping.getStatus().equals(tradeOrderLineEntity.getStatus())) { + if (!OrderStatusEnums.shipped.getStatus().equals(tradeOrderLineEntity.getStatus())) { return R.error("订单状态不对"); } } @@ -301,6 +307,32 @@ public class AdminOrderController { return R.ok(); } + + /*** + * 订单取消 + */ + @RequestMapping("/cancel") + public R delivered(@RequestBody VvCancelDTO vvCancelDTO) { + List vvTradeOrderLineEntityList = vvTradeOrderLineDao.selectVvTradeOrderLineByTradeOrderId(vvCancelDTO.getTradeOrderId()); + for (VvTradeOrderLineEntity vvTradeOrderLineEntity : vvTradeOrderLineEntityList) { + if (!OrderStatusEnums.wait_shipping.getStatus().equals(vvTradeOrderLineEntity.getStatus())) { + return R.error("订单状态不是wait_shipping,不能取消订单"); + } + } + + for (VvTradeOrderLineEntity vvTradeOrderLineEntity : vvTradeOrderLineEntityList) { + vvTradeOrderLineEntity.setGmtCancel(new Date()); + vvTradeOrderLineEntity.setCancelUser(vvCancelDTO.getUserName()); + vvTradeOrderLineDao.updateVvTradeOrderLineById(vvTradeOrderLineEntity); + } + + AppliyReverseRequest appliyReverseRequest = new AppliyReverseRequest(); + appliyReverseRequest.setRefundType(RefundTypeEnums.only_refund.getCode()); + appliyReverseRequest.setRefundReason(vvCancelDTO.getCancelReason()); + + return reverseOrderService.createReverseOrder(vvTradeOrderLineEntityList, appliyReverseRequest); + } + /*** * 上传结算证据 */ diff --git a/api-web/api-interface/src/main/java/com/heyu/api/controller/vv/AppReverseController.java b/api-web/api-interface/src/main/java/com/heyu/api/controller/vv/AppReverseController.java index f949c25..61737cb 100644 --- a/api-web/api-interface/src/main/java/com/heyu/api/controller/vv/AppReverseController.java +++ b/api-web/api-interface/src/main/java/com/heyu/api/controller/vv/AppReverseController.java @@ -12,7 +12,6 @@ import com.heyu.api.alibaba.request.mm.reverse.AppliyReverseRequest; import com.heyu.api.common.annotation.Describe; import com.heyu.api.data.dao.vv.*; import com.heyu.api.data.entity.vv.*; -import com.heyu.api.data.utils.BigDecimalUtil; import com.heyu.api.data.utils.R; import com.heyu.api.data.utils.SanUtils; import lombok.extern.slf4j.Slf4j; @@ -26,7 +25,6 @@ import java.math.BigDecimal; import java.util.ArrayList; import java.util.Date; import java.util.List; -import java.util.Map; @Slf4j @RestController @@ -63,89 +61,7 @@ public class AppReverseController { @RequestMapping("/add") public R add(@RequestBody AppliyReverseRequest appliyReverseRequest) { List vvTradeOrderLineEntityList = vvTradeOrderLineDao.selectVvTradeOrderLineByTrackNumber(appliyReverseRequest.getTrackNumber()); - List tradeOrderLineIds = SanUtils.list2list(vvTradeOrderLineEntityList, VvTradeOrderLineEntity::getId); - Map vvTradeOrderLineEntityMap = SanUtils.list2Map(vvTradeOrderLineEntityList, VvTradeOrderLineEntity::getId); - - Long tradeOrderId = SanUtils.findAnyNotNull(vvTradeOrderLineEntityList, VvTradeOrderLineEntity::getTradeOrderId); - - VvTradeOrderEntity vvTradeOrderEntity = vvTradeOrderDao.selectVvTradeOrderById(tradeOrderId); - - VvReverseOrderEntity vvReverseOrderEntity = new VvReverseOrderEntity(); - - vvReverseOrderEntity.setTradeOrderId(vvTradeOrderEntity.getId()); - - vvReverseOrderEntity.setStatus(ReverseStatusEnums.buyer_apply_reverse_wait_seller_agree.getStatus()); - - BigDecimal realRefundAmount = appliyReverseRequest.getRefundAmount() == null - ? SanUtils.sum(vvTradeOrderLineEntityList, VvTradeOrderLineEntity::getPromotionPrice) - : appliyReverseRequest.getRefundAmount(); - // 设置退款金额 - vvReverseOrderEntity.setRefundAmount(realRefundAmount); - - - BigDecimal originRefundAmount = SanUtils.sum(vvTradeOrderLineEntityList, VvTradeOrderLineEntity::getPromotionPrice); // 本来应该退款金额 - if (realRefundAmount.compareTo(originRefundAmount) > 0) { - return R.error("退款金额不能超过商品总额度"); - } - - vvReverseOrderEntity.setRefundTradeOrderLineCount(tradeOrderLineIds.size()); - vvReverseOrderEntity.setRefundType(appliyReverseRequest.getRefundType()); - vvReverseOrderEntity.setGmtBuyerApplyRefund(new Date()); - vvReverseOrderEntity.setCreateTimestamp(System.currentTimeMillis()); - vvReverseOrderEntity.setModifyTimestamp(System.currentTimeMillis()); - vvReverseOrderEntity.setRefundCount(tradeOrderLineIds.size()); - vvReverseOrderEntity.setGmtBuyerApplyRefund(new Date()); - vvReverseOrderEntity.setRefundReason(appliyReverseRequest.getRefundReason()); - vvReverseOrderDao.insertOrUpdateVvReverseOrder(vvReverseOrderEntity); - BigDecimal preSum = BigDecimal.ZERO; - for (int i = 0; i < tradeOrderLineIds.size(); i++) { - Long tradeOrderLineId = tradeOrderLineIds.get(i); - VvTradeOrderLineEntity vvTradeOrderLineEntity = vvTradeOrderLineEntityMap.get(tradeOrderLineId); - VvReverseOrderLineEntity vvReverseOrderLineEntity = new VvReverseOrderLineEntity(); - vvReverseOrderLineEntity.setReverseOrderId(vvReverseOrderEntity.getId()); - vvReverseOrderLineEntity.setTradeOrderId(vvTradeOrderEntity.getId()); - vvReverseOrderLineEntity.setTradeOrderLineId(tradeOrderLineId); - if (appliyReverseRequest.getRefundAmount() == null) { - vvReverseOrderLineEntity.setRefundAmount(vvTradeOrderLineEntity.getPromotionPrice()); - } else { - if (i == tradeOrderLineIds.size() - 1) { - BigDecimal lastRefundAmount = BigDecimalUtil.subtract(realRefundAmount, preSum); - vvReverseOrderLineEntity.setRefundAmount(lastRefundAmount); - } else { - BigDecimal allPrice = BigDecimalUtil.multiply(vvTradeOrderLineEntity.getPromotionPrice(), realRefundAmount); - BigDecimal subLineRefundAmount = BigDecimalUtil.divide(allPrice, originRefundAmount); - preSum = preSum.add(subLineRefundAmount); - vvReverseOrderLineEntity.setRefundAmount(subLineRefundAmount); - } - } - vvReverseOrderLineEntity.setSellerId(vvTradeOrderLineEntity.getSellerId()); - vvReverseOrderLineEntity.setSellerName(vvTradeOrderLineEntity.getSellerName()); - vvReverseOrderLineEntity.setProductId(vvTradeOrderLineEntity.getProductId()); - vvReverseOrderLineEntity.setProductName(vvTradeOrderLineEntity.getProductName()); - vvReverseOrderLineEntity.setSkuImageUrl(vvTradeOrderLineEntity.getSkuImageUrl()); - // 保存逆向子单 - vvReverseOrderLineDao.insertVvReverseOrderLine(vvReverseOrderLineEntity); - - // 设置退款相关的东西 - vvTradeOrderLineEntity.setRefundCount(1); - vvTradeOrderLineEntity.setRefundAmount(vvReverseOrderLineEntity.getRefundAmount()); - // 更新子单的逆向状态 - vvTradeOrderLineEntity.setReverseStatus(ReverseStatusEnums.buyer_apply_reverse_wait_seller_agree.getStatus()); - vvTradeOrderLineDao.updateVvTradeOrderLineById(vvTradeOrderLineEntity); - } - - if (CollectionUtils.isNotEmpty(appliyReverseRequest.getResourceDTOList())) { - for (ResourceDTO resourceDTO : appliyReverseRequest.getResourceDTOList()) { - VvReverseOrderProveEntity vvReverseOrderProveEntity = new VvReverseOrderProveEntity(); - vvReverseOrderProveEntity.setReverseOrderId(vvReverseOrderEntity.getId()); - vvReverseOrderProveEntity.setResourceUrl(resourceDTO.getResourceUrl()); - vvReverseOrderProveEntity.setType(resourceDTO.getType()); - vvReverseOrderProveEntity.setScene(ReverseUploadSceneEnums.upload_reverse_prove.getCode()); - - vvReverseOrderProveDao.insertOrUpdateVvReverseOrderProve(vvReverseOrderProveEntity); - } - } return R.ok("申请退款成功"); } diff --git a/api-web/api-interface/src/main/java/com/heyu/api/listener/delay/handler/WeiXinPayCloseHandler.java b/api-web/api-interface/src/main/java/com/heyu/api/listener/delay/handler/WeiXinPayCloseHandler.java index 95b6170..d5c875e 100644 --- a/api-web/api-interface/src/main/java/com/heyu/api/listener/delay/handler/WeiXinPayCloseHandler.java +++ b/api-web/api-interface/src/main/java/com/heyu/api/listener/delay/handler/WeiXinPayCloseHandler.java @@ -31,7 +31,6 @@ public class WeiXinPayCloseHandler extends BaseDelayedHandler { List vvTradeOrderLineEntities = vvTradeOrderLineDao.selectVvTradeOrderLineByTradeOrderId(weiXinPayDelayDTO.getTradeOrderId()); - for (VvTradeOrderLineEntity vvTradeOrderLineEntity : vvTradeOrderLineEntities) { if(OrderStatusEnums.wait_pay.getStatus().equals(vvTradeOrderLineEntity.getStatus())){ vvTradeOrderLineEntity.setStatus(OrderStatusEnums.close.getStatus());