diff --git a/DB/version4.2.3to4.2.4.sql b/DB/version4.2.3to4.2.4.sql new file mode 100644 index 00000000..78764222 --- /dev/null +++ b/DB/version4.2.3to4.2.4.sql @@ -0,0 +1,2 @@ +/** 新增已退货数量 **/ +ALTER TABLE li_order_item ADD return_goods_number int DEFAULT 0 COMMENT '退货数量 '; \ No newline at end of file diff --git a/consumer/src/main/java/cn/lili/listener/AfterSaleMessageListener.java b/consumer/src/main/java/cn/lili/listener/AfterSaleMessageListener.java index f578f755..1ad70c4d 100644 --- a/consumer/src/main/java/cn/lili/listener/AfterSaleMessageListener.java +++ b/consumer/src/main/java/cn/lili/listener/AfterSaleMessageListener.java @@ -17,7 +17,6 @@ import java.util.List; * 售后通知 * * @author paulG - * @since 2020/12/9 */ @Slf4j @Component diff --git a/framework/src/main/java/cn/lili/common/enums/ResultCode.java b/framework/src/main/java/cn/lili/common/enums/ResultCode.java index d08ca88f..b8d30c8c 100644 --- a/framework/src/main/java/cn/lili/common/enums/ResultCode.java +++ b/framework/src/main/java/cn/lili/common/enums/ResultCode.java @@ -209,6 +209,7 @@ public enum ResultCode { AFTER_STATUS_ERROR(33006, "售后状态错误,请刷新页面"), RETURN_MONEY_OFFLINE_BANK_ERROR(33007, "当账号类型为银行转账时,银行信息不能为空"), AFTER_SALES_PRICE_ERROR(33004, "申请退款金额错误"), + AFTER_GOODS_NUMBER_ERROR(33008, "申请售后商品数量错误"), /** * 投诉 diff --git a/framework/src/main/java/cn/lili/modules/order/aftersale/entity/vo/AfterSaleApplyVO.java b/framework/src/main/java/cn/lili/modules/order/aftersale/entity/vo/AfterSaleApplyVO.java index 6ad0b21e..9d6577af 100644 --- a/framework/src/main/java/cn/lili/modules/order/aftersale/entity/vo/AfterSaleApplyVO.java +++ b/framework/src/main/java/cn/lili/modules/order/aftersale/entity/vo/AfterSaleApplyVO.java @@ -54,5 +54,10 @@ public class AfterSaleApplyVO { @ApiModelProperty(value = "是否支持退款") private Boolean returnMoney; + @ApiModelProperty(value = "会员ID") + private String memberId; + + + } diff --git a/framework/src/main/java/cn/lili/modules/order/aftersale/serviceimpl/AfterSaleServiceImpl.java b/framework/src/main/java/cn/lili/modules/order/aftersale/serviceimpl/AfterSaleServiceImpl.java index 357039ac..46bdc735 100644 --- a/framework/src/main/java/cn/lili/modules/order/aftersale/serviceimpl/AfterSaleServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/order/aftersale/serviceimpl/AfterSaleServiceImpl.java @@ -17,6 +17,7 @@ import cn.lili.modules.order.aftersale.aop.AfterSaleLogPoint; import cn.lili.modules.order.aftersale.entity.dos.AfterSale; import cn.lili.modules.order.order.entity.dos.Order; import cn.lili.modules.order.order.entity.dos.OrderItem; +import cn.lili.modules.order.order.entity.enums.*; import cn.lili.modules.order.aftersale.entity.dto.AfterSaleDTO; import cn.lili.modules.order.order.entity.enums.OrderItemAfterSaleStatusEnum; import cn.lili.modules.order.order.entity.enums.OrderStatusEnum; @@ -57,9 +58,12 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import javax.annotation.PostConstruct; import java.util.Date; import java.util.List; import java.util.Objects; +import java.util.stream.Collectors; +import java.util.stream.Stream; /** * 售后业务层实现 @@ -165,6 +169,7 @@ public class AfterSaleServiceImpl extends ServiceImpl() + .eq(OrderItem::getOrderSn, afterSale.getOrderSn()) + .eq(OrderItem::getSkuId, afterSale.getSkuId())); + AfterSaleStatusEnum afterSaleStatusEnum = AfterSaleStatusEnum.valueOf(afterSale.getServiceStatus()); + + switch (afterSaleStatusEnum){ + //判断当前售后的状态---申请中 + case APPLY:{ + orderItem.setReturnGoodsNumber(orderItem.getReturnGoodsNumber() + afterSale.getNum()); + break; + } + + //判断当前售后的状态---已拒绝,买家取消售后,卖家终止售后 + case REFUSE: + case BUYER_CANCEL: + case SELLER_TERMINATION: { + orderItem.setReturnGoodsNumber(orderItem.getReturnGoodsNumber() - afterSale.getNum()); + break; + } + default: + break; + } + //修改orderItem订单 + this.updateOrderItem(orderItem); + } + + /** * 检查当前订单状态是否为可申请当前售后类型的状态 * @@ -465,11 +513,17 @@ public class AfterSaleServiceImpl extends ServiceImpl (orderItem.getNum() - orderItem.getReturnGoodsNumber())) { + throw new ServiceException(ResultCode.AFTER_GOODS_NUMBER_ERROR); + } + + //获取售后类型 Order order = orderService.getBySn(orderItem.getOrderSn()); AfterSaleTypeEnum afterSaleTypeEnum = AfterSaleTypeEnum.valueOf(afterSaleDTO.getServiceType()); @@ -531,6 +585,7 @@ public class AfterSaleServiceImpl extends ServiceImpl queryWrapper = Wrappers.lambdaUpdate(); queryWrapper.eq(AfterSale::getSn, afterSaleSn); this.update(afterSale, queryWrapper); @@ -547,4 +602,76 @@ public class AfterSaleServiceImpl extends ServiceImpl afterSaleList) { + //根据售后状态获取不是已结束的售后记录 + List implementList = afterSaleList.stream() + .filter(afterSale -> afterSale.getServiceStatus().equals(AfterSaleStatusEnum.APPLY.name()) + || afterSale.getServiceStatus().equals(AfterSaleStatusEnum.PASS.name()) + || afterSale.getServiceStatus().equals(AfterSaleStatusEnum.BUYER_RETURN.name()) + || afterSale.getServiceStatus().equals(AfterSaleStatusEnum.SELLER_CONFIRM.name()) + || afterSale.getServiceStatus().equals(AfterSaleStatusEnum.WAIT_REFUND.name()) + || afterSale.getServiceStatus().equals(AfterSaleStatusEnum.COMPLETE.name())) + .collect(Collectors.toList()); + + if (!implementList.isEmpty()) { + //遍历售后记录获取售后商品数量 + implementList.forEach(a -> orderItem.setReturnGoodsNumber(orderItem.getReturnGoodsNumber() + a.getNum())); + } + + //获取已完成售后订单数量 + List completeList = afterSaleList.stream() + .filter(afterSale -> afterSale.getServiceStatus().equals(AfterSaleStatusEnum.COMPLETE.name())) + .collect(Collectors.toList()); + + if (!completeList.isEmpty()) { + //遍历售后记录获取已完成售后商品数量 + completeList.forEach(a -> orderItem.setReturnGoodsNumber(orderItem.getReturnGoodsNumber() + a.getNum())); + } + } + + /** + * 功能描述: 修改orderItem订单 + * + * @param orderItem + * @return void + * @author ftyy + **/ + private void updateOrderItem(OrderItem orderItem) { + //订单状态不能为新订单,已失效订单或未申请订单才可以去修改订单信息 + OrderItemAfterSaleStatusEnum afterSaleTypeEnum = OrderItemAfterSaleStatusEnum.valueOf(orderItem.getAfterSaleStatus()); + switch (afterSaleTypeEnum){ + //售后状态为:未申请 部分售后 已申请 + case NOT_APPLIED: + case PART_AFTER_SALE: + case ALREADY_APPLIED:{ + //通过正在售后商品总数修改订单售后状态 + if (orderItem.getReturnGoodsNumber().equals(orderItem.getNum())) { + //修改订单的售后状态--已申请 + orderItem.setAfterSaleStatus(OrderItemAfterSaleStatusEnum.ALREADY_APPLIED.name()); + } else if(orderItem.getReturnGoodsNumber().equals(0)){ + //修改订单的售后状态--未申请 + orderItem.setAfterSaleStatus(OrderItemAfterSaleStatusEnum.NOT_APPLIED.name()); + }else{ + //修改订单的售后状态--部分售后 + orderItem.setAfterSaleStatus(OrderItemAfterSaleStatusEnum.PART_AFTER_SALE.name()); + } + break; + } + + default: + break; + } + orderItemService.update(new LambdaUpdateWrapper() + .eq(OrderItem::getSn, orderItem.getSn()) + .set(OrderItem::getAfterSaleStatus, orderItem.getAfterSaleStatus()) + .set(OrderItem::getReturnGoodsNumber,orderItem.getReturnGoodsNumber())); + } + } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/order/cart/render/TradeBuilder.java b/framework/src/main/java/cn/lili/modules/order/cart/render/TradeBuilder.java index 75cfa3bd..dd15fbb8 100644 --- a/framework/src/main/java/cn/lili/modules/order/cart/render/TradeBuilder.java +++ b/framework/src/main/java/cn/lili/modules/order/cart/render/TradeBuilder.java @@ -97,7 +97,7 @@ public class TradeBuilder { renderCartBySteps(tradeDTO, RenderStepStatement.tradeRender); } - + //添加order订单及order_item子订单并返回 return tradeService.createTrade(tradeDTO); } diff --git a/framework/src/main/java/cn/lili/modules/order/order/entity/dos/OrderItem.java b/framework/src/main/java/cn/lili/modules/order/order/entity/dos/OrderItem.java index 631bc5fe..ae8c270f 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/entity/dos/OrderItem.java +++ b/framework/src/main/java/cn/lili/modules/order/order/entity/dos/OrderItem.java @@ -112,6 +112,10 @@ public class OrderItem extends BaseEntity { @ApiModelProperty(value = "交易投诉id") private String complainId; + @ApiModelProperty(value = "退货商品数量") + private Integer returnGoodsNumber; + + public OrderItem(CartSkuVO cartSkuVO, CartVO cartVO, TradeDTO tradeDTO) { String oldId = this.getId(); BeanUtil.copyProperties(cartSkuVO.getGoodsSku(), this); diff --git a/framework/src/main/java/cn/lili/modules/order/order/entity/enums/OrderItemAfterSaleStatusEnum.java b/framework/src/main/java/cn/lili/modules/order/order/entity/enums/OrderItemAfterSaleStatusEnum.java index 00a34619..88f752c5 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/entity/enums/OrderItemAfterSaleStatusEnum.java +++ b/framework/src/main/java/cn/lili/modules/order/order/entity/enums/OrderItemAfterSaleStatusEnum.java @@ -14,7 +14,9 @@ public enum OrderItemAfterSaleStatusEnum { NEW("新订单,不能申请售后"), NOT_APPLIED("未申请"), ALREADY_APPLIED("已申请"), - EXPIRED("已失效不允许申请售后"); + EXPIRED("已失效不允许申请售后"), + PART_AFTER_SALE("部分售后"); + private final String description; diff --git a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/StoreFlowServiceImpl.java b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/StoreFlowServiceImpl.java index 930873cd..26f5ebde 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/StoreFlowServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/StoreFlowServiceImpl.java @@ -147,7 +147,8 @@ public class StoreFlowServiceImpl extends ServiceImpl().eq(StoreFlow::getOrderItemSn, afterSale.getOrderItemSn())); + StoreFlow payStoreFlow = this.getOne(new LambdaUpdateWrapper().eq(StoreFlow::getOrderItemSn, afterSale.getOrderItemSn()) + .eq(StoreFlow::getFlowType,FlowTypeEnum.PAY)); storeFlow.setNum(afterSale.getNum()); storeFlow.setCategoryId(payStoreFlow.getCategoryId()); //佣金 diff --git a/framework/src/main/java/cn/lili/modules/payment/kit/RefundSupport.java b/framework/src/main/java/cn/lili/modules/payment/kit/RefundSupport.java index 52cda619..4f4e20a4 100644 --- a/framework/src/main/java/cn/lili/modules/payment/kit/RefundSupport.java +++ b/framework/src/main/java/cn/lili/modules/payment/kit/RefundSupport.java @@ -4,11 +4,14 @@ import cn.lili.common.utils.SnowFlake; import cn.lili.common.utils.SpringContextUtil; import cn.lili.modules.order.aftersale.entity.dos.AfterSale; import cn.lili.modules.order.order.entity.dos.Order; +import cn.lili.modules.order.order.entity.dos.OrderItem; +import cn.lili.modules.order.order.service.OrderItemService; import cn.lili.modules.order.aftersale.service.AfterSaleService; import cn.lili.modules.order.order.service.OrderService; import cn.lili.modules.order.order.service.StoreFlowService; import cn.lili.modules.payment.entity.RefundLog; import cn.lili.modules.payment.entity.enums.PaymentMethodEnum; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -41,6 +44,11 @@ public class RefundSupport { */ @Autowired private OrderService orderService; + /** + * 子订单 + */ + @Autowired + private OrderItemService orderItemService; /** * 售后退款 @@ -69,10 +77,32 @@ public class RefundSupport { afterSaleService.update(new LambdaUpdateWrapper() .eq(AfterSale::getId, afterSale.getId()) .set(AfterSale::getRefundTime, new Date())); + this.updateReturnGoodsNumber(afterSale); + //记录退款流水 storeFlowService.refundOrder(afterSale); } + /** + * 功能描述: 修改子订单中已售后退款商品数量 + * @Author ftyy + * @Description //TODO + * @Date 17:33 2021/11/18 + * @Param [afterSale] + * @return void + **/ + private void updateReturnGoodsNumber(AfterSale afterSale){ + //根据商品id及订单sn获取子订单 + OrderItem orderItem = orderItemService.getOne(new LambdaQueryWrapper() + .eq(OrderItem::getOrderSn, afterSale.getOrderSn()) + .eq(OrderItem::getGoodsId, afterSale.getGoodsId())); + //修改子订单订单中的退货数量 + orderItemService.update(new LambdaUpdateWrapper() + .eq(OrderItem::getOrderSn,afterSale.getOrderSn()) + .eq(OrderItem::getGoodsId,afterSale.getGoodsId()) + .set(OrderItem::getReturnGoodsNumber,(afterSale.getNum()+orderItem.getReturnGoodsNumber()))); + } + /** * 订单取消 * diff --git a/framework/src/main/java/cn/lili/modules/store/entity/dos/StoreDetail.java b/framework/src/main/java/cn/lili/modules/store/entity/dos/StoreDetail.java index 27948bd5..c9e4c359 100644 --- a/framework/src/main/java/cn/lili/modules/store/entity/dos/StoreDetail.java +++ b/framework/src/main/java/cn/lili/modules/store/entity/dos/StoreDetail.java @@ -183,28 +183,9 @@ public class StoreDetail extends BaseIdEntity { public StoreDetail(Store store, AdminStoreApplyDTO adminStoreApplyDTO) { this.storeId = store.getId(); - //过滤字段值 - isNotNull(adminStoreApplyDTO); //设置店铺公司信息、设置店铺银行信息、设置店铺其他信息 BeanUtil.copyProperties(adminStoreApplyDTO, this); this.settlementDay = DateUtil.date(); this.stockWarning = 10; } - - public void isNotNull(AdminStoreApplyDTO adminStoreApplyDTO){ - if("null".equals(adminStoreApplyDTO.getSalesConsigneeName())){ - adminStoreApplyDTO.setSalesConsigneeName(""); - } - if("null".equals(adminStoreApplyDTO.getSalesConsigneeMobile())){ - adminStoreApplyDTO.setSalesConsigneeMobile(""); - } - if("null".equals(adminStoreApplyDTO.getSalesConsigneeDetail())){ - adminStoreApplyDTO.setSalesConsigneeDetail(""); - } - if("null".equals(adminStoreApplyDTO.getDdCode())){ - adminStoreApplyDTO.setDdCode(""); - } - } - - } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/store/serviceimpl/StoreDetailServiceImpl.java b/framework/src/main/java/cn/lili/modules/store/serviceimpl/StoreDetailServiceImpl.java index 66e3bb74..ac668289 100644 --- a/framework/src/main/java/cn/lili/modules/store/serviceimpl/StoreDetailServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/store/serviceimpl/StoreDetailServiceImpl.java @@ -72,8 +72,7 @@ public class StoreDetailServiceImpl extends ServiceImpl implements if (Boolean.TRUE.equals(member.getHaveStore())) { throw new ServiceException(ResultCode.STORE_APPLY_DOUBLE_ERROR); } + //添加店铺 Store store = new Store(member, adminStoreApplyDTO); this.save(store);