SpringBoot+UniApp物流快递寄件小程序系统 附带详细运行指导视频

一、项目演示

项目演示地址:视频地址

二、项目介绍

项目描述:这是一个基于SpringBoot+uniApp框架开发的物流快递寄件小程序系统。首先,这是一个前后端分离的项目,前端分为用户端管理端用户端使用微信小程序(uniApp开发)管理端使用Web页面(Vue开发)。然后这项目代码简洁规范,注释说明详细,易于理解和学习。其次,这项目功能丰富,具有一个物流快递寄件小程序系统该有的所有功能。

项目功能:此项目分为三个角色:普通用户配送员管理员普通用户有登录注册、查运费、寄快递、查询订单详情、签到、兑换优惠券、管理个人地址、管理个人信息、查看个人优惠券信息、管理自己的意见反馈信息、查看公告和轮播图信息等等功能。配送员除了拥有普通用户的所有功能之外,还拥有记录自己配送订单的详情信息。管理员有登录、查看数据统计信息、管理所有用户信息、管理所有轮播图信息、管理所有公告信息、管理所有优惠券信息、管理所有收费规则信息、管理所有订单信息和管理所有意见反馈信息等等功能。

应用技术:SpringBoot + uniApp + Vue3 + MySQL + MyBatis + Redis + ElementUI-Plus + uni-ui + Vite + TypeScript + 百度地图

运行环境:IntelliJ IDEA2019.3.5 + MySQL5.7(项目压缩包中自带) + Redis5.0.5(项目压缩包中自带) + JDK1.8 + Maven3.6.3(项目压缩包中自带)+ Node16.20.2(项目压缩包中自带)+ 微信开发者工具(项目压缩包中自带)+ Visual Studio Code(项目压缩包中自带)

三、运行截图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、主要代码

1.查询运费金额代码

  /**
    * 查询运费金额
    * @param feeCalcDTO
    * @return
    */
   @Override
   public ResponseDTO<BigDecimal> calcSendFee(FeeCalcDTO feeCalcDTO) {
       // 收费规则类型
       int ruleType = 0;
       // 取出寄件地址
       AddressDTO sendAddressDTO = feeCalcDTO.getSendAddressDTO();
       // 取出收件地址
       AddressDTO receiveAddressDTO = feeCalcDTO.getReceiveAddressDTO();
       // 判断是否是同城、省内、省外
       if(sendAddressDTO.getCity().equals(receiveAddressDTO.getCity())) {
           ruleType = RuleTypeEnum.CITY.getCode();
       } else if (sendAddressDTO.getProvince().equals(receiveAddressDTO.getProvince())) {
           ruleType = RuleTypeEnum.INSIDE.getCode();
       } else if (!sendAddressDTO.getProvince().equals(receiveAddressDTO.getProvince())) {
           ruleType = RuleTypeEnum.OUTSIDE.getCode();
       }
       // 查出符合的收费规则数据
       RuleExample ruleExample = new RuleExample();
       int finalRuleType = ruleType;
       List<Rule> ruleList = ruleMapper.selectByExample(ruleExample)
               .stream().filter(e -> e.getType() == finalRuleType)
               .collect(Collectors.toList());
       if(ruleList.size() == 0) {
           return ResponseDTO.errorByMsg(CodeMsg.DATA_ERROR);
       }
       Rule rule = ruleList.get(0);
       BigDecimal totalPrice = rule.getBasePrice().add(new BigDecimal(feeCalcDTO.getWeight() - 1).multiply(rule.getNextPrice()));

       return ResponseDTO.success(totalPrice);
   }

