package com.sky.service.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.sky.constant.MessageConstant;
import com.sky.context.BaseContext;
import com.sky.dto.OrdersPageQueryDTO;
import com.sky.dto.OrdersPaymentDTO;
import com.sky.dto.OrdersSubmitDTO;
import com.sky.entity.*;
import com.sky.exception.AddressBookBusinessException;
import com.sky.exception.OrderBusinessException;
import com.sky.exception.ShoppingCartBusinessException;
import com.sky.mapper.*;
import com.sky.result.PageResult;
import com.sky.service.OrdersService;
import com.sky.utils.HttpClientUtil;
import com.sky.utils.WeChatPayUtil;
import com.sky.vo.OrderPaymentVO;
import com.sky.vo.OrderSubmitVO;
import com.sky.vo.OrderVO;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @author Ms SUN
* @date 2023/4/16
*/
@Slf4j
@Service
@Transactional
public class OrdersServiceImpl implements OrdersService {
@Resource
private OrderMapper orderMapper;
@Resource
private UserMapper userMapper;
@Resource
private ShoppingCartMapper shoppingCartMapper;
@Resource
private OrderDetailMapper orderDetailMapper;
@Resource
private AddressBookMapper addressBookMapper;
@Autowired
private WeChatPayUtil weChatPayUtil;
@Autowired
private StringRedisTemplate redisTemplate;
/**
* 订单提交
*
* @param ordersSubmitDTO
* @return
*/
@Override
public OrderSubmitVO orderSubmit(OrdersSubmitDTO ordersSubmitDTO) {
//根据ID查找地址
AddressBook addressBook = addressBookMapper.getById(ordersSubmitDTO.getAddressBookId());
if (addressBook == null) {
throw new AddressBookBusinessException(MessageConstant.ADDRESS_BOOK_IS_NULL);
}
//判断是否超出派送范围
checkOutAddress(addressBook.getCityName()+addressBook.getDistrictName()+addressBook.getDetail());
Orders orders = new Orders();
//属性拷贝赋值
BeanUtils.copyProperties(ordersSubmitDTO, orders);
//赋值当前用户
Long userId = BaseContext.getCurrentId();
orders.setUserId(userId);
User user = userMapper.selectById(userId);
orders.setUserName(user.getName());
orders.setPhone(addressBook.getPhone());
orders.setConsignee(addressBook.getConsignee());
orders.setAddress(addressBook.getDetail());
//订单号--系统当前时间唯一
orders.setNumber(String.valueOf(System.currentTimeMillis()));
//订单状态
orders.setStatus(Orders.PENDING_PAYMENT);
//订单提交时间
orders.setOrderTime(LocalDateTime.now());
//支付状态
orders.setPayStatus(Orders.UN_PAID);
//向订单表中插入数据
orderMapper.inserOerder(orders);
//购物车
ShoppingCart shoppingCart = new ShoppingCart();
shoppingCart.setUserId(userId);
//查询并判断购物车是否为空
List<ShoppingCart> shoppingCartList = shoppingCartMapper.selectList(shoppingCart);
if (CollectionUtils.isEmpty(shoppingCartList)) {
//抛出购物车为空异常
throw new ShoppingCartBusinessException(MessageConstant.SHOPPING_CART_IS_NULL);
}
List<OrderDetail> orderDetailLists = shoppingCartList.stream().map(cart -> {
OrderDetail orderDetail = new OrderDetail();
//属性拷贝赋值
BeanUtils.copyProperties(cart, orderDetail, "id");
//设置订单ID
orderDetail.setOrderId(orders.getId());
return orderDetail;
}).collect(Collectors.toList());
//向订单明细表中插入数据
orderDetailMapper.insertBatch(orderDetailLists);
//提交订单后清空当前登录用户购物车
shoppingCartMapper.delShoppingCartById(userId);
//构建OrderDetailVO返回,供支付界面使用
OrderSubmitVO orderSubmitVO = OrderSubmitVO.builder()
.id(orders.getId())
.orderNumber(orders.getNumber())
.orderAmount(orders.getAmount())
.orderTime(orders.getOrderTime())
.build();
return orderSubmitVO;
}
@Value("${sky.shop.address}")
private String shopAddress;
@Value("${sky.baidu.ak}")
private String ak;
/**
* 校验是否超出配送范围
*
* @param address
*/
private void checkOutAddress(String address)
{
Map map = new HashMap();
map.put("address",shopAddress);
map.put("output","json");
map.put("ak",ak);
//请求百度地图地址
String shop= HttpClientUtil.doGet("https://api.map.baidu.com/geocoding/v3",map);
//解析店铺坐标
JSONObject jsonObject = JSON.parseObject(shop);
if (!jsonObject.getString("status").equals("0"))
{
//店铺地址解析失败,抛出异常
throw new OrderBusinessException("店铺坐标解析失败");
}
//解析地址
JSONObject location = jsonObject.getJSONObject("result").getJSONObject("location");
//纬度
String lat = location.getString("lat");
//经度
String lng = location.getString("lng");
//拼接店铺经纬度
String shopLoc = lat + "," + lng;
map.put("address",address);
//请求百度地图地址
String userLocation= HttpClientUtil.doGet("https://api.map.baidu.com/geocoding/v3",map);
//解析用户坐标
jsonObject = JSON.parseObject(userLocation);
if (!jsonObject.getString("status").equals("0"))
{
//地址解析失败,抛出异常
throw new OrderBusinessException("用户坐标解析失败");
}
//解析地址
location = jsonObject.getJSONObject("result").getJSONObject("location");
//纬度
lat = location.getString("lat");
//经度
lng = location.getString("lng");
//拼接用户经纬度
String userLoc = lat + "," + lng;
map.put("origin", shopLoc);
map.put("destination", userLoc);
map.put("steps_info","0");
//路线
//请求百度地图地址
String dev= HttpClientUtil.doGet("https://api.map.baidu.com/directionlite/v1/driving",map);
//解析驾车路线坐标
jsonObject = JSON.parseObject(dev);
if (!jsonObject.getString("status").equals("0"))
{
//地址解析失败,抛出异常
throw new OrderBusinessException("派送路线有误");
}
//解析
JSONObject result= jsonObject.getJSONObject("result");
JSONArray jsonArray= (JSONArray) result.get("routes");
JSONObject jsonObjects= (JSONObject)jsonArray.get(0);
Integer distance = (Integer) jsonObjects.get("distance");
if (distance>5000)
{
throw new OrderBusinessException("订单超出派送
没有合适的资源?快使用搜索试试~ 我知道了~
外卖平台后端资源,基于微信小程序的ssm后端开发
共414个文件
class:191个
java:161个
xml:42个
5星 · 超过95%的资源 需积分: 1 3 下载量 150 浏览量
2023-06-11
22:44:49
上传
评论
收藏 497KB ZIP 举报
温馨提示
基于微信小程序的外卖平台开发
资源推荐
资源详情
资源评论
收起资源包目录
外卖平台后端资源,基于微信小程序的ssm后端开发 (414个子文件)
OrdersServiceImpl.class 15KB
Orders.class 14KB
ReportServiceImpl.class 12KB
OrderServiceImpl.class 9KB
WeChatPayUtil.class 9KB
OrdersDTO.class 8KB
AddressBook.class 8KB
Employee.class 7KB
DishServiceImpl.class 7KB
SetmealVO.class 7KB
Setmeal.class 7KB
Dish.class 7KB
DishVO.class 7KB
ShoppingCart.class 6KB
HttpClientUtil.class 6KB
SetmealServiceImpl.class 6KB
Category.class 6KB
OrderDetail.class 6KB
OrdersSubmitDTO.class 6KB
EmployeeController.class 6KB
RedisConfig.class 6KB
WeChatProperties.class 5KB
DishController.class 5KB
Orders$OrdersBuilder.class 5KB
AliOssUtil.class 5KB
User.class 5KB
SetmealDTO.class 5KB
DishDTO.class 5KB
WorkspaceServiceImpl.class 5KB
PayNotifyController.class 5KB
OrderReportVO.class 5KB
OrdersPageQueryDTO.class 5KB
OrderController.class 5KB
OrderController.class 4KB
SetmealDish.class 4KB
EmployeeServiceImpl.class 4KB
SetmealController.class 4KB
ShoppingCartServiceImpl.class 4KB
CategoryController.class 4KB
CategoryServiceImpl.class 4KB
BusinessDataVO.class 4KB
OrderOverViewVO.class 4KB
EmployeeDTO.class 4KB
reportController.class 4KB
AddressBookController.class 4KB
JwtProperties.class 4KB
OrderPaymentVO.class 4KB
Result.class 4KB
EmployeeLoginVO.class 4KB
OrderSubmitVO.class 3KB
WebMvcConfiguration.class 3KB
AddressBook$AddressBookBuilder.class 3KB
WebMvcConfiguration.class 3KB
AutoFillAspect.class 3KB
DishFlavor.class 3KB
DishItemVO.class 3KB
SetmealVO$SetmealVOBuilder.class 3KB
UserServiceImpl.class 3KB
Employee$EmployeeBuilder.class 3KB
UserController.class 3KB
DishVO$DishVOBuilder.class 3KB
AliOssProperties.class 3KB
Setmeal$SetmealBuilder.class 3KB
SetmealPageQueryDTO.class 3KB
DishPageQueryDTO.class 3KB
WebSocketServer.class 3KB
DishController.class 3KB
Dish$DishBuilder.class 3KB
ShoppingCart$ShoppingCartBuilder.class 3KB
CategoryDTO.class 3KB
ShoppingCartController.class 3KB
UserReportVO.class 3KB
WorkSpaceController.class 3KB
UserLoginVO.class 3KB
CommonController.class 3KB
OrderDetail$OrderDetailBuilder.class 3KB
ShopController.class 3KB
OrderTask.class 3KB
Category$CategoryBuilder.class 3KB
OrderVO.class 3KB
CategoryPageQueryDTO.class 3KB
OrderStatisticsVO.class 3KB
JacksonObjectMapper.class 3KB
JwtTokenUserInterceptor.class 2KB
JwtTokenAdminInterceptor.class 2KB
PasswordEditDTO.class 2KB
ShoppingCartDTO.class 2KB
SetmealController.class 2KB
DataOverViewQueryDTO.class 2KB
SetmealOverViewVO.class 2KB
SpringDataRedisTest.class 2KB
DishOverViewVO.class 2KB
GoodsSalesDTO.class 2KB
SalesTop10ReportVO.class 2KB
TurnoverReportVO.class 2KB
User$UserBuilder.class 2KB
AddressBookServiceImpl.class 2KB
MQConfig.class 2KB
JwtUtil.class 2KB
PageResult.class 2KB
共 414 条
- 1
- 2
- 3
- 4
- 5
weixin_46584720
- 粉丝: 13
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页