提交悠
This commit is contained in:
parent
6b8dee7ca1
commit
f8b0501988
@ -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 +
|
||||
"}";
|
||||
}
|
||||
}
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
@ -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;
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -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<Long> tradeOrderLineIds;
|
||||
private String trackNumber;
|
||||
|
||||
|
||||
|
||||
|
||||
@ -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 退款退货
|
||||
*/
|
||||
|
||||
@ -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<VvTradeOrderLineEntity> vvTradeOrderLineEntityList, AppliyReverseRequest appliyReverseRequest) ;
|
||||
|
||||
}
|
||||
@ -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<VvTradeOrderLineEntity> vvTradeOrderLineEntityList, AppliyReverseRequest appliyReverseRequest) {
|
||||
List<Long> tradeOrderLineIds = SanUtils.list2list(vvTradeOrderLineEntityList, VvTradeOrderLineEntity::getId);
|
||||
Map<Long, VvTradeOrderLineEntity> 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);
|
||||
}
|
||||
|
||||
}
|
||||
@ -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<VvTradeOrderLineEntity> vvTradeOrderLineEntityList = vvTradeOrderLineDao.selectVvTradeOrderLineByIds(vvDeliveredDTO.getTradeOrderLineIds());
|
||||
List<VvTradeOrderLineEntity> 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<VvTradeOrderLineEntity> 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);
|
||||
}
|
||||
|
||||
/***
|
||||
* 上传结算证据
|
||||
*/
|
||||
|
||||
@ -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<VvTradeOrderLineEntity> vvTradeOrderLineEntityList = vvTradeOrderLineDao.selectVvTradeOrderLineByTrackNumber(appliyReverseRequest.getTrackNumber());
|
||||
List<Long> tradeOrderLineIds = SanUtils.list2list(vvTradeOrderLineEntityList, VvTradeOrderLineEntity::getId);
|
||||
|
||||
Map<Long, VvTradeOrderLineEntity> 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("申请退款成功");
|
||||
}
|
||||
|
||||
|
||||
@ -31,7 +31,6 @@ public class WeiXinPayCloseHandler extends BaseDelayedHandler {
|
||||
|
||||
List<VvTradeOrderLineEntity> vvTradeOrderLineEntities = vvTradeOrderLineDao.selectVvTradeOrderLineByTradeOrderId(weiXinPayDelayDTO.getTradeOrderId());
|
||||
|
||||
|
||||
for (VvTradeOrderLineEntity vvTradeOrderLineEntity : vvTradeOrderLineEntities) {
|
||||
if(OrderStatusEnums.wait_pay.getStatus().equals(vvTradeOrderLineEntity.getStatus())){
|
||||
vvTradeOrderLineEntity.setStatus(OrderStatusEnums.close.getStatus());
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user