From e28f4db774879138d947b32f7e9f1ec8e5e56077 Mon Sep 17 00:00:00 2001
From: Administrator <15274802129@163.com>
Date: Fri, 12 Jun 2026 15:00:03 +0800
Subject: [PATCH] feat(mall): 优化用户注册登录及订单管理功能

---
 src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java |  256 +++++++++++++-------------------------------------
 1 files changed, 67 insertions(+), 189 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 1ddb84c..b181d54 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
@@ -93,19 +93,16 @@
     @Transactional(rollbackFor = Exception.class)
     public Long createOrder(AddOrderDto addOrderDto) {
         Long memberId = LoginUserUtil.getLoginUser().getId();
-        MallMember member = mallMemberMapper.selectById(memberId);
 
         //订单范围内才允许下单
-        MallAddressInfo address = mallAddressInfoMapper.selectAddressInfoByMemberIdAndId(member.getId(), addOrderDto.getAddressId());
-        if(ObjectUtil.isEmpty(address)){
-            throw new FebsException("请重新选择收货地址信息");
-        }
+        MallAddressInfo address = ValidateEntityUtils
+                .ensureColumnReturnEntity(addOrderDto.getAddressId(), MallAddressInfo::getId, mallAddressInfoMapper::selectOne, "Please fill in the address first");
 
         String orderNo = MallUtils.getOrderNum();
         MallOrderInfo orderInfo = new MallOrderInfo();
         orderInfo.setOrderNo(orderNo);
         orderInfo.setOrderTime(new Date());
-        orderInfo.setMemberId(member.getId());
+        orderInfo.setMemberId(memberId);
         orderInfo.setStatus(OrderStatusEnum.WAIT_PAY.getValue());
         orderInfo.setRemark(addOrderDto.getRemark());
         orderInfo.setOrderType(addOrderDto.getOrderType());
@@ -116,145 +113,54 @@
         this.baseMapper.insert(orderInfo);
 
         BigDecimal total = BigDecimal.ZERO;
-        /**
-         * 根据传入的优惠卷ID和商品明细集合计算出每个商品获取的实际支付金额
-         */
-        Map<Long, BigDecimal> couponAmountMap = new HashMap<>();
-        MallMemberCoupon mallMemberCoupon = new MallMemberCoupon();
-        if(ObjectUtil.isNotEmpty(addOrderDto.getMemberCouponId())){
-            Long memberCouponId = addOrderDto.getMemberCouponId();
-            mallMemberCoupon = mallMemberCouponMapper.selectById(memberCouponId);
-            if(ObjectUtil.isEmpty(mallMemberCoupon)){
-                throw new FebsException(mallMemberCoupon.getCouponName()+"无法使用");
-            }
-            Integer state = mallMemberCoupon.getState();
-            if(1 != state){
-                throw new FebsException(mallMemberCoupon.getCouponName()+"无法使用");
-            }
-            List<AddOrderItemDto> items = addOrderDto.getItems();
-            couponAmountMap = getCouponAmountMap(memberCouponId, items);
-        }
         for (AddOrderItemDto item : addOrderDto.getItems()) {
-                MallOrderItem orderItem = new MallOrderItem();
+            MallOrderItem orderItem = new MallOrderItem();
 
-                // 积分商品提交订单
-                if (addOrderDto.getOrderType() == 2) {
-                    MallGoods mallGoods = mallGoodsMapper.selectById(item.getSkuId());
-                    if (mallGoods.getStock() < item.getCnt()) {
-                        throw new FebsException(mallGoods.getGoodsName() + "库存不足");
-                    }
+            MallGoodsSku sku = mallGoodsSkuMapper.selectSkuInfoById(item.getSkuId());
+            if (sku == null) {
+                throw new FebsException("The product does not exist.");
+            }
 
-                    if (MallGoods.ISSALE_STATUS_DISABLED.equals(mallGoods.getIsSale())) {
-                        throw new FebsException(mallGoods.getGoodsName() + "已下架");
-                    }
+            if (sku.getStock() < item.getCnt()) {
+                throw new FebsException("Insufficient stock");
+            }
 
-                    BigDecimal amount = mallGoods.getScore().multiply(BigDecimal.valueOf(item.getCnt()));
-                    orderItem.setAmount(amount);
-                    orderItem.setCnt(item.getCnt());
-                    orderItem.setOrderId(orderInfo.getId());
-                    orderItem.setPrice(mallGoods.getScore());
-                    orderItem.setGoodsId(mallGoods.getId());
-                    orderItem.setGoodsName(mallGoods.getGoodsName());
-                    orderItem.setStyleName(mallGoods.getGoodsName());
-                    orderItem.setSkuName(mallGoods.getGoodsName());
-                    orderItem.setSkuImage(mallGoods.getThumb());
-                    orderItem.setState(1);
+            MallGoods mallGoods = mallGoodsMapper.selectById(sku.getGoodsId());
 
-                    if (addOrderDto.getType() == 1) {
-                        LambdaQueryWrapper<MallShoppingCart> delQuery = new LambdaQueryWrapper<>();
-                        delQuery.eq(MallShoppingCart::getGoodsId, item.getSkuId())
-                                .eq(MallShoppingCart::getMemberId, member.getId());
-                        mallShoppingCartMapper.delete(delQuery);
-                    }
-                    total = total.add(amount);
-                } else {
-                    MallGoodsSku sku = mallGoodsSkuMapper.selectSkuInfoById(item.getSkuId());
-                    if (sku == null) {
-                        throw new FebsException("购买商品或sku不存在");
-                    }
+            if (MallGoods.ISSALE_STATUS_DISABLED.equals(mallGoods.getIsSale())) {
+                throw new FebsException("Discontinued");
+            }
+            //商品库存销量计算
+            Integer goodsResult = mallGoodsMapper.upDateStockAndVolumeByGoodsId(mallGoods.getId(), item.getCnt());
+            if(1 != goodsResult){
+                throw new FebsException("Discontinued");
+            }
 
-//                    if("样品".equals(sku.getSample())){
-//                        List<MallOrderItem> items = mallOrderItemMapper.selectItemBySkuIdUnCancel(sku.getId(), member.getId());
-//                        if (CollUtil.isNotEmpty(items)) {
-//                            throw new FebsException("样品一个用户只能购买一次");
-//                        }
-//                        Integer cnt = item.getCnt();
-//                        if(1 < cnt){
-//                            throw new FebsException("样品只能购买一件");
-//                        }
-//
-//                    }
+            BigDecimal amount = sku.getPresentPrice().multiply(BigDecimal.valueOf(item.getCnt()));
+            orderItem.setAmount(amount);
+            orderItem.setCnt(item.getCnt());
+            orderItem.setOrderId(orderInfo.getId());
+            orderItem.setPrice(sku.getPresentPrice());
+            orderItem.setGoodsId(sku.getGoodsId());
+            orderItem.setGoodsName(sku.getGoodsName());
+            orderItem.setSkuId(sku.getId());
+            orderItem.setState(1);
+            orderItem.setStyleName(sku.getStyleName());
+            orderItem.setSkuName(sku.getSkuName());
+            orderItem.setSkuImage(sku.getSkuImage());
+            orderItem.setIsNormal(mallGoods.getIsNormal());
+            orderItem.setCostPrice(sku.getCostPrice());
 
-                    if (sku.getStock() < item.getCnt()) {
-                        throw new FebsException(sku.getSkuName() + "库存不足");
-                    }
-
-                    MallGoods mallGoods = mallGoodsMapper.selectById(sku.getGoodsId());
-                    // 零撸专区购买
-                    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 (MallGoods.ISSALE_STATUS_DISABLED.equals(mallGoods.getIsSale())) {
-                        throw new FebsException(mallGoods.getGoodsName() + "已下架");
-                    }
-                    //商品库存销量计算
-                    Integer goodsResult = mallGoodsMapper.upDateStockAndVolumeByGoodsId(mallGoods.getId(), item.getCnt());
-                    if(1 != goodsResult){
-                        throw new FebsException(mallGoods.getGoodsName() + "库存不足");
-                    }
-
-                    BigDecimal amount = sku.getPresentPrice().multiply(BigDecimal.valueOf(item.getCnt()));
-                    //是否使用优惠卷
-                    if(ObjectUtil.isNotEmpty(addOrderDto.getMemberCouponId())){
-                        Long memberCouponId = addOrderDto.getMemberCouponId();
-                        if(ObjectUtil.isNotEmpty(couponAmountMap.get(item.getSkuId()))){
-                            BigDecimal skuCouponAmount = couponAmountMap.get(item.getSkuId());//使用折扣卷后的应该支付的钱
-                            if(skuCouponAmount.compareTo(BigDecimal.ZERO) > 0){
-                                amount = skuCouponAmount;
-                            }
-                            orderItem.setMemberCouponId(memberCouponId);
-                        }
-                    }
-                    orderItem.setAmount(amount);
-                    orderItem.setCnt(item.getCnt());
-                    orderItem.setOrderId(orderInfo.getId());
-                    orderItem.setPrice(sku.getPresentPrice());
-                    orderItem.setGoodsId(sku.getGoodsId());
-                    orderItem.setGoodsName(sku.getGoodsName());
-                    orderItem.setSkuId(sku.getId());
-                    orderItem.setState(1);
-                    if(ObjectUtil.isNotEmpty(member.getReferrerId())){
-                        orderItem.setMemberInviteId(member.getReferrerId());
-                    }
-                    if(ObjectUtil.isNotEmpty(addOrderDto.getMemberInviteId())){
-                        orderItem.setMemberInviteId(addOrderDto.getMemberInviteId());
-                    }
-
-                    orderItem.setStyleName(sku.getStyleName());
-                    orderItem.setSkuName(sku.getSkuName());
-                    orderItem.setSkuImage(sku.getSkuImage());
-                    orderItem.setIsNormal(mallGoods.getIsNormal());
-                    orderItem.setCostPrice(sku.getCostPrice());
-
-                    total = total.add(amount);
-                    //规格的库存销量
-                    Integer skuResult = mallGoodsSkuMapper.upDateStockAndVolumeBySkuId(sku.getId(),item.getCnt());
-                    if(1 != skuResult){
-                        throw new FebsException(sku.getSkuName() + "库存不足");
-                    }
-                    if (addOrderDto.getType() == 1) {
-                        mallShoppingCartMapper.delBySkuId(sku.getId(), member.getId());
-                    }
-                }
-                mallOrderItemMapper.insert(orderItem);
+            total = total.add(amount);
+            //规格的库存销量
+            Integer skuResult = mallGoodsSkuMapper.upDateStockAndVolumeBySkuId(sku.getId(),item.getCnt());
+            ValidateEntityUtils.ensureEqual(1,skuResult,sku.getSkuName() + "Discontinued");
+            if (addOrderDto.getType() == 1) {
+                mallShoppingCartMapper.delBySkuId(sku.getId(), memberId);
+            }
+            mallOrderItemMapper.insert(orderItem);
         }
 
-        mallMemberCoupon.setState(2);
-        mallMemberCouponMapper.updateById(mallMemberCoupon);
         //运费
         BigDecimal delivaryAmount = addOrderDto.getDeliveryAmount() == null ? BigDecimal.ZERO : addOrderDto.getDeliveryAmount();
         orderInfo.setCarriage(delivaryAmount);
@@ -262,14 +168,10 @@
         total = total.add(delivaryAmount);
         orderInfo.setAmount(total);
         orderInfo.setAddressId(address.getId());
-        orderInfo.setName(address.getName());
+        orderInfo.setName(address.getFristName() + address.getName());
         orderInfo.setPhone(address.getPhone());
-        orderInfo.setIsHome(addOrderDto.getIsHome());
 
-        if (StrUtil.isBlank(address.getLatitude())||StrUtil.isBlank(address.getLongitude())) {
-            throw new FebsException("请添加地址");
-        }
-        orderInfo.setAddress(address.getProvince()+address.getCity()+address.getArea() + address.getAddress());
+        orderInfo.setAddress(address.getArea()+ address.getAddress()+address.getCity()+address.getProvince() + address.getCountry() );
         orderInfo.setLatitude(address.getLatitude());
         orderInfo.setLongitude(address.getLongitude());
         this.baseMapper.updateById(orderInfo);
@@ -409,11 +311,11 @@
         MallMember member = LoginUserUtil.getLoginUser();
         MallOrderInfo orderInfo = this.baseMapper.selectOrderByMemberIdAndId(member.getId(), id);
         if (orderInfo == null || AppContants.DEL_FLAG_Y == orderInfo.getDelFlag()) {
-            throw new FebsException("订单不存在");
+            throw new FebsException("Order does not exist");
         }
 
         if (OrderStatusEnum.WAIT_PAY.getValue() != orderInfo.getStatus()) {
-            throw new FebsException("订单不是待付款, 无法取消");
+            throw new FebsException("The order is not pending payment, so it cannot be canceled");
         }
 
         orderInfo.setStatus(OrderStatusEnum.CANCEL.getValue());
@@ -421,8 +323,6 @@
         this.baseMapper.updateById(orderInfo);
 
         if (orderInfo.getOrderType() == 2) {
-//            mallMoneyFlowService.addMoneyFlow(member.getId(), orderInfo.getAmount(), MoneyFlowTypeEnum.REFUND.getValue(), orderInfo.getOrderNo(),  FlowTypeEnum.PRIZE_SCORE.getValue());
-//            memberWalletService.add(orderInfo.getAmount(), member.getId(), "prizeScore");
             return;
         }
 
@@ -431,22 +331,22 @@
             for(MallOrderItem mallOrderItem : mallOrderItemList){
                 MallGoodsSku sku = mallGoodsSkuMapper.selectSkuInfoById(mallOrderItem.getSkuId());
                 if (sku == null) {
-                    throw new FebsException("购买商品或sku不存在");
+                    throw new FebsException("The product does not exist.");
                 }
 
                 if (sku.getStock() < mallOrderItem.getCnt()) {
-                    throw new FebsException(sku.getSkuName() + "库存不足");
+                    throw new FebsException("Insufficient stock");
                 }
 
                 MallGoods mallGoods = mallGoodsMapper.selectById(sku.getGoodsId());
                 Integer goodsResult = mallGoodsMapper.updateStockAndVolumeByGoodsId(mallGoods.getId(), mallOrderItem.getCnt());
                 if(1 != goodsResult){
-                    throw new FebsException(mallGoods.getGoodsName() + "库存不足");
+                    throw new FebsException("Insufficient stock");
                 }
 
                 Integer skuResult = mallGoodsSkuMapper.updateStockAndVolumeBySkuId(sku.getId(),mallOrderItem.getCnt());
                 if(1 != skuResult){
-                    throw new FebsException(sku.getSkuName() + "库存不足");
+                    throw new FebsException("Insufficient stock");
                 }
                 Long memberCouponId = mallOrderItem.getMemberCouponId();
                 MallMemberCoupon mallMemberCoupon = mallMemberCouponMapper.selectById(memberCouponId);
@@ -501,14 +401,10 @@
     @Transactional(rollbackFor = Exception.class)
     public Map<String, Object> payOrder(PayOrderDto payOrderDto) {
         MallMember member = LoginUserUtil.getLoginUser();
-        MallOrderInfo orderInfo = this.baseMapper.selectOrderByMemberIdAndId(member.getId(), payOrderDto.getId());
-        if (orderInfo == null || AppContants.DEL_FLAG_Y == orderInfo.getDelFlag()) {
-            throw new FebsException("订单不存在");
-        }
-
-        if (OrderStatusEnum.WAIT_PAY.getValue() != orderInfo.getStatus()) {
-            throw new FebsException("订单状态不能支付");
-        }
+        MallOrderInfo orderInfo = ValidateEntityUtils
+                .ensureColumnReturnEntity(payOrderDto.getId(), MallOrderInfo::getId, this.baseMapper::selectOne, "订单不存在");
+        ValidateEntityUtils.ensureEqual(member.getId(),orderInfo.getMemberId(),"订单不存在");
+        ValidateEntityUtils.ensureEqual(OrderStatusEnum.WAIT_PAY.getValue(),orderInfo.getStatus(),"订单状态不能支付");
 
         String payResultStr = "";
         String wxResultStr = "";
@@ -900,23 +796,16 @@
     @Transactional
     public FebsResponse refundOrder(Long id) {
         MallMember member = LoginUserUtil.getLoginUser();
-        MallOrderInfo mallOrderInfo = this.baseMapper.selectById(id);
-        if(ObjectUtil.isEmpty(mallOrderInfo)){
-            return new FebsResponse().fail().message("订单不存在");
-        }
+        MallOrderInfo mallOrderInfo = ValidateEntityUtils
+                .ensureColumnReturnEntity(id, MallOrderInfo::getId, this.baseMapper::selectOne, "订单不存在");
         Integer status = mallOrderInfo.getStatus();
-        if(OrderStatusEnum.WAIT_SHIPPING.getValue() != status){
-            return new FebsResponse().fail().message("订单不是待发货状态");
-        }
         Integer deliveryState = mallOrderInfo.getDeliveryState();
-        if(1 != deliveryState){
-            return new FebsResponse().fail().message("订单不是待配送状态");
-        }
+
+        ValidateEntityUtils.ensureEqual(OrderStatusEnum.WAIT_SHIPPING.getValue(),status,"订单不是待发货状态");
+        ValidateEntityUtils.ensureEqual(1,deliveryState,"订单不是待配送状态");
         //根据子订单生成退款记录
-        List<MallOrderItem> mallOrderItemList = mallOrderItemMapper.selectListByOrderId(id);
-        if(CollUtil.isEmpty(mallOrderItemList)){
-            return new FebsResponse().fail().message("订单不存在");
-        }
+        List<MallOrderItem> mallOrderItemList = ValidateEntityUtils
+                .ensureColumnReturnEntityList(id, MallOrderItem::getOrderId, mallOrderItemMapper::selectList, "订单不存在");
         for(MallOrderItem mallOrderItem : mallOrderItemList){
             QueryWrapper<MallRefundEntity> objectQueryWrapper = new QueryWrapper<>();
             objectQueryWrapper.eq("member_id",member.getId());
@@ -931,7 +820,7 @@
                 mallRefundEntity.setItemId(mallOrderItem.getId());
                 if("余额支付".equals(mallOrderInfo.getPayMethod())){
                     mallRefundEntity.setType(3);
-                }else if("微信支付".equals(mallOrderInfo.getPayMethod())){
+                }else if("FIUU支付".equals(mallOrderInfo.getPayMethod())){
                     mallRefundEntity.setType(1);
                 }else{
                     mallRefundEntity.setType(3);
@@ -940,9 +829,7 @@
                 mallRefundEntity.setAmount(mallOrderItem.getAmount());
                 mallRefundMapper.insert(mallRefundEntity);
             }else{
-                if(mallRefund.getState() == 1){
-                    return new FebsResponse().fail().message("订单已退款");
-                }
+                ValidateEntityUtils.ensureNotEqual(1,mallRefund.getState(),"订单已退款");
                 if(mallRefund.getState() == 2 || mallRefund.getState() == 3){
                     mallRefundEntity.setId(mallRefund.getId());
                     mallRefundEntity.setRefundNo(mallRefund.getRefundNo());
@@ -1019,32 +906,23 @@
     @Override
     public FebsResponse createOrderVerify(ApiCreateOrderVerifyDto apiCreateOrderVerifyDto) {
         Long memberId = LoginUserUtil.getLoginUser().getId();
-        MallMember member = memberMapper.selectById(memberId);
         List<AddOrderItemDto> items = apiCreateOrderVerifyDto.getItems();
         if(CollUtil.isEmpty(items)){
-            return new FebsResponse().fail().message("请先挑选商品");
+            return new FebsResponse().fail().message("Please select the product first");
         }
         for (AddOrderItemDto item : apiCreateOrderVerifyDto.getItems()) {
             MallGoodsSku sku = mallGoodsSkuMapper.selectSkuInfoById(item.getSkuId());
             if (sku == null) {
-                return new FebsResponse().fail().message("购买商品或sku不存在");
+                return new FebsResponse().fail().message("The product does not exist.");
             }
             if (sku.getStock() < item.getCnt()) {
-                return new FebsResponse().fail().message(sku.getSkuName() + "库存不足");
+                return new FebsResponse().fail().message("Insufficient stock");
             }
 
             MallGoods mallGoods = mallGoodsMapper.selectById(sku.getGoodsId());
             if (MallGoods.ISSALE_STATUS_DISABLED.equals(mallGoods.getIsSale())) {
-                return new FebsResponse().fail().message(mallGoods.getGoodsName() + "已下架");
+                return new FebsResponse().fail().message("Discontinued");
             }
-            if(GoodsTypeEnum.HUO_DONG.getValue() == mallGoods.getIsNormal()){
-                //活动商品判断是否在活动进行中
-                MallActivity mallActivity = mallActivityMapper.selectById(mallGoods.getActivityId());
-                if(mallActivity == null || mallActivity.getState() != 2){
-                    return new FebsResponse().fail().message("活动不在进行中");
-                }
-            }
-
         }
 
         return new FebsResponse().success();

--
Gitblit v1.9.1