2.寄快递提交订单代码

   /**
     * 提交订单操作
     * @param orderDTO
     * @return
     */
    @Override
    public ResponseDTO<Boolean> submitOrder(OrderDTO orderDTO) {
        // 进行统一表单验证
        CodeMsg validate = ValidateEntityUtil.validate(orderDTO);
        if (!validate.getCode().equals(CodeMsg.SUCCESS.getCode())) {
            return ResponseDTO.errorByMsg(validate);
        }
        if(CommonUtil.isEmpty(orderDTO.getUserId())) {
            return ResponseDTO.errorByMsg(CodeMsg.DATA_ERROR);
        }
        User user = userMapper.selectByPrimaryKey(orderDTO.getUserId());
        if(user == null) {
            return ResponseDTO.errorByMsg(CodeMsg.USER_NOT_EXIST);
        }
        Order order = CopyUtil.copy(orderDTO, Order.class);
        // 封装地址信息 计算价格
        // 寄件地址
        AddressDTO sendAddressDTO = new AddressDTO();
        sendAddressDTO.setCity(order.getSendCity());
        sendAddressDTO.setProvince(order.getSendProvince());
        // 收件地址
        AddressDTO receiveAddressDTO = new AddressDTO();
        receiveAddressDTO.setCity(order.getReceiveCity());
        receiveAddressDTO.setProvince(order.getReceiveProvince());
        FeeCalcDTO feeCalcDTO = new FeeCalcDTO();
        feeCalcDTO.setSendAddressDTO(sendAddressDTO);
        feeCalcDTO.setReceiveAddressDTO(receiveAddressDTO);
        feeCalcDTO.setWeight(order.getWeight());
        // 计算费用
        ResponseDTO<BigDecimal> calcSendFeeResp = ruleService.calcSendFee(feeCalcDTO);
        if (!calcSendFeeResp.getCode().equals(CodeMsg.SUCCESS.getCode())) {
            return ResponseDTO.errorByMsg(CodeMsg.RULE_CALC_ERROR);
        }
        order.setPrice(calcSendFeeResp.getData());
        // 判断是否使用优惠券
        if(!CommonUtil.isEmpty(orderDTO.getCouponItemId())) {
            CouponItem couponItem = couponItemMapper.selectByPrimaryKey(orderDTO.getCouponItemId());
            if(!CouponStateEnum.WAIT.getCode().equals(couponItem.getState()) || couponItem.getCouponTime().getTime() < new Date().getTime()) {
                return ResponseDTO.errorByMsg(CodeMsg.COUPON_STATE_ERROR);
            }
            if(order.getPrice().compareTo(couponItem.getCouponPrice()) > -1) {
                order.setPrice(order.getPrice().subtract(couponItem.getCouponPrice()));
            } else {
                order.setPrice(new BigDecimal(0));
            }
            couponItem.setState(CouponStateEnum.USE.getCode());
            if(couponItemMapper.updateByPrimaryKeySelective(couponItem) == 0) {
                return ResponseDTO.errorByMsg(CodeMsg.COUPON_USE_ERROR);
            }
        }
        order.setId(UuidUtil.getShortUuid());
        order.setCreateTime(new Date());
        if(orderMapper.insertSelective(order) == 0) {
            throw new RuntimeException(CodeMsg.ORDER_ADD_ERROR.getMsg());
        }
        // 记录订单详情
        OrderItem orderItem = new OrderItem();
        orderItem.setId(UuidUtil.getShortUuid());
        orderItem.setOrderId(order.getId());
        orderItem.setCreateTime(new Date());
        orderItem.setState(OrderStateEnum.WAIT_PICK.getCode());
        orderItem.setContent("您已成功下订单,请耐心等待取件师傅与您联系取货哈,如有问题可联系客服咨询!");
        if(orderItemMapper.insertSelective(orderItem) == 0) {
            throw new RuntimeException(CodeMsg.ORDER_ITEM_ADD_ERROR.getMsg());
        }

        return ResponseDTO.successByMsg(true, "下单成功!");
    }

3.签到获取积分代码

   /**
     * 签到获取积分操作
     * @param rateDTO
     * @return
     */
    @Override
    public ResponseDTO<Boolean> signScore(RateDTO rateDTO) {
        if(CommonUtil.isEmpty(rateDTO.getUserId())) {
            return ResponseDTO.errorByMsg(CodeMsg.DATA_ERROR);
        }
        // 获取登录用户信息
        User user = userMapper.selectByPrimaryKey(rateDTO.getUserId());
        if(user == null) {
            return ResponseDTO.errorByMsg(CodeMsg.USER_NOT_EXIST);
        }
        Rate rate = new Rate();
        rate.setId(UuidUtil.getShortUuid());
        rate.setCreateTime(new Date());
        rate.setUserId(user.getId());
        rate.setType(RateTypeEnum.SIGN.getCode());
        if(user.getSignDay() == 6) {
            user.setSignDay(7);
            user.setScore(user.getScore() + RuntimeConstant.SURPRISE_SIGN_SCORE);
            rate.setScore(RuntimeConstant.SURPRISE_SIGN_SCORE);
            rate.setDescription("签到获得惊喜积分");
        } else {
            user.setSignDay(user.getSignDay() + 1);
            user.setScore(user.getScore() + RuntimeConstant.NORMAL_SIGN_SCORE);
            rate.setScore(RuntimeConstant.NORMAL_SIGN_SCORE);
            rate.setDescription("签到获得积分");
        }
        rate.setNowScore(user.getScore());
        // 存储积分变化明细数据
        if(rateMapper.insertSelective(rate) == 0) {
            return ResponseDTO.errorByMsg(CodeMsg.RATE_SAVE_ERROR);
        }
        // 更新用户信息
        if(userMapper.updateByPrimaryKeySelective(user) == 0) {
            throw new RuntimeException(CodeMsg.USER_EDIT_ERROR.getMsg());
        }
        return ResponseDTO.successByMsg(true, "签到成功!");
    }
  • 13
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

这里是杨杨吖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值