Administrator
2025-05-28 f16f74cacb9ef0ae4be89ed15353b6a449479d8c
src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallOrderService.java
@@ -2,11 +2,16 @@
import cc.mrbird.febs.common.entity.FebsResponse;
import cc.mrbird.febs.common.entity.QueryRequest;
import cc.mrbird.febs.common.enumerates.*;
import cc.mrbird.febs.common.exception.FebsException;
import cc.mrbird.febs.common.utils.AppContants;
import cc.mrbird.febs.common.utils.LoginUserUtil;
import cc.mrbird.febs.mall.dto.*;
import cc.mrbird.febs.mall.entity.*;
import cc.mrbird.febs.mall.mapper.*;
import cc.mrbird.febs.mall.service.IAdminMallOrderService;
import cc.mrbird.febs.mall.service.IApiMallMemberWalletService;
import cc.mrbird.febs.mall.service.IMallMoneyFlowService;
import cc.mrbird.febs.mall.vo.*;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil;
@@ -19,6 +24,8 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
@Slf4j
@@ -39,6 +46,8 @@
    private final MallOrderRefundAddressMapper mallOrderRefundAddressMapper;
    private final MallGoodsCommentMapper mallGoodsCommentMapper;
    private final MallMoneyFlowMapper mallMoneyFlowMapper;
    private final IApiMallMemberWalletService iApiMallMemberWalletService;
@@ -46,11 +55,44 @@
    private final MallMemberPaymentMapper mallMemberPaymentMapper;
    private final DataDictionaryCustomMapper dataDictionaryCustomMapper;
    private final IMallMoneyFlowService mallMoneyFlowService;
    private final MallRefundMapper mallRefundMapper;
    private final MallMemberMapper mallMemberMapper;
    @Override
    public IPage<MallOrderInfo> findOrderListInPage(MallOrderInfo mallOrderInfo, QueryRequest request) {
        Page<MallOrderInfo> page = new Page<>(request.getPageNum(), request.getPageSize());
        return this.baseMapper.selectInPage(mallOrderInfo, page);
    }
    @Override
    public IPage<AdminMallOrderInfoVo> getOrderListInPage(MallOrderInfoDto mallOrderInfo, QueryRequest request) {
        Page<AdminMallOrderInfoVo> page = new Page<>(request.getPageNum(), request.getPageSize());
        IPage<AdminMallOrderInfoVo> adminMallOrderInfoVos = this.baseMapper.selectOrderListInPage(page, mallOrderInfo);
        if(CollUtil.isNotEmpty(adminMallOrderInfoVos.getRecords())){
            for(AdminMallOrderInfoVo adminMallOrderInfoVo : adminMallOrderInfoVos.getRecords()){
                Long orderId = adminMallOrderInfoVo.getId();
                adminMallOrderInfoVo.setGoodsAmount(adminMallOrderInfoVo.getAmount().subtract(adminMallOrderInfoVo.getCarriage()));
                List<MallOrderItem> mallOrderItemList = mallOrderItemMapper.selectListByOrderId(orderId);
                if(CollUtil.isNotEmpty(mallOrderItemList)){
                    StringBuffer stringBuffer = new StringBuffer();
                    for(MallOrderItem mallOrderItem : mallOrderItemList){
                        stringBuffer.append(mallOrderItem.getGoodsName())
                                .append("-")
                                .append(mallOrderItem.getSkuName())
                                .append("*").append(mallOrderItem.getCnt()).append(";");
//                        if(ObjectUtil.isNotEmpty(mallOrderItem.getMemberInviteId())){
//                            MallMember mallMember = mallMemberMapper.selectInfoByInviteId(mallOrderItem.getMemberInviteId());
//                            if(ObjectUtil.isNotEmpty(mallMember)){
//                                adminMallOrderInfoVo.setRefererName(mallMember.getName());
//                            }
//                        }
                    }
                    adminMallOrderInfoVo.setGoodsName(stringBuffer.toString());
                }
            }
        }
        return adminMallOrderInfoVos;
    }
