package com.ruoyi.system.service.impl;
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.ruoyi.common.basic.PageInfo;
|
import com.ruoyi.common.constant.OrderNumConstants;
|
import com.ruoyi.common.enums.BoardEnum;
|
import com.ruoyi.common.utils.CodeGenerateUtils;
|
import com.ruoyi.common.utils.DateUtils;
|
import com.ruoyi.system.domain.*;
|
import com.ruoyi.system.dto.*;
|
import com.ruoyi.system.mapper.TOrderMealGoodsMapper;
|
import com.ruoyi.system.mapper.TOrderMealMapper;
|
import com.ruoyi.system.query.TDataGeneratorMealQuery;
|
import com.ruoyi.system.query.TDataStatisticsQuery;
|
import com.ruoyi.system.query.TOrderMealQuery;
|
import com.ruoyi.system.service.*;
|
import com.ruoyi.system.vo.*;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
import org.springframework.util.CollectionUtils;
|
|
import java.math.BigDecimal;
|
import java.time.LocalDate;
|
import java.time.LocalDateTime;
|
import java.util.*;
|
import java.util.stream.Collectors;
|
|
/**
|
* <p>
|
* 餐饮订单 服务实现类
|
* </p>
|
*
|
* @author xiaochen
|
* @since 2024-08-14
|
*/
|
@Service
|
public class TOrderMealServiceImpl extends ServiceImpl<TOrderMealMapper, TOrderMeal> implements TOrderMealService {
|
|
@Autowired
|
private TOrderMealGoodsService orderMealGoodsService;
|
@Autowired
|
private TOrderRemarkService orderRemarkService;
|
@Autowired
|
private TBoardService boardService;
|
@Autowired
|
private TGoodsTypeService goodsTypeService;
|
@Autowired
|
private TGoodsService goodsService;
|
|
@Override
|
public void add(TOrderMealDTO dto) {
|
if(Objects.isNull(dto.getBoardId())){
|
throw new RuntimeException("餐桌不能为空");
|
}
|
TOrderMeal orderMeal = this.getById(dto.getId());
|
orderMeal.setRemark(orderMeal.getRemark()+dto.getRemark());
|
orderMeal.setMealType(dto.getMealType());
|
orderMeal.setMealPerson(dto.getMealPerson());
|
orderMeal.setMealTime(dto.getMealTime());
|
orderMeal.setOrderMoney(dto.getOrderMoney());
|
|
// 查询菜品分类
|
List<TGoodsType> list1 = goodsTypeService.list();
|
// 查询餐桌
|
TBoard board = boardService.getById(dto.getBoardId());
|
if(!CollectionUtils.isEmpty(dto.getMealOrderGoodsDTOS())){
|
board.setStatus(BoardEnum.DURING_MEAL.getCode());
|
boardService.updateById(board);
|
// 订单金额,订单编号
|
String orderNum = OrderNumConstants.MEAL+CodeGenerateUtils.generateVolumeSn();
|
dto.setOrderNum(orderNum);
|
List<TOrderMealGoods> orderMealGoods = new ArrayList<>();
|
// 查询商品
|
List<Long> goodsIds = dto.getMealOrderGoodsDTOS().stream().map(MealOrderGoodsDTO::getGoodsId).collect(Collectors.toList());
|
List<TGoods> list = goodsService.list(Wrappers.lambdaQuery(TGoods.class)
|
.in(TGoods::getId, goodsIds));
|
dto.getMealOrderGoodsDTOS().forEach(item -> {
|
list.stream().filter(item1 -> item1.getId().equals(item.getGoodsId())).findFirst().ifPresent(item1 -> {
|
TOrderMealGoods orderMealGood = new TOrderMealGoods();
|
orderMealGood.setGoodsName(item1.getGoodsName());
|
orderMealGood.setGoodsNum(item1.getGoodsNum());
|
orderMealGood.setGoodsPicture(item1.getGoodsPicture());
|
orderMealGood.setGoodsCount(item.getGoodsCount());
|
orderMealGood.setGoodsSalePrice(item1.getSalePrice().multiply(new BigDecimal(item.getGoodsCount())));
|
orderMealGood.setCostPrice(item1.getCostPrice().multiply(new BigDecimal(item.getGoodsCount())));
|
orderMealGood.setTypeId(item1.getTypeId());
|
orderMealGood.setGoodsId(item1.getId());
|
orderMealGood.setTypeName(list1.stream().filter(item2 -> item2.getId().equals(item1.getTypeId())).findFirst().get().getTypeName());
|
orderMealGoods.add(orderMealGood);
|
});
|
});
|
BigDecimal orderMoney = BigDecimal.ZERO;
|
// 添加菜品
|
for (TOrderMealGoods orderMealGood : orderMealGoods) {
|
orderMealGood.setOrderId(dto.getId());
|
orderMoney = orderMoney.add(orderMealGood.getGoodsSalePrice());
|
}
|
orderMealGoodsService.saveBatch(orderMealGoods);
|
orderMeal.setOrderMoney(orderMoney);
|
this.updateById(orderMeal);
|
// 添加备注
|
// TOrderRemark tOrderRemark = new TOrderRemark();
|
// tOrderRemark.setOrderId(dto.getId());
|
// tOrderRemark.setRemark(dto.getRemark());
|
// tOrderRemark.setCreateTime(LocalDateTime.now());
|
// orderRemarkService.save(tOrderRemark);
|
}
|
}
|
|
@Override
|
public void addDish(AddDishDTO dto) {
|
List<TOrderMealGoods> orderMealGoods = new ArrayList<>();
|
// 查询菜品分类
|
List<TGoodsType> list1 = goodsTypeService.list();
|
// 查询商品
|
List<Long> goodsIds = dto.getMealOrderGoodsDTOS().stream().map(MealOrderGoodsDTO::getGoodsId).collect(Collectors.toList());
|
List<TOrderMealGoods> list = orderMealGoodsService.list(Wrappers.lambdaQuery(TOrderMealGoods.class)
|
.in(TOrderMealGoods::getId, goodsIds));
|
dto.getMealOrderGoodsDTOS().forEach(item -> {
|
list.stream().filter(item1 -> item1.getId().equals(item.getGoodsId())).findFirst().ifPresent(item1 -> {
|
TOrderMealGoods orderMealGood = new TOrderMealGoods();
|
orderMealGood.setGoodsName(item1.getGoodsName());
|
orderMealGood.setGoodsNum(item1.getGoodsNum());
|
orderMealGood.setGoodsPicture(item1.getGoodsPicture());
|
orderMealGood.setGoodsCount(item.getGoodsCount());
|
orderMealGood.setGoodsSalePrice(item1.getGoodsSalePrice().multiply(new BigDecimal(item.getGoodsCount())));
|
orderMealGood.setTypeId(item1.getTypeId());
|
orderMealGood.setGoodsId(item1.getId());
|
orderMealGood.setTypeName(list1.stream().filter(item2 -> item2.getId().equals(item1.getTypeId())).findFirst().get().getTypeName());
|
orderMealGoods.add(orderMealGood);
|
});
|
});
|
// 添加菜品
|
orderMealGoods.forEach(item -> {
|
item.setOrderId(dto.getOrderId());
|
});
|
orderMealGoodsService.saveBatch(orderMealGoods);
|
// 添加备注
|
// TOrderRemark tOrderRemark = new TOrderRemark();
|
// tOrderRemark.setOrderId(dto.getOrderId());
|
// tOrderRemark.setRemark(dto.getRemark());
|
// tOrderRemark.setCreateTime(LocalDateTime.now());
|
// orderRemarkService.save(tOrderRemark);
|
}
|
|
@Override
|
public void checkout(CheckoutDTO dto) {
|
TOrderMeal orderMeal = this.getById(dto.getOrderId());
|
orderMeal.setPayType(dto.getPayType());
|
orderMeal.setPayMoney(dto.getPayMoney());
|
orderMeal.setStatus(2);
|
this.updateById(orderMeal);
|
TBoard board = boardService.getById(orderMeal.getBoardId());
|
board.setStatus(BoardEnum.FREE.getCode());
|
boardService.updateById(board);
|
}
|
|
@Override
|
public PageInfo<TOrderMealVO> pageList(TOrderMealQuery query) {
|
if(Objects.nonNull(query.getTimeType())){
|
LocalDateTime startTime = null;
|
LocalDateTime endTime = null;
|
switch (query.getTimeType()){
|
case 1:
|
// 今日
|
startTime = LocalDateTime.MIN;
|
endTime = LocalDateTime.MAX;
|
break;
|
case 2:
|
// 昨日
|
startTime = LocalDateTime.now().minusDays(1);
|
endTime = LocalDateTime.now().minusDays(1);
|
break;
|
case 3:
|
// 近7天
|
startTime = LocalDateTime.now().minusDays(7);
|
endTime = LocalDateTime.now();
|
break;
|
case 4:
|
// 近30天
|
startTime = LocalDateTime.now().minusDays(30);
|
endTime = LocalDateTime.now();
|
break;
|
}
|
query.setStartTime(DateUtils.localDateTimeToDate(startTime));
|
query.setEndTime(DateUtils.localDateTimeToDate(endTime));
|
}
|
PageInfo<TOrderMealVO> pageInfo = new PageInfo<>(query.getPageNum(),query.getPageSize());
|
List<TOrderMealVO> list = this.baseMapper.pageList(query,pageInfo);
|
// 查询商品信息
|
for (TOrderMealVO tOrderMealVO : list) {
|
List<TOrderMealGoods> list1 = orderMealGoodsService.list(Wrappers.lambdaQuery(TOrderMealGoods.class)
|
.eq(TOrderMealGoods::getOrderId, tOrderMealVO.getId()));
|
tOrderMealVO.setOrderMealGoods(list1);
|
if(!CollectionUtils.isEmpty(list1)){
|
Map<String, List<TOrderMealGoods>> map = list1.stream().collect(Collectors.groupingBy(TOrderMealGoods::getTypeName));
|
List<String> goodsList = new ArrayList<>();
|
map.forEach((k,v)->{
|
goodsList.add(k+":"+v.stream().map(item->item.getGoodsName()+" "+(item.getGoodsSalePrice().multiply(new BigDecimal(item.getGoodsCount())))).collect(Collectors.joining(",")));
|
});
|
tOrderMealVO.setGoodsList(goodsList);
|
}
|
}
|
pageInfo.setRecords(list);
|
return pageInfo;
|
}
|
|
@Override
|
public AmountSumVO amountSum(TOrderMealQuery query) {
|
return this.baseMapper.amountSum(query);
|
}
|
|
|
@Override
|
public SalesVolumeVO salesVolume(TDataStatisticsQuery query) {
|
SalesVolumeVO salesVolumeVO = this.baseMapper.salesVolume(query);
|
salesVolumeVO.setSalesVolumeTotal(salesVolumeVO.getWeiXinPay().add(salesVolumeVO.getOtherPay()).add(salesVolumeVO.getCardPay())
|
.add(salesVolumeVO.getMoneyPay()).add(salesVolumeVO.getAliPay()));
|
// 查询成本
|
List<TOrderMeal> list = this.list(Wrappers.lambdaQuery(TOrderMeal.class)
|
.eq(TOrderMeal::getShopId, query.getShopId()));
|
List<Long> ids = list.stream().map(TOrderMeal::getId).collect(Collectors.toList());
|
if(!CollectionUtils.isEmpty(ids)){
|
BigDecimal costTotal = orderMealGoodsService.costTotal(ids);
|
salesVolumeVO.setCostTotal(costTotal);
|
salesVolumeVO.setProfitTotal(salesVolumeVO.getSalesVolumeTotal().subtract(costTotal));
|
}
|
return salesVolumeVO;
|
}
|
|
@Override
|
public List<SalesRankingVO> salesRanking(TDataStatisticsQuery query) {
|
List<TOrderMeal> list = this.list(Wrappers.lambdaQuery(TOrderMeal.class)
|
.eq(TOrderMeal::getShopId, query.getShopId())
|
.between(TOrderMeal::getCreateTime, query.getStartTime(), query.getEndTime()));
|
List<Long> ids = list.stream().map(TOrderMeal::getId).collect(Collectors.toList());
|
List<SalesRankingVO> salesRankingVOS = new ArrayList<>();
|
if(!CollectionUtils.isEmpty(ids)){
|
List<TOrderMealGoods> list1 = orderMealGoodsService.list(Wrappers.lambdaQuery(TOrderMealGoods.class)
|
.in(TOrderMealGoods::getOrderId, ids));
|
Map<String, List<TOrderMealGoods>> listMap = list1.stream().collect(Collectors.groupingBy(TOrderMealGoods::getTypeName));
|
listMap.forEach((k,v)->{
|
SalesRankingVO salesRankingVO = new SalesRankingVO();
|
salesRankingVO.setTypeName(k);
|
salesRankingVO.setSalesVolume(v.stream().map(item->item.getGoodsSalePrice().multiply(new BigDecimal(item.getGoodsCount()))).reduce(BigDecimal.ZERO, BigDecimal::add));
|
salesRankingVOS.add(salesRankingVO);
|
});
|
}
|
return salesRankingVOS;
|
}
|
|
@Override
|
public List<TOrderMealVO> exportOrderMeal(TOrderMealQuery query) {
|
if(Objects.nonNull(query.getTimeType())){
|
LocalDateTime startTime = null;
|
LocalDateTime endTime = null;
|
switch (query.getTimeType()){
|
case 1:
|
// 今日
|
startTime = LocalDateTime.MIN;
|
endTime = LocalDateTime.MAX;
|
break;
|
case 2:
|
// 昨日
|
startTime = LocalDateTime.now().minusDays(1);
|
endTime = LocalDateTime.now().minusDays(1);
|
break;
|
case 3:
|
// 近7天
|
startTime = LocalDateTime.now().minusDays(7);
|
endTime = LocalDateTime.now();
|
break;
|
case 4:
|
// 近30天
|
startTime = LocalDateTime.now().minusDays(30);
|
endTime = LocalDateTime.now();
|
break;
|
}
|
query.setStartTime(DateUtils.localDateTimeToDate(startTime));
|
query.setEndTime(DateUtils.localDateTimeToDate(endTime));
|
}
|
List<TOrderMealVO> list = this.baseMapper.exportOrderMeal(query);
|
List<Long> ids = list.stream().map(TOrderMealVO::getId).collect(Collectors.toList());
|
List<TOrderMealGoods> list1 = orderMealGoodsService.list(Wrappers.lambdaQuery(TOrderMealGoods.class)
|
.in(TOrderMealGoods::getOrderId,ids));
|
// 查询商品信息
|
for (TOrderMealVO tOrderMealVO : list) {
|
List<TOrderMealGoods> collect = list1.stream().filter(e -> e.getOrderId().equals(tOrderMealVO.getId())).collect(Collectors.toList());
|
tOrderMealVO.setOrderMealGoods(collect);
|
Map<String, List<TOrderMealGoods>> map = collect.stream().collect(Collectors.groupingBy(TOrderMealGoods::getTypeName));
|
List<String> goodsList = new ArrayList<>();
|
map.forEach((k,v)->{
|
goodsList.add(k+":"+v.stream().map(item->item.getGoodsName()+" "+(item.getGoodsSalePrice().multiply(new BigDecimal(item.getGoodsCount())))).collect(Collectors.joining(",")));
|
});
|
tOrderMealVO.setGoodsList(goodsList);
|
}
|
return list;
|
}
|
|
@Override
|
public List<OrderTrendsVO> orderingTrends(TDataStatisticsQuery query) {
|
return this.baseMapper.orderingTrends(query);
|
}
|
|
@Override
|
public List<PersonnelStatisticsVO> personnelStatistics(TDataStatisticsQuery query) {
|
return this.baseMapper.personnelStatistics(query);
|
}
|
|
@Override
|
public PageInfo<TOrderMealVO> pageListGenerator(TDataGeneratorMealQuery query) {
|
PageInfo<TOrderMealVO> pageInfo = new PageInfo<>(query.getPageNum(),query.getPageSize());
|
List<TOrderMealVO> list = this.baseMapper.pageListGenerator(query,pageInfo);
|
// 查询商品信息
|
for (TOrderMealVO tOrderMealVO : list) {
|
List<TOrderMealGoods> list1 = orderMealGoodsService.list(Wrappers.lambdaQuery(TOrderMealGoods.class)
|
.eq(TOrderMealGoods::getOrderId, tOrderMealVO.getId()));
|
tOrderMealVO.setOrderMealGoods(list1);
|
Map<String, List<TOrderMealGoods>> map = list1.stream().collect(Collectors.groupingBy(TOrderMealGoods::getTypeName));
|
List<String> goodsList = new ArrayList<>();
|
map.forEach((k,v)->{
|
goodsList.add(k+":"+v.stream().map(item->item.getGoodsName()+" "+(item.getGoodsSalePrice().multiply(new BigDecimal(item.getGoodsCount())))).collect(Collectors.joining(",")));
|
});
|
tOrderMealVO.setGoodsList(goodsList);
|
}
|
pageInfo.setRecords(list);
|
return pageInfo;
|
}
|
|
@Override
|
public Map<String, Double> getDataGeneratorMealDetail(TDataGeneratorMealQuery query) {
|
return this.baseMapper.getDataGeneratorMealDetail(query);
|
}
|
|
@Override
|
public List<TOrderMealVO> mealGeneratorExport(TDataGeneratorMealQuery query) {
|
List<TOrderMealVO> list = this.baseMapper.mealGeneratorExport(query);
|
List<Long> ids = list.stream().map(TOrderMealVO::getId).collect(Collectors.toList());
|
List<TOrderMealGoods> list1 = orderMealGoodsService.list(Wrappers.lambdaQuery(TOrderMealGoods.class)
|
.in(TOrderMealGoods::getOrderId,ids));
|
// 查询商品信息
|
for (TOrderMealVO tOrderMealVO : list) {
|
List<TOrderMealGoods> collect = list1.stream().filter(e -> e.getOrderId().equals(tOrderMealVO.getId())).collect(Collectors.toList());
|
tOrderMealVO.setOrderMealGoods(collect);
|
Map<String, List<TOrderMealGoods>> map = collect.stream().collect(Collectors.groupingBy(TOrderMealGoods::getTypeName));
|
List<String> goodsList = new ArrayList<>();
|
map.forEach((k,v)->{
|
goodsList.add(k+":"+v.stream().map(item->item.getGoodsName()+" "+(item.getGoodsSalePrice().multiply(new BigDecimal(item.getGoodsCount())))).collect(Collectors.joining(",")));
|
});
|
tOrderMealVO.setGoodsList(goodsList);
|
}
|
return list;
|
}
|
|
@Override
|
public void startMeal(TOrderMeal dto) {
|
// 查询餐桌
|
TBoard board = boardService.getById(dto.getBoardId());
|
// 开台
|
board.setStatus(BoardEnum.WAITING_ORDER.getCode());
|
boardService.updateById(board);
|
dto.setMealTime(LocalDate.now());
|
dto.setOrderNum(OrderNumConstants.MEAL + CodeGenerateUtils.generateVolumeSn());
|
this.save(dto);
|
}
|
|
}
|