From e8f8d89a4248cd4d0a7138cc2e5a36ea9b136699 Mon Sep 17 00:00:00 2001
From: KKSU <15274802129@163.com>
Date: Tue, 11 Feb 2025 17:03:01 +0800
Subject: [PATCH] feat(mall): 添加订单一键发货和取消发货功能

---
 src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallOrderService.java |  108 ++++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 104 insertions(+), 4 deletions(-)

diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallOrderService.java b/src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallOrderService.java
index 0f87fc5..2f6a777 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallOrderService.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallOrderService.java
@@ -2,10 +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.OrderStatusEnum;
+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.*;
@@ -19,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
@@ -490,6 +495,101 @@
     }
 
     @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) {

--
Gitblit v1.9.1