@@ -69,6 +111,10 @@
        if(2 != status){
            return new FebsResponse().fail().message("订单不是待发货状态");
        }
        Integer deliveryType = mallOrderInfo.getDeliveryType();
        if(2 != deliveryType){
            return new FebsResponse().fail().message("订单的配送方式不是快递");
        }
        String expressNo = deliverGoodsDto.getExpressNo();
        if(StrUtil.isEmpty(expressNo)){
            return new FebsResponse().fail().message("请输入物流单号");
@@ -84,8 +130,10 @@
        mallExpressInfo.setExpressCom(expressCom);
        mallExpressInfoMapper.insert(mallExpressInfo);
        mallOrderInfo.setStatus(3);
        mallOrderInfoMapper.updateById(mallOrderInfo);
        mallOrderInfoMapper.updateOrderStateAndDeliveryState(mallOrderInfo.getId(),
                OrderStatusEnum.WAIT_FINISH.getValue(),
                OrderDeliveryStateEnum.DELIVERY_FINISH.getValue());
        return new FebsResponse().success();
    }
@@ -102,7 +150,7 @@
            StringBuffer orderItems = new StringBuffer();
            for (MallOrderItem item : mallOrderItems){
                StringBuffer orderItem = new StringBuffer();
                orderItems.append(item.getGoodsName()+"-"+item.getCnt()+"*"+item.getPrice()+"-合计"+item.getAmount()+"; \n ");
                orderItems.append(item.getGoodsName()+"-"+item.getSkuName()+"-"+item.getCnt()+"*"+item.getPrice()+"-合计"+item.getAmount()+"; \n ");
                orderItems.append(orderItem);
            }
            adminOrderDetailVo.setOrderItems(orderItems.toString());
@@ -143,15 +191,19 @@
        mallOrderInfoMapper.updateById(mallOrderInfo);
        if(!"微信支付".equals(mallOrderInfo.getPayMethod()) && !"支付宝支付".equals(mallOrderInfo.getPayMethod())){
            BigDecimal amount = mallOrderRefund.getAmount();
            //用户钱包增加对应的余额
            iApiMallMemberWalletService.addBalance(mallOrderInfo.getAmount(),mallOrderInfo.getMemberId());
            //新增一条资金流水
            MallMoneyFlow mallMoneyFlow = new MallMoneyFlow();
            mallMoneyFlow.setMemberId(mallOrderRefund.getMemberId());
            mallMoneyFlow.setOrderNo(mallOrderInfo.getOrderNo());
            mallMoneyFlow.setType(4);
            mallMoneyFlow.setAmount(mallOrderInfo.getAmount());
            mallMoneyFlowMapper.insert(mallMoneyFlow);
            iApiMallMemberWalletService.addBalance(amount, mallOrderInfo.getMemberId());
            mallMoneyFlowService.addMoneyFlow(
                    mallOrderInfo.getMemberId(),
                    amount,
                    ScoreFlowTypeEnum.REFUND.getValue(),
                    mallOrderInfo.getOrderNo(),
                    FlowTypeEnum.BALANCE.getValue(),
                    StrUtil.format(ScoreFlowTypeEnum.REFUND.getDesc(),amount),
                    2
            );
        }
        MallOrderRefundOperation mallOrderRefundOperation = new MallOrderRefundOperation();
@@ -215,17 +267,22 @@
        mallOrderInfo.setStatus(6);
        mallOrderInfoMapper.updateById(mallOrderInfo);
        BigDecimal refundAmount = mallOrderRefund.getAmount();
        //用户钱包增加对应的余额
        iApiMallMemberWalletService.addBalance(mallOrderInfo.getAmount(),mallOrderInfo.getMemberId());
        iApiMallMemberWalletService.addBalance(refundAmount, mallOrderInfo.getMemberId());
        //新增一条资金流水
        MallMoneyFlow mallMoneyFlow = new MallMoneyFlow();
        mallMoneyFlow.setMemberId(mallOrderRefund.getMemberId());
        mallMoneyFlow.setOrderNo(mallOrderInfo.getOrderNo());
        mallMoneyFlow.setType(4);
        mallMoneyFlow.setAmount(mallOrderInfo.getAmount());
        mallMoneyFlowMapper.insert(mallMoneyFlow);
        mallMoneyFlowService.addMoneyFlow(
                mallOrderInfo.getMemberId(),
                refundAmount,
                ScoreFlowTypeEnum.REFUND.getValue(),
                mallOrderInfo.getOrderNo(),
                FlowTypeEnum.BALANCE.getValue(),
                StrUtil.format(ScoreFlowTypeEnum.REFUND.getDesc(),refundAmount),
                2
        );
        return new FebsResponse().success();
    }
