KKSU
2025-02-11 e8f8d89a4248cd4d0a7138cc2e5a36ea9b136699
src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallOrderService.java
@@ -2,9 +2,8 @@
import cc.mrbird.febs.common.entity.FebsResponse;
import cc.mrbird.febs.common.entity.QueryRequest;
import cc.mrbird.febs.common.enumerates.FlowTypeEnum;
import cc.mrbird.febs.common.enumerates.MoneyFlowTypeEnum;
import cc.mrbird.febs.common.enumerates.OrderDeliveryStateEnum;
import cc.mrbird.febs.common.enumerates.*;
import cc.mrbird.febs.common.utils.ValidateEntityUtils;
import cc.mrbird.febs.mall.dto.*;
import cc.mrbird.febs.mall.entity.*;
import cc.mrbird.febs.mall.mapper.*;
@@ -18,12 +17,19 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.best.javaSdk.ClientParamEnum;
import com.best.javaSdk.ClientParamService;
import com.best.javaSdk.kdCancelOrderNotify.request.KdCancelOrderNotifyReq;
import com.best.javaSdk.kdCancelOrderNotify.response.KdCancelOrderNotifyRsp;
import com.best.javaSdk.kdCreateWaybillOrderPdfNotify.request.*;
import com.best.javaSdk.kdCreateWaybillOrderPdfNotify.response.KdCreateWaybillOrderPdfNotifyRsp;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
@Slf4j
@@ -55,6 +61,7 @@
    private final DataDictionaryCustomMapper dataDictionaryCustomMapper;
    private final IMallMoneyFlowService mallMoneyFlowService;
    private final MallRefundMapper mallRefundMapper;
    private final MallMemberMapper mallMemberMapper;
    @Override
@@ -70,11 +77,21 @@
        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.getCnt()).append(";");
                        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());
                }
@@ -117,9 +134,10 @@
        mallExpressInfo.setExpressCom(expressCom);
        mallExpressInfoMapper.insert(mallExpressInfo);
        mallOrderInfo.setStatus(3);
        mallOrderInfo.setDeliveryState(OrderDeliveryStateEnum.DELIVERY_ING.getValue());
        mallOrderInfoMapper.updateById(mallOrderInfo);
        mallOrderInfoMapper.updateOrderStateAndDeliveryState(mallOrderInfo.getId(),
                OrderStatusEnum.WAIT_FINISH.getValue(),
                OrderDeliveryStateEnum.DELIVERY_FINISH.getValue());
        return new FebsResponse().success();
    }
