|
@@ -17,7 +17,6 @@
|
|
|
package org.springblade.modules.finance.service.impl;
|
|
|
|
|
|
import cn.hutool.core.collection.CollUtil;
|
|
|
-import cn.hutool.core.date.DateUtil;
|
|
|
import org.springblade.common.base.BaseEntity;
|
|
|
import org.springblade.common.cache.ParamCache;
|
|
|
import org.springblade.common.constant.CacheBizConstant;
|
|
@@ -25,9 +24,7 @@ import org.springblade.common.enums.*;
|
|
|
import org.springblade.common.utils.CommonUtil;
|
|
|
import org.springblade.core.log.exception.ServiceException;
|
|
|
import org.springblade.core.secure.utils.AuthUtil;
|
|
|
-import org.springblade.core.tool.api.R;
|
|
|
import org.springblade.modules.api.request.AfterSalesRequest;
|
|
|
-import org.springblade.modules.distribution.entity.DistributionConfig;
|
|
|
import org.springblade.modules.distribution.service.ICommissionService;
|
|
|
import org.springblade.modules.distribution.service.IDistributionConfigService;
|
|
|
import org.springblade.modules.finance.entity.*;
|
|
@@ -40,9 +37,7 @@ import org.springblade.modules.finance.wrapper.AfterSalesWrapper;
|
|
|
import org.springblade.modules.finance.wrapper.OrderWrapper;
|
|
|
import org.springblade.modules.groupon.entity.Groupon;
|
|
|
import org.springblade.modules.groupon.service.IGrouponService;
|
|
|
-import org.springblade.modules.mall.entity.Store;
|
|
|
import org.springblade.modules.mall.service.IStoreService;
|
|
|
-import org.springblade.modules.mall.wrapper.StoreWrapper;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
@@ -68,7 +63,7 @@ import java.util.stream.Collectors;
|
|
|
public class AfterSalesServiceImpl extends ServiceImpl<AfterSalesMapper, AfterSales> implements IAfterSalesService {
|
|
|
|
|
|
@Resource
|
|
|
- private IOrderGrouponGoodsService orderGrouponGoodsService;
|
|
|
+ private IOrderGoodsService orderGoodsService;
|
|
|
@Resource
|
|
|
private IOrderService orderService;
|
|
|
@Resource
|
|
@@ -110,8 +105,8 @@ public class AfterSalesServiceImpl extends ServiceImpl<AfterSalesMapper, AfterSa
|
|
|
afterSales.setGrouponId(orderGroupon.getGrouponId());
|
|
|
save(afterSales);
|
|
|
|
|
|
- orderGrouponGoodsService.lambdaUpdate().set(OrderGrouponGoods::getIsAfterSales, YesOrNoEnum.YES.getValue())
|
|
|
- .eq(OrderGrouponGoods::getOrderId, orderId).update();
|
|
|
+ orderGoodsService.lambdaUpdate().set(OrderGoods::getIsAfterSales, YesOrNoEnum.YES.getValue())
|
|
|
+ .eq(OrderGoods::getOrderId, orderId).update();
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -145,38 +140,38 @@ public class AfterSalesServiceImpl extends ServiceImpl<AfterSalesMapper, AfterSa
|
|
|
}
|
|
|
|
|
|
// 校验商品是否已经申请过售后
|
|
|
- List<Long> collect = request.getAfterSalesGoodsList().stream().map(BaseEntity::getId).collect(Collectors.toList());
|
|
|
- List<OrderGrouponGoods> list = orderGrouponGoodsService.lambdaQuery().in(BaseEntity::getId, collect).list();
|
|
|
- for (OrderGrouponGoods orderGrouponGoods : list) {
|
|
|
- if (YesOrNoEnum.YES.getValue().equals(orderGrouponGoods.getIsAfterSales())) {
|
|
|
- throw new ServiceException("商品【"+orderGrouponGoods.getGoodsName()+"】已申请过售后");
|
|
|
+ List<Long> collect = request.getAfterGoodsList().stream().map(BaseEntity::getId).collect(Collectors.toList());
|
|
|
+ List<OrderGoods> list = orderGoodsService.lambdaQuery().in(BaseEntity::getId, collect).list();
|
|
|
+ for (OrderGoods orderGoods : list) {
|
|
|
+ if (YesOrNoEnum.YES.getValue().equals(orderGoods.getIsAfterSales())) {
|
|
|
+ throw new ServiceException("商品【"+orderGoods.getGoodsName()+"】已申请过售后");
|
|
|
}
|
|
|
- orderGrouponGoods.setIsAfterSales(YesOrNoEnum.YES.getValue());
|
|
|
+ orderGoods.setIsAfterSales(YesOrNoEnum.YES.getValue());
|
|
|
}
|
|
|
// 更新售后状态
|
|
|
- orderGrouponGoodsService.updateBatchById(list);
|
|
|
+ orderGoodsService.updateBatchById(list);
|
|
|
|
|
|
- Map<Long, OrderGrouponGoods> map = request.getAfterSalesGoodsList().stream().collect(Collectors.toMap(BaseEntity::getId, Function.identity()));
|
|
|
+ Map<Long, OrderGoods> map = request.getAfterGoodsList().stream().collect(Collectors.toMap(BaseEntity::getId, Function.identity()));
|
|
|
List<AfterSales> afterSalesList = new ArrayList<>();
|
|
|
- for (OrderGrouponGoods goods : list) {
|
|
|
+ for (OrderGoods goods : list) {
|
|
|
AfterSales afterSales = init();
|
|
|
afterSales.setOrderId(request.getOrderId());
|
|
|
afterSales.setReason(request.getReason());
|
|
|
afterSales.setType(request.getAfterSalesType());
|
|
|
- afterSales.setOrderGrouponGoodsId(goods.getId());
|
|
|
+ afterSales.setOrderGoodsId(goods.getId());
|
|
|
|
|
|
- OrderGrouponGoods o = map.get(goods.getId());
|
|
|
+ OrderGoods o = map.get(goods.getId());
|
|
|
afterSales.setReturnGoodsNum(o.getGoodsNum());
|
|
|
afterSales.setIsArrived(YesOrNoEnum.NO.getValue());
|
|
|
afterSales.setUserId(AuthUtil.getUserId());
|
|
|
- afterSales.setStoreId(goods.getSupplierId());
|
|
|
+ afterSales.setStoreId(goods.getShopId());
|
|
|
afterSales.setGrouponId(orderGroupon.getGrouponId());
|
|
|
afterSalesList.add(afterSales);
|
|
|
}
|
|
|
saveBatch(afterSalesList);
|
|
|
|
|
|
- // 将分销收益改为无效,所有售后结束后重新计算收益
|
|
|
- commissionService.invalidCommission(order.getId());
|
|
|
+ // TODO: 2024/7/29 将分销收益改为无效,所有售后结束后重新计算收益
|
|
|
+ //commissionService.invalidCommission(order.getId());
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -209,9 +204,9 @@ public class AfterSalesServiceImpl extends ServiceImpl<AfterSalesMapper, AfterSa
|
|
|
Order order = orderService.getById(afterSales.getOrderId());
|
|
|
Assert.notNull(order, "订单数据不存在");
|
|
|
// 计算退款金额
|
|
|
- List<OrderGrouponGoods> goods = afterSalesGoodsService.getGoodsByAfterSalesId(afterSales.getId());
|
|
|
+ List<OrderGoods> goods = afterSalesGoodsService.getGoodsByAfterSalesId(afterSales.getId());
|
|
|
BigDecimal refundAmount = new BigDecimal(0);
|
|
|
- for (OrderGrouponGoods good : goods) {
|
|
|
+ for (OrderGoods good : goods) {
|
|
|
refundAmount = refundAmount.add(good.getGoodsPrice().multiply(BigDecimal.valueOf(good.getRefundGoodsNum())));
|
|
|
}
|
|
|
orderService.commonRefund(order.getOrderNo(), order.getId(), refundAmount, order.getTotalAmount(), afterSales.getId());
|
|
@@ -261,10 +256,10 @@ public class AfterSalesServiceImpl extends ServiceImpl<AfterSalesMapper, AfterSa
|
|
|
|
|
|
// 查询没有到货的商品
|
|
|
OrderGroupon orderGroupon = orderGrouponService.lambdaQuery().eq(OrderGroupon::getOrderId, order.getId()).one();
|
|
|
- List<OrderGrouponGoods> list = orderGrouponGoodsService.lambdaQuery().eq(OrderGrouponGoods::getOrderId, order.getId()).list();
|
|
|
+ List<OrderGoods> list = orderGoodsService.lambdaQuery().eq(OrderGoods::getOrderId, order.getId()).list();
|
|
|
list = list.stream().filter(e -> e.getGoodsNum() - e.getRefundGoodsNumTotal() > 0).collect(Collectors.toList());
|
|
|
Assert.notEmpty(list, "没有可退的商品");
|
|
|
- List<Long> goodsIds = list.stream().map(OrderGrouponGoods::getGoodsId).collect(Collectors.toList());
|
|
|
+ List<Long> goodsIds = list.stream().map(OrderGoods::getGoodsId).collect(Collectors.toList());
|
|
|
List<AppointGoodsVO> notArriveGoods = appointGoodsService.getNotArrive(orderGroupon.getGrouponId(), orderGroupon.getSelfTakeId(), goodsIds);
|
|
|
if (notArriveGoods.size() == 0) {
|
|
|
throw new ServiceException("没有未到货的商品");
|
|
@@ -282,7 +277,7 @@ public class AfterSalesServiceImpl extends ServiceImpl<AfterSalesMapper, AfterSa
|
|
|
this.save(afterSales);
|
|
|
|
|
|
List<AfterSalesGoods> salesGoodsList = new ArrayList<>();
|
|
|
- for (OrderGrouponGoods e : list) {
|
|
|
+ for (OrderGoods e : list) {
|
|
|
int canRefundNum = e.getGoodsNum() - e.getRefundGoodsNumTotal();
|
|
|
if (map.get(e.getGoodsId()) != null && canRefundNum > 0) {
|
|
|
AfterSalesGoods afterSalesGoods = new AfterSalesGoods();
|
|
@@ -291,7 +286,7 @@ public class AfterSalesServiceImpl extends ServiceImpl<AfterSalesMapper, AfterSa
|
|
|
afterSalesGoods.setGoodsNum(canRefundNum);
|
|
|
salesGoodsList.add(afterSalesGoods);
|
|
|
e.setIsAfterSales(YesOrNoEnum.YES.getValue());
|
|
|
- orderGrouponGoodsService.updateById(e);
|
|
|
+ orderGoodsService.updateById(e);
|
|
|
}
|
|
|
}
|
|
|
Assert.notEmpty(salesGoodsList, "售后商品不能为空");
|
|
@@ -324,38 +319,38 @@ public class AfterSalesServiceImpl extends ServiceImpl<AfterSalesMapper, AfterSa
|
|
|
this.save(afterSales);
|
|
|
|
|
|
|
|
|
- Map<Long, OrderGrouponGoods> map = request.getAfterSalesGoodsList().stream().collect(Collectors.toMap(BaseEntity::getId, Function.identity()));
|
|
|
+ Map<Long, OrderGoods> map = request.getAfterGoodsList().stream().collect(Collectors.toMap(BaseEntity::getId, Function.identity()));
|
|
|
// 校验商品是否已经申请过售后
|
|
|
- List<Long> collect = request.getAfterSalesGoodsList().stream().map(BaseEntity::getId).collect(Collectors.toList());
|
|
|
- List<OrderGrouponGoods> list = orderGrouponGoodsService.lambdaQuery().in(BaseEntity::getId, collect).list();
|
|
|
- for (OrderGrouponGoods orderGrouponGoods : list) {
|
|
|
- if (YesOrNoEnum.YES.getValue().equals(orderGrouponGoods.getIsAfterSales())) {
|
|
|
- throw new ServiceException("商品【"+orderGrouponGoods.getGoodsName()+"】已申请过退款");
|
|
|
+ List<Long> collect = request.getAfterGoodsList().stream().map(BaseEntity::getId).collect(Collectors.toList());
|
|
|
+ List<OrderGoods> list = orderGoodsService.lambdaQuery().in(BaseEntity::getId, collect).list();
|
|
|
+ for (OrderGoods orderGoods : list) {
|
|
|
+ if (YesOrNoEnum.YES.getValue().equals(orderGoods.getIsAfterSales())) {
|
|
|
+ throw new ServiceException("商品【"+orderGoods.getGoodsName()+"】已申请过退款");
|
|
|
}
|
|
|
- OrderGrouponGoods grouponGoods = map.get(orderGrouponGoods.getId());
|
|
|
- orderGrouponGoods.setAfterSalesGoodsNum(orderGrouponGoods.getAfterSalesGoodsNum() + grouponGoods.getGoodsNum());
|
|
|
- orderGrouponGoods.setRefundGoodsNumTotal(orderGrouponGoods.getRefundGoodsNumTotal() + grouponGoods.getGoodsNum());
|
|
|
- orderGrouponGoods.setIsAfterSales(YesOrNoEnum.YES.getValue());
|
|
|
+ OrderGoods grouponGoods = map.get(orderGoods.getId());
|
|
|
+ orderGoods.setAfterSalesGoodsNum(orderGoods.getAfterSalesGoodsNum() + grouponGoods.getGoodsNum());
|
|
|
+ orderGoods.setRefundGoodsNumTotal(orderGoods.getRefundGoodsNumTotal() + grouponGoods.getGoodsNum());
|
|
|
+ orderGoods.setIsAfterSales(YesOrNoEnum.YES.getValue());
|
|
|
}
|
|
|
// 更新售后状态
|
|
|
- orderGrouponGoodsService.updateBatchById(list);
|
|
|
+ orderGoodsService.updateBatchById(list);
|
|
|
|
|
|
List<AfterSalesGoods> salesGoodsList = new ArrayList<>();
|
|
|
- for (OrderGrouponGoods orderGrouponGoods : request.getAfterSalesGoodsList()) {
|
|
|
+ for (OrderGoods orderGoods : request.getAfterGoodsList()) {
|
|
|
AfterSalesGoods afterSalesGoods = new AfterSalesGoods();
|
|
|
afterSalesGoods.setAfterSalesId(afterSales.getId());
|
|
|
- afterSalesGoods.setOrderGrouponGoodsId(orderGrouponGoods.getId());
|
|
|
- afterSalesGoods.setGoodsNum(orderGrouponGoods.getGoodsNum());
|
|
|
+ afterSalesGoods.setOrderGrouponGoodsId(orderGoods.getId());
|
|
|
+ afterSalesGoods.setGoodsNum(orderGoods.getGoodsNum());
|
|
|
salesGoodsList.add(afterSalesGoods);
|
|
|
}
|
|
|
afterSalesGoodsService.saveBatch(salesGoodsList);
|
|
|
|
|
|
// 查询改订单下的商品是否都已申请退款,如果是则吧状态更新为退款中
|
|
|
- Integer count = orderGrouponGoodsService.lambdaQuery().eq(OrderGrouponGoods::getOrderId, order.getId())
|
|
|
- .eq(OrderGrouponGoods::getIsAfterSales, YesOrNoEnum.NO.getValue()).count();
|
|
|
+ Integer count = orderGoodsService.lambdaQuery().eq(OrderGoods::getOrderId, order.getId())
|
|
|
+ .eq(OrderGoods::getIsAfterSales, YesOrNoEnum.NO.getValue()).count();
|
|
|
// 判断所有的商品是否都已申请退款
|
|
|
boolean flag = true;
|
|
|
- for (OrderGrouponGoods goods : list) {
|
|
|
+ for (OrderGoods goods : list) {
|
|
|
if (goods.getGoodsNum() > goods.getAfterSalesGoodsNum()) {
|
|
|
flag = false;
|
|
|
break;
|
|
@@ -384,7 +379,7 @@ public class AfterSalesServiceImpl extends ServiceImpl<AfterSalesMapper, AfterSa
|
|
|
Order order = orderService.getById(orderId);
|
|
|
Assert.notNull(order, "订单数据不存在");
|
|
|
|
|
|
- OrderGrouponGoods orderGrouponGoods = orderGrouponGoodsService.getById(afterSales.getOrderGrouponGoodsId());
|
|
|
+ OrderGoods orderGoods = orderGoodsService.getById(afterSales.getOrderGoodsId());
|
|
|
Assert.notNull(order, "orderGrouponGoods数据不存在");
|
|
|
|
|
|
OrderRefund orderRefund = orderRefundService.lambdaQuery().eq(OrderRefund::getAfterSalesId, afterSalesId).eq(OrderRefund::getRefundState, RefundStateEnum.ONLY_REFUND.getValue()).one();
|
|
@@ -392,7 +387,7 @@ public class AfterSalesServiceImpl extends ServiceImpl<AfterSalesMapper, AfterSa
|
|
|
throw new ServiceException("申请中,请勿重复操作");
|
|
|
}
|
|
|
|
|
|
- BigDecimal refundPrice = orderGrouponGoods.getGoodsPrice().multiply(BigDecimal.valueOf(orderGrouponGoods.getGoodsNum()));
|
|
|
+ BigDecimal refundPrice = orderGoods.getGoodsPrice().multiply(BigDecimal.valueOf(orderGoods.getGoodsNum()));
|
|
|
orderService.commonRefund(order.getOrderNo(), order.getId(), refundPrice, order.getTotalAmount(), afterSalesId);
|
|
|
|
|
|
afterSales.setIsArrived(YesOrNoEnum.YES.getValue());
|
|
@@ -406,7 +401,7 @@ public class AfterSalesServiceImpl extends ServiceImpl<AfterSalesMapper, AfterSa
|
|
|
updateById(afterSales);
|
|
|
|
|
|
// 类型为售后的时候,查询该订单下是否还有未处理的售后,如果没有则重新计算收益
|
|
|
- if (AfterSalesTypeEnum.RETURN_GOODS.getValue().equals(afterSales.getType())) {
|
|
|
+ if (AfterSalesTypeEnum.PART_REFUND.getValue().equals(afterSales.getType())) {
|
|
|
List<AfterSales> list = lambdaQuery().eq(AfterSales::getOrderId, afterSales.getOrderId()).list();
|
|
|
if (CollUtil.isNotEmpty(list)) {
|
|
|
List<AfterSales> collect = list.stream().filter(e -> AfterSalesStatusEnum.PROCESSED.getValue().equals(e.getStatus())).collect(Collectors.toList());
|
|
@@ -428,19 +423,19 @@ public class AfterSalesServiceImpl extends ServiceImpl<AfterSalesMapper, AfterSa
|
|
|
}
|
|
|
}
|
|
|
} else if (AfterSalesTypeEnum.PART_REFUND.getValue().equals(afterSales.getType())) {
|
|
|
- List<OrderGrouponGoods> goods = afterSalesGoodsService.getGoodsByAfterSalesId(afterSales.getId());
|
|
|
- for (OrderGrouponGoods good : goods) {
|
|
|
+ List<OrderGoods> goods = afterSalesGoodsService.getGoodsByAfterSalesId(afterSales.getId());
|
|
|
+ for (OrderGoods good : goods) {
|
|
|
good.setIsRefund(YesOrNoEnum.YES.getValue());
|
|
|
}
|
|
|
- orderGrouponGoodsService.updateBatchById(goods);
|
|
|
+ orderGoodsService.updateBatchById(goods);
|
|
|
|
|
|
// 如果该订单下所有商品都已退款,则吧订单状态修改为已退款
|
|
|
- Integer count = orderGrouponGoodsService.lambdaQuery().eq(OrderGrouponGoods::getOrderId, afterSales.getOrderId()).eq(OrderGrouponGoods::getIsRefund, YesOrNoEnum.NO.getValue())
|
|
|
+ Integer count = orderGoodsService.lambdaQuery().eq(OrderGoods::getOrderId, afterSales.getOrderId()).eq(OrderGoods::getIsRefund, YesOrNoEnum.NO.getValue())
|
|
|
.count();
|
|
|
|
|
|
// 判断所有的商品是否都已申请退款
|
|
|
boolean flag = true;
|
|
|
- for (OrderGrouponGoods g : goods) {
|
|
|
+ for (OrderGoods g : goods) {
|
|
|
if (g.getGoodsNum() > g.getAfterSalesGoodsNum()) {
|
|
|
flag = false;
|
|
|
break;
|
|
@@ -462,10 +457,10 @@ public class AfterSalesServiceImpl extends ServiceImpl<AfterSalesMapper, AfterSa
|
|
|
AfterSales afterSales = getById(afterSalesId);
|
|
|
AfterSalesVO vo = AfterSalesWrapper.build().entityVO(afterSales);
|
|
|
if (AfterSalesTypeEnum.REFUND.getValue().equals(vo.getType())) {
|
|
|
- List<OrderGrouponGoods> list = orderGrouponGoodsService.lambdaQuery().eq(OrderGrouponGoods::getOrderId, vo.getOrderId()).list();
|
|
|
+ List<OrderGoods> list = orderGoodsService.lambdaQuery().eq(OrderGoods::getOrderId, vo.getOrderId()).list();
|
|
|
vo.setGoodsList(list);
|
|
|
} else {
|
|
|
- List<OrderGrouponGoods> list = orderGrouponGoodsService.lambdaQuery().eq(BaseEntity::getId, vo.getOrderGrouponGoodsId()).list();
|
|
|
+ List<OrderGoods> list = orderGoodsService.lambdaQuery().eq(BaseEntity::getId, vo.getOrderGoodsId()).list();
|
|
|
vo.setGoodsList(list);
|
|
|
}
|
|
|
Order order = orderService.getById(afterSales.getOrderId());
|
|
@@ -477,8 +472,8 @@ public class AfterSalesServiceImpl extends ServiceImpl<AfterSalesMapper, AfterSa
|
|
|
}
|
|
|
|
|
|
// if (!AfterSalesStatusEnum.WAIT.getValue().equals(afterSales.getStatus()) || !AfterSalesStatusEnum.REFUSE.getValue().equals(afterSales.getStatus())) {
|
|
|
-// OrderGrouponGoods orderGrouponGoods = orderGrouponGoodsService.getById(afterSales.getOrderGrouponGoodsId());
|
|
|
-// Store store = storeService.getById(orderGrouponGoods.getSupplierId());
|
|
|
+// OrderGoods orderGoods = orderGrouponGoodsService.getById(afterSales.getOrderGrouponGoodsId());
|
|
|
+// Store store = storeService.getById(orderGoods.getSupplierId());
|
|
|
// vo.setStore(StoreWrapper.build().entityVO(store));
|
|
|
// }
|
|
|
|
|
@@ -491,10 +486,10 @@ public class AfterSalesServiceImpl extends ServiceImpl<AfterSalesMapper, AfterSa
|
|
|
if (CollUtil.isNotEmpty(afterSalesVOS)) {
|
|
|
for (AfterSalesVO vo : afterSalesVOS) {
|
|
|
if (AfterSalesTypeEnum.REFUND.getValue().equals(vo.getType())) {
|
|
|
- List<OrderGrouponGoods> list = orderGrouponGoodsService.lambdaQuery().eq(OrderGrouponGoods::getOrderId, vo.getOrderId()).list();
|
|
|
+ List<OrderGoods> list = orderGoodsService.lambdaQuery().eq(OrderGoods::getOrderId, vo.getOrderId()).list();
|
|
|
vo.setGoodsList(list);
|
|
|
} else {
|
|
|
- List<OrderGrouponGoods> list = orderGrouponGoodsService.lambdaQuery().eq(BaseEntity::getId, vo.getOrderGrouponGoodsId()).list();
|
|
|
+ List<OrderGoods> list = orderGoodsService.lambdaQuery().eq(BaseEntity::getId, vo.getOrderGoodsId()).list();
|
|
|
vo.setGoodsList(list);
|
|
|
}
|
|
|
}
|