一、项目演示
项目演示地址:视频地址
二、项目介绍
项目描述:这是一个基于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, "签到成功!");
}
本站资源均来自互联网,仅供研究学习,禁止违法使用和商用,产生法律纠纷本站概不负责!如果侵犯了您的权益请与我们联系!
转载请注明出处: 免费源码网-免费的源码资源网站 » SpringBoot+UniApp物流快递寄件小程序系统 附带详细运行指导视频
发表评论 取消回复