@@ -136,7 +154,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());
@@ -436,6 +454,142 @@
    }
    @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 deliverPdfGoods(Long id) {
        MallOrderInfo mallOrderInfo = ValidateEntityUtils.ensureColumnReturnEntity(id, MallOrderInfo::getId, mallOrderInfoMapper::selectOne, "订单不存在");
        ValidateEntityUtils.ensureEqual(mallOrderInfo.getStatus(), OrderStatusEnum.WAIT_SHIPPING.getValue(), "订单不是待发货状态");
        KdCreateWaybillOrderPdfNotifyReq kdCreateWaybillOrderPdfNotifyReq = new KdCreateWaybillOrderPdfNotifyReq();
        MallMember mallMember = ValidateEntityUtils.ensureColumnReturnEntity(mallOrderInfo.getMemberId(), MallMember::getId, mallMemberMapper::selectOne, "会员不存在");
        kdCreateWaybillOrderPdfNotifyReq.setTxLogisticId(mallOrderInfo.getOrderNo());
        kdCreateWaybillOrderPdfNotifyReq.setServiceType("1");//服务类型(0-线下下单,1-线上下单)
        kdCreateWaybillOrderPdfNotifyReq.setSpecial("1");
        //发货人信息
        Sender sender = new Sender();
        sender.setName(dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
                DataDictionaryEnum.SENDER_NAME.getType(),
                DataDictionaryEnum.SENDER_NAME.getCode()
        ).getValue());
        sender.setMobile(dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
                DataDictionaryEnum.SENDER_MOBILE.getType(),
                DataDictionaryEnum.SENDER_MOBILE.getCode()
        ).getValue());
        sender.setAddress(dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
                DataDictionaryEnum.SENDER_ADDRESS.getType(),
                DataDictionaryEnum.SENDER_ADDRESS.getCode()
        ).getValue());
        kdCreateWaybillOrderPdfNotifyReq.setSender(sender);
        //收件人
        Receiver receiver = new Receiver();
        receiver.setName(mallMember.getRealName());
        receiver.setMobile(mallMember.getPhone());
        receiver.setAddress(mallOrderInfo.getAddress());
        kdCreateWaybillOrderPdfNotifyReq.setReceiver(receiver);
        //包裹
        Items items = new Items();
        ArrayList<Item> itemList = new ArrayList<>();
        List<MallOrderItem> mallOrderItemList = ValidateEntityUtils
                .ensureColumnReturnEntityList(id, MallOrderItem::getOrderId, mallOrderItemMapper::selectList, "订单不存在");
        StringBuffer itemName = new StringBuffer();
        itemName.append("商品:");
        mallOrderItemList.forEach(mallOrderItem -> {
            itemName.append(mallOrderItem.getGoodsName()+"-"+mallOrderItem.getSkuName());
        });
        Item item = new Item();
        item.setItemName(itemName.toString());
        itemList.add(item);
        items.setItem(itemList);
        kdCreateWaybillOrderPdfNotifyReq.setItems(items);
        kdCreateWaybillOrderPdfNotifyReq.setPiece(1);
        KdCreateWaybillOrderPdfNotifyRsp pdfOrder = ClientParamService.getInstance(ClientParamEnum.TEST.name()).createPdfOrder(kdCreateWaybillOrderPdfNotifyReq);
        ValidateEntityUtils.ensureEqual(pdfOrder.getResult(), true, "一键发货失败,创建PDF电子面单异常");
        //更新发货状态
        mallOrderInfoMapper.updateOrderStateAndDeliveryState(
                mallOrderInfo.getId(),
                OrderStatusEnum.WAIT_FINISH.getValue(),
                OrderDeliveryStateEnum.DELIVERY_ING.getValue());
        MallExpressInfo mallExpressInfo = new MallExpressInfo();
        mallExpressInfo.setMemberId(mallOrderInfo.getMemberId());
        mallExpressInfo.setOrderId(mallOrderInfo.getId());
        mallExpressInfo.setExpressNo(pdfOrder.getMailNo());
        mallExpressInfo.setExpressCom("Best Logistic");
        mallExpressInfo.setExpressCode("Best Logistic");
        mallExpressInfoMapper.insert(mallExpressInfo);
        return new FebsResponse().success().data(pdfOrder);
    }
    @Override
    public FebsResponse cancelDeliver(Long id) {
        MallOrderInfo mallOrderInfo = ValidateEntityUtils.ensureColumnReturnEntity(id, MallOrderInfo::getId, mallOrderInfoMapper::selectOne, "订单不存在");
        ValidateEntityUtils.ensureEqual(mallOrderInfo.getStatus(), OrderStatusEnum.WAIT_FINISH.getValue(), "订单不是待收货状态");
        KdCancelOrderNotifyReq kdCancelOrderNotifyReq = new KdCancelOrderNotifyReq();
        kdCancelOrderNotifyReq.setTxLogisticId(mallOrderInfo.getOrderNo());
        kdCancelOrderNotifyReq.setReason("Don't want to buy");
        KdCancelOrderNotifyRsp kdCancelOrderNotifyRsp = ClientParamService.getInstance(ClientParamEnum.TEST.name()).cancelOrder(kdCancelOrderNotifyReq);
        ValidateEntityUtils.ensureEqual(kdCancelOrderNotifyRsp.getResult(), true, "取消发货失败");
        //更新发货状态
        mallOrderInfoMapper.updateOrderStateAndDeliveryState(
                mallOrderInfo.getId(),
                OrderStatusEnum.WAIT_SHIPPING.getValue(),
                OrderDeliveryStateEnum.DELIVERY_WAIT.getValue());
        List<MallExpressInfo> mallExpressInfoList = ValidateEntityUtils.ensureColumnReturnEntityList(mallOrderInfo.getId(), MallExpressInfo::getOrderId, mallExpressInfoMapper::selectList, "未查询到物流信息");
        mallExpressInfoList.forEach(mallExpressInfo -> mallExpressInfoMapper.deleteById(mallExpressInfo.getId()));
        return new FebsResponse().success().message("取消发货成功,请重新发货");
    }
    @Override
    public void deliverGoodsByOrderNo(DeliverGoodsDto deliverGoodsDto) {
        MallOrderInfo mallOrderInfo = mallOrderInfoMapper.selectByOrderNo(deliverGoodsDto.getOrderNo());
        if (mallOrderInfo == null) {
@@ -450,7 +604,10 @@
        mallExpressInfo.setExpressCode(deliverGoodsDto.getExpressCode());
        mallExpressInfoMapper.insert(mallExpressInfo);
        mallOrderInfo.setStatus(3);
        mallOrderInfoMapper.updateById(mallOrderInfo);
        mallOrderInfoMapper.updateOrderStateAndDeliveryState(mallOrderInfo.getId(),
                OrderStatusEnum.WAIT_FINISH.getValue(),
                OrderDeliveryStateEnum.DELIVERY_FINISH.getValue());
//        mallOrderInfo.setStatus(3);
//        mallOrderInfoMapper.updateById(mallOrderInfo);
    }
}