package com.ruoyi.web.controller.api; import cn.afterturn.easypoi.excel.ExcelExportUtil; import cn.afterturn.easypoi.excel.entity.ExportParams; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.ruoyi.common.basic.PageInfo; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.WebUtils; import com.ruoyi.framework.web.service.TokenService; import com.ruoyi.system.domain.*; import com.ruoyi.system.dto.CheckoutDTO; import com.ruoyi.system.dto.TOrderMealDTO; import com.ruoyi.system.export.TOrderMealExportExcel; import com.ruoyi.system.query.TOrderMealQuery; import com.ruoyi.system.service.*; import com.ruoyi.system.vo.AmountSumVO; import com.ruoyi.system.vo.TOrderMealVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.apache.poi.ss.usermodel.Workbook; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.util.CollectionUtils; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.math.BigDecimal; import java.net.URLEncoder; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** *

* 餐饮订单 前端控制器 *

* * @author xiaochen * @since 2024-08-14 */ @Api(tags = "餐饮") @RestController @RequestMapping("/t-order-meal") public class TOrderMealController { private final TOrderMealService orderMealService; private final TOrderMealGoodsService orderMealGoodsService; private final TGoodsTypeService goodsTypeService; private final TGoodsService goodsService; private final TBoardService boardService; private final TokenService tokenService; @Autowired public TOrderMealController(TOrderMealService orderMealService, TOrderMealGoodsService orderMealGoodsService, TGoodsTypeService goodsTypeService, TGoodsService goodsService, TBoardService boardService, TokenService tokenService) { this.orderMealService = orderMealService; this.orderMealGoodsService = orderMealGoodsService; this.goodsTypeService = goodsTypeService; this.goodsService = goodsService; this.boardService = boardService; this.tokenService = tokenService; } /** * 查询餐饮列表 */ @ApiOperation( value = "查询餐饮分页列表") @PostMapping(value = "/pageList") public AjaxResult> pageList(@RequestBody TOrderMealQuery query) { query.setShopId(tokenService.getLoginUser().getObjectId()); return AjaxResult.success(orderMealService.pageList(query)); } /** * 查询餐饮金额统计 */ @ApiOperation( value = "查询餐饮金额统计") @PostMapping(value = "/amountSum") public AjaxResult amountSum(@RequestBody TOrderMealQuery query) { query.setShopId(tokenService.getLoginUser().getObjectId()); AmountSumVO amountSumVO = orderMealService.amountSum(query); if(amountSumVO.getObligation().compareTo(BigDecimal.ZERO) < 0){ amountSumVO.setObligation(BigDecimal.ZERO); } return AjaxResult.success(amountSumVO); } @ApiOperation( value = "查询餐饮详情") @GetMapping(value = "/getDetailById") public AjaxResult getDetailById(@RequestParam(value = "id") Long id) { TOrderMeal orderMeal = orderMealService.getById(id); TOrderMealVO orderMealVO = new TOrderMealVO(); BeanUtils.copyProperties(orderMeal, orderMealVO); List list = orderMealGoodsService.list(Wrappers.lambdaQuery(TOrderMealGoods.class) .eq(TOrderMealGoods::getOrderId, orderMeal.getId())); if(!CollectionUtils.isEmpty(list)){ Map> map = list.stream().collect(Collectors.groupingBy(TOrderMealGoods::getTypeName)); List 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(","))); }); orderMealVO.setGoodsList(goodsList); } orderMealVO.setOrderMealGoods(list); // 查询用餐人数 TBoard board = boardService.getById(orderMeal.getBoardId()); orderMealVO.setMaxPerson(board.getMaxPerson()); orderMealVO.setMinPerson(board.getMinPerson()); orderMealVO.setBoardName(board.getBoardName()); return AjaxResult.success(orderMealVO); } @ApiOperation( value = "修改") @PostMapping(value = "/update") public AjaxResult update(@RequestBody TOrderMealDTO dto) { // 删除所有菜品 orderMealService.updateById(dto); if(!CollectionUtils.isEmpty(dto.getMealOrderGoods())){ orderMealGoodsService.remove(Wrappers.lambdaQuery(TOrderMealGoods.class) .eq(TOrderMealGoods::getOrderId, dto.getId())); for (TOrderMealGoods mealOrderGood : dto.getMealOrderGoods()) { // 设置商品类型和类型id TGoodsType goodsType = goodsTypeService.getById(mealOrderGood.getTypeId()); mealOrderGood.setId(null); mealOrderGood.setOrderId(dto.getId()); mealOrderGood.setTypeId(goodsType.getId()); mealOrderGood.setTypeName(goodsType.getTypeName()); } orderMealGoodsService.saveBatch(dto.getMealOrderGoods()); } return AjaxResult.success(); } @ApiOperation( value = "列表详情结账") @PostMapping(value = "/detailUpdate") public AjaxResult detailUpdate(@RequestBody TOrderMealDTO dto) { orderMealService.updateById(dto); // 查询餐桌 List mealOrderGoods = dto.getMealOrderGoods(); if (!CollectionUtils.isEmpty(mealOrderGoods)) { // 删除所有菜品 orderMealGoodsService.remove(Wrappers.lambdaQuery(TOrderMealGoods.class) .eq(TOrderMealGoods::getOrderId, dto.getId())); for (TOrderMealGoods mealOrderGood : mealOrderGoods) { // 设置商品类型和类型id mealOrderGood.setId(null); } orderMealGoodsService.saveBatch(mealOrderGoods); } return AjaxResult.success(); } @ApiOperation( value = "删除餐饮订单") @GetMapping(value = "/deleteById") public AjaxResult deleteById(@RequestParam(value = "id") Long id) { orderMealGoodsService.remove(Wrappers.lambdaQuery(TOrderMealGoods.class) .eq(TOrderMealGoods::getOrderId, id)); return AjaxResult.success(orderMealService.removeById(id)); } /** * 添加餐饮管理 */ @ApiOperation( value = "开台") @PostMapping(value = "/startMeal") public AjaxResult startMeal(@RequestBody TOrderMeal dto) { dto.setShopId(tokenService.getLoginUser().getObjectId()); orderMealService.startMeal(dto); return AjaxResult.success(dto.getId()); } /** * 添加餐饮管理 */ @ApiOperation( value = "点菜接口") @PostMapping(value = "/add") public AjaxResult add(@RequestBody TOrderMealDTO dto) { orderMealService.add(dto); return AjaxResult.success(dto.getId()); } // @ApiOperation( value = "加菜接口") // @PostMapping(value = "/addDish") // public AjaxResult addDish(@Validated @RequestBody AddDishDTO dto) { // orderMealService.addDish(dto); // return AjaxResult.success(); // } @ApiOperation( value = "结账接口") @PostMapping(value = "/checkout") public AjaxResult checkout(@Validated @RequestBody CheckoutDTO dto) { orderMealService.checkout(dto); return AjaxResult.success(); } /** * 导出餐饮列表 */ @ApiOperation(value = "导出餐饮列表") @PostMapping("/exportOrderMeal") public void exportOrderMeal(@RequestBody TOrderMealQuery query) { query.setShopId(tokenService.getLoginUser().getObjectId()); List list = orderMealService.exportOrderMeal(query); List orderMeals = new ArrayList<>(); for (TOrderMealVO orderMealVO : list) { TOrderMealExportExcel tOrderMealExportExcel = new TOrderMealExportExcel(); BeanUtils.copyProperties(orderMealVO, tOrderMealExportExcel); tOrderMealExportExcel.setCreateStrTime(DateUtils.localDateTimeToString(orderMealVO.getCreateTime())); tOrderMealExportExcel.setGoodsList(orderMealVO.getGoodsList().stream().collect(Collectors.joining("\n"))); orderMeals.add(tOrderMealExportExcel); } Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), TOrderMealExportExcel.class, orderMeals); HttpServletResponse response = WebUtils.response(); response.setContentType("application/vnd.ms-excel"); response.setCharacterEncoding("utf-8"); ServletOutputStream outputStream = null; try { String fileName = URLEncoder.encode("餐饮列表.xls", "utf-8"); response.setHeader("Content-Disposition", "attachment;filename=" + fileName); response.setContentType("application/vnd.ms-excel;charset=UTF-8"); response.setHeader("Pragma", "no-cache"); response.setHeader("Cache-Control", "no-cache"); outputStream = response.getOutputStream(); workbook.write(outputStream); } catch (IOException e) { e.printStackTrace(); } finally { try { outputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } }