From c6ac1561db0b2f1c8e3a799d7f49808f4bae67c7 Mon Sep 17 00:00:00 2001 From: Administrator <15274802129@163.com> Date: Tue, 27 May 2025 15:55:58 +0800 Subject: [PATCH] refactor(mall): 优化订单收货类型判断逻辑 --- src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java | 71 ++++++++++++++++++++++++++++++----- 1 files changed, 60 insertions(+), 11 deletions(-) diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java index 5b81368..031f3a6 100644 --- a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java +++ b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java @@ -209,12 +209,16 @@ MallGoods mallGoods = mallGoodsMapper.selectById(sku.getGoodsId()); // todo 纯积分商品一个账号限制购买一次 -// if (new BigDecimal(mallGoods.getPresentPrice()).compareTo(BigDecimal.ZERO) == 0) { -// List<MallOrderItem> items = mallOrderItemMapper.selectItemByGoodsIdUnCancel(mallGoods.getId(), member.getId()); -// if (CollUtil.isNotEmpty(items)) { -// throw new FebsException("积分商品一个账号只能购买一次"); -// } -// } + if (new BigDecimal(mallGoods.getPresentPrice()).compareTo(BigDecimal.ZERO) == 0) { + Integer cnt = item.getCnt(); + if(1 < cnt){ + throw new FebsException("积分商品限购一件"); + } + List<MallOrderItem> items = mallOrderItemMapper.selectItemByGoodsIdUnCancel(mallGoods.getId(), member.getId()); + if (CollUtil.isNotEmpty(items)) { + throw new FebsException("积分商品一个账号限购一次"); + } + } if (MallGoods.ISSALE_STATUS_DISABLED.equals(mallGoods.getIsSale())) { throw new FebsException(mallGoods.getGoodsName() + "已下架"); @@ -226,6 +230,7 @@ } BigDecimal amount = sku.getPresentPrice().multiply(BigDecimal.valueOf(item.getCnt())); + BigDecimal levelOnePrice = sku.getLevelOnePrice().multiply(BigDecimal.valueOf(item.getCnt())); //是否使用优惠卷 if(ObjectUtil.isNotEmpty(addOrderDto.getMemberCouponId())){ Long memberCouponId = addOrderDto.getMemberCouponId(); @@ -238,6 +243,7 @@ } } orderItem.setAmount(amount); + orderItem.setLevelOnePrice(levelOnePrice); orderItem.setScoreAmount(scoreAmountMap.get(item.getSkuId())); orderItem.setCnt(item.getCnt()); orderItem.setOrderId(orderInfo.getId()); @@ -275,10 +281,21 @@ mallMemberCoupon.setState(2); mallMemberCouponMapper.updateById(mallMemberCoupon); - //运费 - BigDecimal delivaryAmount = addOrderDto.getDeliveryAmount() == null ? BigDecimal.ZERO : addOrderDto.getDeliveryAmount(); - orderInfo.setCarriage(delivaryAmount); + BigDecimal delivaryAmount = BigDecimal.ZERO; + if(StrUtil.isEmpty(addOrderDto.getTakeUniqueCode())){ + delivaryAmount = addOrderDto.getDeliveryAmount() == null ? BigDecimal.ZERO : addOrderDto.getDeliveryAmount(); + orderInfo.setCarriage(delivaryAmount); + }else{ + MallTeamLeader mallTeamLeader = mallTeamLeaderMapper.selectLeaderByUniqueCode(addOrderDto.getTakeUniqueCode()); + if(ObjectUtil.isEmpty(mallTeamLeader)){ + throw new FebsException("自提点信息异常"); + } + orderInfo.setCarriage(delivaryAmount); + orderInfo.setTakeCode(ShareCodeUtil.toSerialCode(orderInfo.getId()) + MallUtils.getRandomNum(10)); + orderInfo.setTakeUniqueCode(mallTeamLeader.getUniqueCode()); + orderInfo.setDeliveryType(1); + } total = total.add(delivaryAmount); orderInfo.setAmount(total); orderInfo.setScoreAmount(totalScoreAmount); @@ -294,6 +311,7 @@ orderInfo.setLatitude(address.getLatitude()); orderInfo.setLongitude(address.getLongitude()); this.baseMapper.updateById(orderInfo); + //过期时间修改成24小时 agentProducer.sendOrderCancelDelayMsg(orderInfo.getId(), 24 * 60 * 60 * 1000L); return orderInfo.getId(); @@ -693,7 +711,7 @@ orderInfo.setPayOrderNo(payResultStr); orderInfo.setPayMethod("支付宝支付"); - agentProducer.sendOrderReturn(orderInfo.getId()); +// agentProducer.sendOrderReturn(orderInfo.getId()); break; case "3": @@ -837,7 +855,21 @@ // } // } + OrderDetailVo orderDetailVo = MallOrderInfoConversion.INSTANCE.entityToDetailVo(orderInfo); + if(StrUtil.isNotEmpty(orderInfo.getTakeUniqueCode())){ + MallTeamLeader mallTeamLeader = mallTeamLeaderMapper.selectLeaderByUniqueCode(orderInfo.getTakeUniqueCode()); + + if(ObjectUtil.isNotEmpty(mallTeamLeader)){ + orderDetailVo.setLeaderName(mallTeamLeader.getName()); + orderDetailVo.setLeaderPhone(mallTeamLeader.getPhone()); + orderDetailVo.setAddressPic(mallTeamLeader.getAddressPic()); + orderDetailVo.setAddressArea(mallTeamLeader.getAddressArea()); + orderDetailVo.setDetailAddress(mallTeamLeader.getDetailAddress()); + orderDetailVo.setLeaderLongitude(mallTeamLeader.getLongitude()); + orderDetailVo.setLeaderLatitude(mallTeamLeader.getLatitude()); + } + } MallExpressInfo expressInfo = expressInfoMapper.selectByOrderId(orderInfo.getId()); if(ObjectUtil.isNotEmpty(expressInfo)){ @@ -864,13 +896,29 @@ @Transactional(rollbackFor = Exception.class) public void confirmOrder(Long id) { MallMember member = LoginUserUtil.getLoginUser(); - MallOrderInfo orderInfo = this.baseMapper.selectOrderByMemberIdAndId(member.getId(), id); +// MallOrderInfo orderInfo = this.baseMapper.selectOrderByMemberIdAndId(member.getId(), id); + MallOrderInfo orderInfo = this.baseMapper.selectOne( + new LambdaQueryWrapper<MallOrderInfo>() + .eq(MallOrderInfo::getMemberId, member.getId()) + .eq(MallOrderInfo::getId, id) + .last("limit 1") + ); if (orderInfo == null || AppContants.DEL_FLAG_Y == orderInfo.getDelFlag()) { throw new FebsException("订单不存在"); } if (orderInfo.getStatus() != OrderStatusEnum.WAIT_FINISH.getValue()) { throw new FebsException("该状态不能确认收货"); + } + if(orderInfo.getDeliveryType().equals(1)){ + List<MallOrderItem> mallOrderItems = mallOrderItemMapper.selectList( + new LambdaQueryWrapper<MallOrderItem>() + .eq(MallOrderItem::getOrderId, id) + .eq(MallOrderItem::getLeaderState, 0) + ); + if(CollUtil.isNotEmpty(mallOrderItems)){ + throw new FebsException("请先核销"+mallOrderItems.get(0).getGoodsName()); + } } List<MallRefundEntity> mallRefundEntities = mallRefundMapper.selectByItemIdAndOrderIdAndState(null, orderInfo.getId(), 3); @@ -1134,6 +1182,7 @@ apiLeaderRefundOrderDto.setItemId(mallOrderItem.getId()); apiLeaderRefundOrderDto.setAgreeState(1); iApiMallTeamLeaderService.leaderRefundOrder(apiLeaderRefundOrderDto); + i++; } return new FebsResponse().success(); } -- Gitblit v1.9.1