package com.gsq.controller;
import com.gsq.bean.Food;
import com.gsq.bean.WxOrderDetail;
import com.gsq.bean.WxOrderRoot;
import com.gsq.meiju.OrderStatusEnum;
import com.gsq.meiju.ResultEnum;
import com.gsq.repository.FoodRepository;
import com.gsq.repository.OrderDetailRepository;
import com.gsq.repository.OrderRootRepository;
import com.gsq.response.WxCardResponse;
import com.gsq.response.WxOrderResponse;
import com.gsq.utils.EnumUtil;
import com.gsq.utils.ExcelExportUtils;
import com.gsq.websocket.WebSocketServer;
import com.gsq.yichang.DianCanException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.List;
import java.util.stream.Collectors;
/**
* 微信小程序端订单相关
*/
@Service
@Slf4j
public class WxOrderUtils {
@Autowired
private FoodRepository foodRepository;
@Autowired
private WebSocketServer webSocket;
@Autowired
private OrderDetailRepository orderDetailRepository;
@Autowired
private OrderRootRepository orderRootRepository;
//创建订单的方法
public WxOrderResponse createOrder(WxOrderResponse orderBean) {
log.error("小程序提交上来的订单={}", orderBean);
BigDecimal orderAmount = new BigDecimal(BigInteger.ZERO);//订单总价格
//计算订单总价
for (WxOrderDetail orderDetail : orderBean.getOrderDetailList()) {
Food foodInfo = foodRepository.findById(orderDetail.getFoodId()).orElse(null);
if (foodInfo == null) {
throw new DianCanException(ResultEnum.PRODUCT_NOT_EXIST);
}
orderAmount = foodInfo.getFoodPrice()
.multiply(new BigDecimal(orderDetail.getFoodQuantity()))
.add(orderAmount);//计算订单总价
}
//写入总订单数据库
WxOrderRoot orderMaster = new WxOrderRoot();
BeanUtils.copyProperties(orderBean, orderMaster);
orderMaster.setOrderAmount(orderAmount);
orderMaster.setOrderStatus(OrderStatusEnum.NEW_PAYED.getCode());
WxOrderRoot orderRoot = orderRootRepository.save(orderMaster);
for (WxOrderDetail orderDetail : orderBean.getOrderDetailList()) {
Food foodInfo = foodRepository.findById(orderDetail.getFoodId()).orElse(null);
//订单详情入库
orderDetail.setOrderId(orderRoot.getOrderId());
BeanUtils.copyProperties(foodInfo, orderDetail);
orderDetailRepository.save(orderDetail);
}
//扣库存
List<WxCardResponse> cartDTOList = orderBean.getOrderDetailList().stream().map(e ->
new WxCardResponse(e.getFoodId(), e.getFoodQuantity())
).collect(Collectors.toList());
for (WxCardResponse cartDTO : cartDTOList) {
Food food = foodRepository.findById(cartDTO.getProductId()).orElse(null);
if (food == null) {
throw new DianCanException(ResultEnum.PRODUCT_NOT_EXIST);
}
Integer result = food.getFoodStock() - cartDTO.getProductQuantity();
if (result < 0) {
throw new DianCanException(ResultEnum.PRODUCT_STOCK_ERROR);
}
food.setFoodStock(result);
foodRepository.save(food);
}
try {
log.error("下单,,,,orderDTO={}", orderBean);
webSocket.sendMessage("0", "0");//发送websocket消息
} catch (IOException e) {
e.printStackTrace();
}
return orderBean;
}
//用户催单
public void cuiDan(String zhuoHao, Integer orderId) {
try {
WxOrderRoot orderRoot = orderRootRepository.findById(orderId).orElse(null);
if (orderRoot != null) {
int cuidan = orderRoot.getCuidan();
orderRoot.setCuidan(cuidan + 1);//催单次数加一
orderRootRepository.save(orderRoot);
}
webSocket.sendMessage("桌号为" + zhuoHao + "; 订单号为" + orderId, "0");//发送websocket消息
} catch (IOException e) {
e.printStackTrace();
}
}
//查询单个订单
public WxOrderResponse findOne(Integer orderId) {
WxOrderRoot orderMaster = orderRootRepository.findById(orderId).orElse(null);
if (orderMaster == null) {
throw new DianCanException(ResultEnum.ORDER_NOT_EXIST);
}
List<WxOrderDetail> orderDetailList = orderDetailRepository.findByOrderId(orderId);
if (CollectionUtils.isEmpty(orderDetailList)) {
throw new DianCanException(ResultEnum.ORDERDETAIL_NOT_EXIST);
}
WxOrderResponse orderDTO = new WxOrderResponse();
BeanUtils.copyProperties(orderMaster, orderDTO);
orderDTO.setOrderDetailList(orderDetailList);
orderDTO.setOrderStatusStr(orderDTO.getOrderStatusStr(orderDTO.getOrderStatus()));
return orderDTO;
}
//查询不同订单状态列表
public List<WxOrderResponse> findListStats(String buyerOpenid, Integer orderStatus) {
List<WxOrderRoot> orderMasters = orderRootRepository.findByBuyerOpenidAndOrderStatus(buyerOpenid, orderStatus,
Sort.by(Sort.Direction.DESC, "updateTime"));
return orderResponse(orderMasters);
}
//删除订单
@Transactional
public boolean remove(Integer orderId) {
if (orderId == null) {
throw new DianCanException(ResultEnum.ORDER_NOT_EXIST);
}
orderRootRepository.deleteById(orderId);
List<WxOrderDetail> orderDetails = orderDetailRepository.findByOrderId(orderId);
for (WxOrderDetail detail : orderDetails) {
orderDetailRepository.deleteById(detail.getDetailId());
}
return true;
}
//取消订单
@Transactional
public WxOrderResponse cancel(WxOrderResponse orderDTO) {
WxOrderRoot orderMaster = new WxOrderRoot();
//判断订单状态
if (!orderDTO.getOrderStatus().equals(OrderStatusEnum.NEW_PAYED.getCode())) {
log.error("【取消订单】订单状态不正确, orderId={}, orderStatus={}", orderDTO.getOrderId(), orderDTO.getOrderStatus());
throw new DianCanException(ResultEnum.ORDER_STATUS_ERROR);
}
//修改订单状态
orderDTO.setOrderStatus(OrderStatusEnum.CANCEL.getCode());
BeanUtils.copyProperties(orderDTO, orderMaster);
WxOrderRoot updateResult = orderRootRepository.save(orderMaster);
if (updateResult == null) {
log.error("【取消订单】更新失败, orderMaster={}", orderMaster);
throw new DianCanException(ResultEnum.ORDER_UPDATE_FAIL);
}
//返回库存
if (CollectionUtils.isEmpty(orderDTO.getOrderDetailList())) {
log.error("【取消订单】订单中无商品详情, orderDTO={}", orderDTO);
throw new DianCanException(ResultEnum.ORDER_DETAIL_EMPTY);
}
List<WxCardResponse> cartDTOList = orderDTO.getOrderDetailList().stream()
.map(e -> new WxCardResponse(e.getFoodId(), e.getFoodQuantity()))
.collect(Collectors.toList());
for (WxCardResponse cartDTO : cartDTOList) {
Food food = foodRepository.findById(cartDTO.getProductId()).orElse(null);
log.error("订单里的菜品id={},查询的菜品={}", cartDTO.getProductId(), food);
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
点餐系统(小程序+java后台源码) (390个子文件)
bootstrap_min.css 152KB
bootstrap_min.css 152KB
global.css 443B
global.css 443B
list.ftlh 7KB
list.ftlh 7KB
list.ftlh 5KB
list.ftlh 5KB
index.ftlh 3KB
index.ftlh 3KB
detail.ftlh 2KB
detail.ftlh 2KB
list.ftlh 2KB
list.ftlh 2KB
loginView.ftlh 2KB
loginView.ftlh 2KB
list.ftlh 2KB
list.ftlh 2KB
index.ftlh 2KB
index.ftlh 2KB
list.ftlh 2KB
list.ftlh 2KB
list.ftlh 2KB
list.ftlh 2KB
list.ftlh 2KB
list.ftlh 2KB
left.ftlh 1KB
left.ftlh 1KB
index.ftlh 1KB
index.ftlh 1KB
detail.ftlh 1KB
detail.ftlh 1KB
top.ftlh 1KB
top.ftlh 1KB
excel.ftlh 1KB
excel.ftlh 1KB
excel.ftlh 1KB
excel.ftlh 1KB
success.ftlh 619B
success.ftlh 619B
error.ftlh 612B
error.ftlh 612B
noP.gif 3KB
OrderSystem.iml 16KB
sell.iml 16KB
sell-0.0.1-SNAPSHOT.jar 66.39MB
orderSys.jar 65.07MB
WxOrderUtils.java 11KB
AdminFoodController.java 8KB
WxOrderController.java 5KB
ExcelImportUtils.java 5KB
AdminLeiMuController.java 5KB
AdminHomeController.java 5KB
AdminOrderController.java 4KB
WebSocketServer.java 4KB
AdminController.java 3KB
SendWxMessage.java 3KB
AdminPictureController.java 3KB
WxFoodController.java 3KB
CommentController.java 3KB
WxPaihaoController.java 3KB
TimeUtils.java 2KB
LoginAdminController.java 2KB
ExcelExportUtils.java 2KB
AdminPaihaoController.java 2KB
WxOrderResponse.java 2KB
WxUserController.java 2KB
WxpayParam.java 2KB
CookieUtil.java 2KB
IWXPayConfig.java 1KB
Food.java 1KB
AuthorizeAspect.java 1KB
ResultEnum.java 1KB
WxOrderRoot.java 1KB
WebSocket.java 1KB
Paihao.java 1KB
WxMssVo.java 995B
AdminInfo.java 974B
Date2StringSerializer.java 911B
Leimu.java 902B
UserInfo.java 814B
PictureInfo.java 802B
Comment.java 747B
WxPictureController.java 706B
Date2LongSerializer.java 656B
ApiUtil.java 623B
AdminStatusEnum.java 573B
OrderStatusEnum.java 556B
OrderReq.java 554B
FoodReq.java 550B
WxOrderDetail.java 549B
FoodRes.java 549B
PaihaoRepository.java 539B
PaihaoVO.java 526B
OrderRootRepository.java 515B
DianCanExceptionHandler.java 508B
FoodRepository.java 468B
UserForm.java 460B
LeimuReq.java 436B
WebSocketConfig.java 434B
共 390 条
- 1
- 2
- 3
- 4
硬核的无脸man~
- 粉丝: 2916
- 资源: 7
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
- 4
- 5
- 6
前往页