xuhy
3 天以前 508f3e225df87e0da974424981e7782fc5ce875c
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TOrderMealServiceImpl.java
@@ -11,6 +11,8 @@
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.system.domain.*;
import com.ruoyi.system.dto.*;
import com.ruoyi.system.export.SumGeneratorClient;
import com.ruoyi.system.export.SumGeneratorDetailClient;
import com.ruoyi.system.mapper.TOrderMealGoodsMapper;
import com.ruoyi.system.mapper.TOrderMealMapper;
import com.ruoyi.system.query.*;
@@ -87,11 +89,13 @@
            // 查询已存在的菜品
            List<TOrderMealGoods> list2 = orderMealGoodsService.list(Wrappers.lambdaQuery(TOrderMealGoods.class)
                    .in(TOrderMealGoods::getOrderId, dto.getId()));
            BigDecimal money = BigDecimal.ZERO;
            for (MealOrderGoodsDTO mealOrderGoodsDTO : mealOrderGoodsDTOS) {
                TOrderMealGoods tOrderMealGoods = list2.stream().filter(item1 -> item1.getGoodsId().equals(mealOrderGoodsDTO.getGoodsId())).findFirst().orElse(null);
                if(Objects.nonNull(tOrderMealGoods)){
                    tOrderMealGoods.setGoodsCount(tOrderMealGoods.getGoodsCount()+mealOrderGoodsDTO.getGoodsCount());
                    orderMealGoods.add(tOrderMealGoods);
                    money = money.add(tOrderMealGoods.getGoodsSalePrice().multiply(new BigDecimal(mealOrderGoodsDTO.getGoodsCount())));
                    continue;
                }
                for (TGoods goods : list) {
@@ -107,16 +111,16 @@
                        orderMealGood.setGoodsId(goods.getId());
                        orderMealGood.setTypeName(list1.stream().filter(item2 -> item2.getId().equals(goods.getTypeId())).findFirst().get().getTypeName());
                        orderMealGoods.add(orderMealGood);
                        money = money.add(goods.getSalePrice().multiply(new BigDecimal(mealOrderGoodsDTO.getGoodsCount())));
                    }
                }
            }
            BigDecimal orderMoney = orderMeal.getOrderMoney();
            // 添加菜品
            for (TOrderMealGoods orderMealGood : orderMealGoods) {
                orderMealGood.setOrderId(dto.getId());
                orderMoney = orderMoney.add(orderMealGood.getGoodsSalePrice().multiply(new BigDecimal(orderMealGood.getGoodsCount())));
            }
            orderMealGoodsService.saveOrUpdateBatch(orderMealGoods);
            BigDecimal orderMoney = orderMeal.getOrderMoney().add(money);
            orderMeal.setOrderMoney(orderMoney);
            this.updateById(orderMeal);
            // 添加备注
@@ -210,13 +214,18 @@
        }
        PageInfo<TOrderMealVO> pageInfo = new PageInfo<>(query.getPageNum(),query.getPageSize());
        List<TOrderMealVO> list = this.baseMapper.pageList(query,pageInfo);
        if(CollectionUtils.isEmpty(list)){
            return new PageInfo<>();
        }
        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> 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<TOrderMealGoods> collect = list1.stream().filter(e -> e.getOrderId().equals(tOrderMealVO.getId())).collect(Collectors.toList());
            tOrderMealVO.setOrderMealGoods(collect);
            if(!CollectionUtils.isEmpty(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(",")));
@@ -435,7 +444,7 @@
        // 开台
        board.setStatus(BoardEnum.WAITING_ORDER.getCode());
        boardService.updateById(board);
        dto.setMealTime(LocalDate.now());
        dto.setMealTime(dto.getMealTime());
        dto.setOrderNum(OrderNumConstants.MEAL + CodeGenerateUtils.generateVolumeSn());
        this.save(dto);
    }
@@ -486,4 +495,41 @@
        return this.baseMapper.profitDetailsExport(query);
    }
    @Override
    public void deleteByShopId(Long shopId) {
        this.baseMapper.deleteByShopId(shopId);
    }
    @Override
    public Map<String, Double> getDataGeneratorMealDetailOrderMoney(TDataGeneratorMealQuery query) {
        return this.baseMapper.getDataGeneratorMealDetailOrderMoney(query);
    }
    @Override
    public SumGeneratorClient sumExport(ProfitDetailsQuery query) {
        List<SumGeneratorDetailClient> sumGeneratorDetailClient = this.baseMapper.sumExport(query);
        for (SumGeneratorDetailClient generatorDetailClient : sumGeneratorDetailClient) {
            generatorDetailClient.setSingleAmount(generatorDetailClient.getActualAmount().divide(new BigDecimal(generatorDetailClient.getOrderCount()),2,BigDecimal.ROUND_DOWN));
            generatorDetailClient.setPerAmount(generatorDetailClient.getActualAmount().divide(new BigDecimal(generatorDetailClient.getPerCount()),2,BigDecimal.ROUND_DOWN));
        }
        SumGeneratorClient sumGeneratorClient = new SumGeneratorClient();
        if(!CollectionUtils.isEmpty(sumGeneratorDetailClient)){
            sumGeneratorClient.setActualAmountSum(sumGeneratorDetailClient.stream().map(SumGeneratorDetailClient::getActualAmount).reduce(BigDecimal::add).get());
            sumGeneratorClient.setOrderCountSum(sumGeneratorDetailClient.stream().map(SumGeneratorDetailClient::getOrderCount).reduce(Integer::sum).get());
            sumGeneratorClient.setSingleAmountSum(sumGeneratorDetailClient.stream().map(SumGeneratorDetailClient::getSingleAmount).reduce(BigDecimal::add).get());
            sumGeneratorClient.setPerCountSum(sumGeneratorDetailClient.stream().map(SumGeneratorDetailClient::getPerCount).reduce(Integer::sum).get());
            sumGeneratorClient.setPerAmountSum(sumGeneratorDetailClient.stream().map(SumGeneratorDetailClient::getPerAmount).reduce(BigDecimal::add).get());
            sumGeneratorClient.setAllMoney(sumGeneratorDetailClient.stream().map(SumGeneratorDetailClient::getActualAmount).reduce(BigDecimal::add).get());
            sumGeneratorClient.setSingleAvgAmount(sumGeneratorClient.getAllMoney().divide(new BigDecimal(sumGeneratorClient.getPerCountSum()),2,BigDecimal.ROUND_DOWN));
            sumGeneratorClient.setPerCapitaAmount(sumGeneratorClient.getAllMoney().divide(new BigDecimal(sumGeneratorClient.getOrderCountSum()),2,BigDecimal.ROUND_DOWN));
        }
        sumGeneratorClient.setOrderStatistics(sumGeneratorDetailClient);
        return sumGeneratorClient;
    }
}