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 | 539 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 524 insertions(+), 15 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 e563aff..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,33 +2,40 @@ import cc.mrbird.febs.common.entity.FebsResponse; import cc.mrbird.febs.common.entity.QueryRequest; -import cc.mrbird.febs.mall.dto.DeliverGoodsDto; -import cc.mrbird.febs.mall.dto.MallOrderInfoDto; -import cc.mrbird.febs.mall.entity.MallExpressInfo; -import cc.mrbird.febs.mall.entity.MallOrderInfo; -import cc.mrbird.febs.mall.entity.MallOrderItem; -import cc.mrbird.febs.mall.mapper.MallExpressInfoMapper; -import cc.mrbird.febs.mall.mapper.MallOrderInfoMapper; -import cc.mrbird.febs.mall.mapper.MallOrderItemMapper; +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.*; import cc.mrbird.febs.mall.service.IAdminMallOrderService; -import cc.mrbird.febs.mall.vo.AdminMallOrderInfoVo; -import cc.mrbird.febs.mall.vo.AdminMallOrderVo; -import cc.mrbird.febs.mall.vo.AdminOrderDetailVo; +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; import cn.hutool.core.util.StrUtil; 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 @Service @RequiredArgsConstructor +@Transactional public class AdminMallOrderService extends ServiceImpl<MallOrderInfoMapper, MallOrderInfo> implements IAdminMallOrderService { private final MallOrderInfoMapper mallOrderInfoMapper; @@ -37,10 +44,59 @@ private final MallOrderItemMapper mallOrderItemMapper; + private final MallOrderRefundMapper mallOrderRefundMapper; + + private final MallOrderRefundOperationMapper mallOrderRefundOperationMapper; + + private final MallOrderRefundAddressMapper mallOrderRefundAddressMapper; + + private final MallGoodsCommentMapper mallGoodsCommentMapper; + + private final MallMoneyFlowMapper mallMoneyFlowMapper; + + private final IApiMallMemberWalletService iApiMallMemberWalletService; + + 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; } @@ -59,6 +115,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("请输入物流单号"); @@ -68,13 +128,16 @@ return new FebsResponse().fail().message("请输入物流公司"); } MallExpressInfo mallExpressInfo = new MallExpressInfo(); - mallExpressInfo.setMemberId(mallExpressInfo.getMemberId()); + mallExpressInfo.setMemberId(mallOrderInfo.getMemberId()); + mallExpressInfo.setOrderId(mallOrderInfo.getId()); mallExpressInfo.setExpressNo(expressNo); 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(); } @@ -91,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()); @@ -100,5 +163,451 @@ return adminOrderDetailVo; } + @Override + public IPage<AdminMallOrderRefundVo> getRefundListInPage(MallOrderRefundDto mallOrderRefundDto, QueryRequest request) { + Page<AdminMallOrderRefundVo> page = new Page<>(request.getPageNum(), request.getPageSize()); + IPage<AdminMallOrderRefundVo> adminMallOrderRefundVos = mallOrderRefundMapper.selectRefundListInPage(page, mallOrderRefundDto); + return adminMallOrderRefundVos; + } + @Override + public IPage<AdminMallOrderRefundOperationVo> seeRefund(QueryRequest request, MallOrderRefund mallOrderRefund) { + Page<AdminMallOrderRefundOperationVo> page = new Page<>(request.getPageNum(), request.getPageSize()); + IPage<AdminMallOrderRefundOperationVo> adminMallOrderRefundOperationVos = mallOrderRefundOperationMapper.selectRefundOperationInPage(page, mallOrderRefund); + return adminMallOrderRefundOperationVos; + } + + @Override + public FebsResponse agreeRefund(Long id) { + MallOrderRefund mallOrderRefund = mallOrderRefundMapper.selectById(id); + if(ObjectUtil.isEmpty(mallOrderRefund)){ + return new FebsResponse().fail().message("系统繁忙,请刷新重试"); + } + Integer status = mallOrderRefund.getStatus(); + if(status != 1){ + return new FebsResponse().fail().message("申请记录不是已申请状态,请刷新页面"); + } + mallOrderRefund.setStatus(5); + mallOrderRefundMapper.updateById(mallOrderRefund); + + MallOrderInfo mallOrderInfo = mallOrderInfoMapper.selectById(mallOrderRefund.getOrderId()); + mallOrderInfo.setStatus(6); + mallOrderInfoMapper.updateById(mallOrderInfo); + + if(!"微信支付".equals(mallOrderInfo.getPayMethod()) && !"支付宝支付".equals(mallOrderInfo.getPayMethod())){ + BigDecimal amount = mallOrderRefund.getAmount(); + //用户钱包增加对应的余额 + iApiMallMemberWalletService.addBalance(amount, mallOrderInfo.getMemberId()); + + mallMoneyFlowService.addMoneyFlow(mallOrderRefund.getMemberId(), amount, MoneyFlowTypeEnum.REFUND.getValue(), mallOrderInfo.getOrderNo(), FlowTypeEnum.BALANCE.getValue()); + } + + MallOrderRefundOperation mallOrderRefundOperation = new MallOrderRefundOperation(); + mallOrderRefundOperation.setRefundId(mallOrderRefund.getId()); + mallOrderRefundOperation.setOrderId(mallOrderRefund.getOrderId()); + mallOrderRefundOperation.setContent("已同意退款不退货申请"); + mallOrderRefundOperationMapper.insert(mallOrderRefundOperation); + + return new FebsResponse().success(); + } + + @Override + public FebsResponse disagreeRefund(Long id) { + MallOrderRefund mallOrderRefund = mallOrderRefundMapper.selectById(id); + if(ObjectUtil.isEmpty(mallOrderRefund)){ + return new FebsResponse().fail().message("系统繁忙,请刷新重试"); + } + Integer status = mallOrderRefund.getStatus(); + if(status != 1){ + return new FebsResponse().fail().message("申请记录不是已申请状态,请刷新页面"); + } + mallOrderRefund.setStatus(3); + mallOrderRefundMapper.updateById(mallOrderRefund); + + MallOrderRefundOperation mallOrderRefundOperation = new MallOrderRefundOperation(); + mallOrderRefundOperation.setRefundId(mallOrderRefund.getId()); + mallOrderRefundOperation.setOrderId(mallOrderRefund.getOrderId()); + mallOrderRefundOperation.setContent("不同意退款申请"); + mallOrderRefundOperationMapper.insert(mallOrderRefundOperation); + //恢复订单状态 + MallOrderInfo mallOrderInfo = mallOrderInfoMapper.selectById(mallOrderRefund.getOrderId()); + mallOrderInfo.setStatus(mallOrderRefund.getBeforeStatus()); + mallOrderInfoMapper.updateById(mallOrderInfo); + + return new FebsResponse().success(); + } + + @Override + public FebsResponse refundConfirm(Long id) { + MallOrderRefund mallOrderRefund = mallOrderRefundMapper.selectById(id); + if(ObjectUtil.isEmpty(mallOrderRefund)){ + return new FebsResponse().fail().message("系统繁忙,请刷新重试"); + } + Integer status = mallOrderRefund.getStatus(); + if(status != 4){ + return new FebsResponse().fail().message("申请记录不是已提交物流信息状态,请刷新页面"); + } + mallOrderRefund.setStatus(5); + mallOrderRefundMapper.updateById(mallOrderRefund); + + MallOrderRefundOperation mallOrderRefundOperation = new MallOrderRefundOperation(); + mallOrderRefundOperation.setRefundId(mallOrderRefund.getId()); + mallOrderRefundOperation.setOrderId(mallOrderRefund.getOrderId()); + mallOrderRefundOperation.setContent("已退款到用户账户"); + mallOrderRefundOperationMapper.insert(mallOrderRefundOperation); + + MallOrderInfo mallOrderInfo = mallOrderInfoMapper.selectById(mallOrderRefund.getOrderId()); + if(ObjectUtil.isEmpty(mallOrderInfo)){ + return new FebsResponse().fail().message("系统繁忙,请刷新重试"); + } + mallOrderInfo.setStatus(6); + mallOrderInfoMapper.updateById(mallOrderInfo); + + BigDecimal refundAmount = mallOrderRefund.getAmount(); + //用户钱包增加对应的余额 + iApiMallMemberWalletService.addBalance(refundAmount, mallOrderInfo.getMemberId()); + + //新增一条资金流水 + mallMoneyFlowService.addMoneyFlow(mallOrderRefund.getMemberId(), refundAmount, MoneyFlowTypeEnum.REFUND.getValue(), mallOrderInfo.getOrderNo(), FlowTypeEnum.BALANCE.getValue()); + return new FebsResponse().success(); + } + + @Override + public IPage<AdminMallOrderRefundAddressVo> getMallOrderRefundAddressInPage(MallOrderRefundAddressDto mallOrderRefundAddressDto, QueryRequest request) { + Page<AdminMallOrderRefundAddressVo> page = new Page<>(request.getPageNum(), request.getPageSize()); + IPage<AdminMallOrderRefundAddressVo> adminMallOrderRefundAddressVos = mallOrderRefundAddressMapper.getMallOrderRefundAddressInPage(page, mallOrderRefundAddressDto); + return adminMallOrderRefundAddressVos; + } + + @Override + public AdminMallOrderRefundAddressVo getMallOrderRefundAddressInfoById(long id) { + AdminMallOrderRefundAddressVo AdminMallOrderRefundAddressVo = mallOrderRefundAddressMapper.getMallOrderRefundAddressInfoById(id); + return AdminMallOrderRefundAddressVo; + } + + @Override + public FebsResponse addressUpdate(AddressUpdateDto addressUpdateDto) { + Long id = addressUpdateDto.getId(); + MallOrderRefundAddress mallOrderRefundAddress = mallOrderRefundAddressMapper.selectById(id); + mallOrderRefundAddress.setName(addressUpdateDto.getName()); + mallOrderRefundAddress.setPhone(addressUpdateDto.getPhone()); + mallOrderRefundAddress.setAddress(addressUpdateDto.getAddress()); + mallOrderRefundAddressMapper.updateById(mallOrderRefundAddress); + return new FebsResponse().success(); + } + + @Override + public FebsResponse deleteAddress(Long id) { + mallOrderRefundAddressMapper.deleteById(id); + return new FebsResponse().success(); + } + + @Override + public FebsResponse addAddress(AddAddressDto addAddressDto) { + MallOrderRefundAddress mallOrderRefundAddress = new MallOrderRefundAddress(); + mallOrderRefundAddress.setName(addAddressDto.getName()); + mallOrderRefundAddress.setPhone(addAddressDto.getPhone()); + mallOrderRefundAddress.setAddress(addAddressDto.getAddress()); + mallOrderRefundAddressMapper.insert(mallOrderRefundAddress); + return new FebsResponse().success(); + } + + @Override + public List<AdminAddAddressTreeVo> getRefundAddress() { + List<AdminAddAddressTreeVo> list = mallOrderRefundAddressMapper.getRefundAddress(); + return list; + } + + @Override + public FebsResponse withAddressUpdate(WithAddressUpdateDto withAddressUpdateDto) { + Long addressId = withAddressUpdateDto.getAddressId(); + MallOrderRefundAddress mallOrderRefundAddress = mallOrderRefundAddressMapper.selectById(addressId); + + MallOrderRefund mallOrderRefund = mallOrderRefundMapper.selectById(withAddressUpdateDto.getId()); + if(ObjectUtil.isEmpty(mallOrderRefund)){ + return new FebsResponse().fail().message("系统繁忙,请刷新重试"); + } + Integer status = mallOrderRefund.getStatus(); + if(status != 1){ + return new FebsResponse().fail().message("申请记录不是已申请状态,请刷新页面"); + } + mallOrderRefund.setStatus(2); + mallOrderRefund.setName(mallOrderRefundAddress.getName()); + mallOrderRefund.setPhone(mallOrderRefundAddress.getPhone()); + mallOrderRefund.setAddress(mallOrderRefundAddress.getAddress()); + mallOrderRefundMapper.updateById(mallOrderRefund); + + MallOrderRefundOperation mallOrderRefundOperation = new MallOrderRefundOperation(); + mallOrderRefundOperation.setRefundId(mallOrderRefund.getId()); + mallOrderRefundOperation.setOrderId(mallOrderRefund.getOrderId()); + mallOrderRefundOperation.setContent("已同意退款退货申请"); + mallOrderRefundOperationMapper.insert(mallOrderRefundOperation); + + return new FebsResponse().success(); + } + + @Override + public AdminMallOrderRefundVo getMallOrderRefundInfoById(long id) { + return mallOrderRefundMapper.getMallOrderRefundInfoById(id); + } + + @Override + public IPage<AdminPayMethodVo> getPayMethodListInPage(PayMethodDto payMethodDto, QueryRequest request) { + payMethodDto.setType("PAYMENT_METHOD"); + Page<AdminPayMethodVo> page = new Page<>(request.getPageNum(), request.getPageSize()); + IPage<AdminPayMethodVo> adminPayMethodVos = dataDictionaryCustomMapper.getPayMethodListInPage(page, payMethodDto); + return adminPayMethodVos; + } + + @Override + public AdminMallPayMethodEditVo getMallPayMethodEditInfoById(long id) { + AdminMallPayMethodEditVo adminMallPayMethodEditVo = dataDictionaryCustomMapper.getMallPayMethodEditInfoById(id); + return adminMallPayMethodEditVo; + } + + @Override + public FebsResponse payMethodEdit(PayMethodEditDto payMethodEditDto) { + DataDictionaryCustom dataDictionaryCustom = dataDictionaryCustomMapper.selectById(payMethodEditDto.getId()); + if(ObjectUtil.isEmpty(dataDictionaryCustom)){ + return new FebsResponse().fail().message("系统繁忙,请刷新重试"); + } + dataDictionaryCustom.setValue(payMethodEditDto.getValue()); + dataDictionaryCustomMapper.updateById(dataDictionaryCustom); + return new FebsResponse().success(); + } + + @Override + public FebsResponse cancelOrder(Long id) { + MallOrderInfo mallOrderInfo = mallOrderInfoMapper.selectById(id); + if(ObjectUtil.isEmpty(mallOrderInfo)){ + return new FebsResponse().fail().message("系统繁忙,请刷新重试"); + } + Integer status = mallOrderInfo.getStatus(); + if(status != 2){ + return new FebsResponse().fail().message("订单不是代发货状态"); + } + mallOrderInfo.setStatus(7); + mallOrderInfoMapper.updateById(mallOrderInfo); + return new FebsResponse().success(); + } + + @Override + public AdminMallMemberPaymentVo getMallMemberRefundPayInfoByFlowId(long id) { + AdminMallMemberPaymentVo adminMallMemberPaymentVo = new AdminMallMemberPaymentVo(); + MallOrderRefund mallOrderRefund = mallOrderRefundMapper.selectById(id); + AdminMallMemberPaymentVo adminMallMemberPaymentVoa = mallMemberPaymentMapper.getMallMemberPaymentInfoByMemberId(mallOrderRefund.getMemberId()); + if(ObjectUtil.isNotEmpty(adminMallMemberPaymentVoa)){ + adminMallMemberPaymentVo = adminMallMemberPaymentVoa; + } + 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 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) { + 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); + } } -- Gitblit v1.9.1