@@ -359,5 +416,183 @@
        return adminMallMemberPaymentVo;
    }
    @Override
    public IPage<AdminMallGoodsCommentVo> getCommentListInPage(AdminMallGoodsCommentDto adminMallGoodsCommentDto, QueryRequest request) {
        Page<AdminMallGoodsCommentVo> page = new Page<>(request.getPageNum(), request.getPageSize());
        IPage<AdminMallGoodsCommentVo> adminMallGoodsCommentVos = mallGoodsCommentMapper.getCommentListInPage(page, adminMallGoodsCommentDto);
        return adminMallGoodsCommentVos;
    }
    @Override
    public FebsResponse showStateSwitchOn(Long id) {
        MallGoodsComment mallGoodsComment = mallGoodsCommentMapper.selectById(id);
        if (ObjectUtil.isEmpty(mallGoodsComment)) {
            return new FebsResponse().fail().message("评论不存在,请刷新当前页面");
        }
        mallGoodsComment.setShowState(MallGoodsComment.SHOW_STATE_ENABLE);
        mallGoodsCommentMapper.updateById(mallGoodsComment);
        return new FebsResponse().success();
    }
    @Override
    public FebsResponse showStateSwitchOff(Long id) {
        MallGoodsComment mallGoodsComment = mallGoodsCommentMapper.selectById(id);
        if (ObjectUtil.isEmpty(mallGoodsComment)) {
            return new FebsResponse().fail().message("评论不存在,请刷新当前页面");
        }
        mallGoodsComment.setShowState(MallGoodsComment.SHOW_STATE_DISABLED);
        mallGoodsCommentMapper.updateById(mallGoodsComment);
        return new FebsResponse().success();
    }
    @Override
    public void updateOrderStateAndDeliveryState(Long id, int value, int value1) {
        mallOrderInfoMapper.updateOrderStateAndDeliveryState(id,value,value1);
    }
    @Override
    public IPage<MallRefundEntity> getOrderRefundListInPage(MallRefundEntity mallRefundEntity, QueryRequest request) {
        Page<MallRefundEntity> page = new Page<>(request.getPageNum(), request.getPageSize());
        IPage<MallRefundEntity> mallRefundEntityIPage = mallRefundMapper.getOrderRefundListInPage(page, mallRefundEntity);
        List<MallRefundEntity> records = mallRefundEntityIPage.getRecords();
        if(CollUtil.isNotEmpty(records)){
            for(MallRefundEntity mallRefundEntityPic : records){
                String refundPic = mallRefundEntityPic.getRefundPic();
                if(StrUtil.isNotEmpty(refundPic)){
                    String[] split = StrUtil.split(refundPic, ",");
                    mallRefundEntityPic.setRefundPicList(split);
                }
            }
        }
        return mallRefundEntityIPage;
    }
    @Override
    public IPage<AdminGoodsStatisticsVo> goodsStatistics(MallOrderItem mallOrderItem, QueryRequest request) {
        Page<AdminGoodsStatisticsVo> page = new Page<>(request.getPageNum(), request.getPageSize());
        IPage<AdminGoodsStatisticsVo> adminGoodsStatisticsVos = mallOrderInfoMapper.getGoodsStatisticsInPage(page, mallOrderItem);
        return adminGoodsStatisticsVos;
    }
    @Override
    public FebsResponse deliverGoodsUpdate(DeliverGoodsDto deliverGoodsDto) {
        MallOrderInfo mallOrderInfo = mallOrderInfoMapper.selectById(deliverGoodsDto.getId());
        if(ObjectUtil.isEmpty(mallOrderInfo)){
            return new FebsResponse().fail().message("订单不存在,刷新后重试");
        }
        Integer status = mallOrderInfo.getStatus();
        if(3 != status){
            return new FebsResponse().fail().message("订单不是待收货状态");
        }
        Integer deliveryType = mallOrderInfo.getDeliveryType();
        if(2 != deliveryType){
            return new FebsResponse().fail().message("订单的配送方式不是快递");
        }
        String expressNo = deliverGoodsDto.getExpressNo();
        if(StrUtil.isEmpty(expressNo)){
            return new FebsResponse().fail().message("请输入物流单号");
        }
        String expressCom = deliverGoodsDto.getExpressCom();
        if(StrUtil.isEmpty(expressCom)){
            return new FebsResponse().fail().message("请输入物流公司");
        }
        MallExpressInfo mallExpressInfo = mallExpressInfoMapper.selectByOrderId(mallOrderInfo.getId());
        if(ObjectUtil.isEmpty(mallExpressInfo)){
            return new FebsResponse().fail().message("请先发货");
        }
        mallExpressInfo.setExpressNo(expressNo);
        mallExpressInfo.setExpressCom(expressCom);
        mallExpressInfoMapper.updateById(mallExpressInfo);
        return new FebsResponse().success();
    }
    @Override
    public FebsResponse confirmOrder(AdminRefundOrderDto dto) {
        Integer type = dto.getType();
        MallOrderInfo orderInfo = this.baseMapper.selectById(dto.getOrderId());
        if (orderInfo == null || AppContants.DEL_FLAG_Y == orderInfo.getDelFlag()) {
            throw new FebsException("订单不存在");
        }
        if (orderInfo.getStatus() == OrderStatusEnum.REFUNDING.getValue()) {
            throw new FebsException("已提交退款, 请勿重复提交");
        }
        if (orderInfo.getStatus() != OrderStatusEnum.WAIT_SHIPPING.getValue()
                && orderInfo.getStatus() != OrderStatusEnum.WAIT_FINISH.getValue()) {
            throw new FebsException("该订单不能退款");
        }
        Integer beforeStatus = orderInfo.getStatus();
        Long memberId = orderInfo.getMemberId();
        orderInfo.setStatus(OrderStatusEnum.REFUNDING.getValue());
        this.baseMapper.updateById(orderInfo);
        MallOrderRefund orderRefund = mallOrderRefundMapper.selectOrderRefundByOrderId(orderInfo.getId());
        if (orderRefund == null) {
            orderRefund = new MallOrderRefund();
            orderRefund.setOrderId(orderInfo.getId());
            orderRefund.setMemberId(memberId);
            orderRefund.setType(type);
            orderRefund.setRefundTime(new Date());
            orderRefund.setBeforeStatus(beforeStatus);
            orderRefund.setStatus(OrderRefundStatusEnum.REFUND_APPLY.getValue());
            // 未发货则退运费,发货了则不退
            if (beforeStatus == 2) {
                orderRefund.setAmount(orderInfo.getAmount().add(orderInfo.getCarriage()));
            } else {
                orderRefund.setAmount(orderInfo.getAmount());
            }
            orderRefund.setDesp(StrUtil.format("系统发起退款{}", orderRefund.getAmount()));
            orderRefund.setReason(StrUtil.format("系统发起退款{}", orderRefund.getAmount()));
            mallOrderRefundMapper.insert(orderRefund);
        } else {
            orderRefund.setType(type);
            orderRefund.setRefundTime(new Date());
            orderRefund.setBeforeStatus(beforeStatus);
            orderRefund.setStatus(OrderRefundStatusEnum.REFUND_APPLY.getValue());
            // 未发货则退运费,发货了则不退
            if (beforeStatus == 2) {
                orderRefund.setAmount(orderInfo.getAmount().add(orderInfo.getCarriage()));
            } else {
                orderRefund.setAmount(orderInfo.getAmount());
            }
            orderRefund.setDesp(StrUtil.format("系统发起退款{}", orderRefund.getAmount()));
            orderRefund.setReason(StrUtil.format("系统发起退款{}", orderRefund.getAmount()));
            mallOrderRefundMapper.updateById(orderRefund);
        }
        MallOrderRefundOperation operation = new MallOrderRefundOperation();
        operation.setOrderId(orderInfo.getId());
        operation.setRefundId(orderRefund.getId());
        operation.setContent(StrUtil.format("系统发起退款{}", orderRefund.getAmount()));
        mallOrderRefundOperationMapper.insert(operation);
        return new FebsResponse().success().message("操作成功");
    }
    @Override
    public void deliverGoodsByOrderNo(DeliverGoodsDto deliverGoodsDto) {
        MallOrderInfo mallOrderInfo = mallOrderInfoMapper.selectByOrderNo(deliverGoodsDto.getOrderNo());
        if (mallOrderInfo == null) {
            return;
        }
        MallExpressInfo mallExpressInfo = new MallExpressInfo();
        mallExpressInfo.setMemberId(mallOrderInfo.getMemberId());
        mallExpressInfo.setOrderId(mallOrderInfo.getId());
        mallExpressInfo.setExpressNo(deliverGoodsDto.getExpressNo());
        mallExpressInfo.setExpressCom(deliverGoodsDto.getExpressCom());
        mallExpressInfo.setExpressCode(deliverGoodsDto.getExpressCode());
        mallExpressInfoMapper.insert(mallExpressInfo);
        mallOrderInfoMapper.updateOrderStateAndDeliveryState(mallOrderInfo.getId(),
                OrderStatusEnum.WAIT_FINISH.getValue(),
                OrderDeliveryStateEnum.DELIVERY_FINISH.getValue());
//        mallOrderInfo.setStatus(3);
//        mallOrderInfoMapper.updateById(mallOrderInfo);
    }
}