package com.ruoyi.web.controller.api;
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import com.ruoyi.common.basic.PageInfo;
import com.ruoyi.common.constant.OrderNumConstants;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.redis.RedisCache;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.WebUtils;
import com.ruoyi.framework.web.service.TokenService;
import com.ruoyi.system.domain.TOrderSaleGoods;
import com.ruoyi.system.domain.TOrderStockGoods;
import com.ruoyi.system.dto.OrderMealGeneratorDTO;
import com.ruoyi.system.dto.OrderSaleGeneratorDTO;
import com.ruoyi.system.export.*;
import com.ruoyi.system.query.TDataGeneratorMealQuery;
import com.ruoyi.system.query.TDataGeneratorQuery;
import com.ruoyi.system.query.TDataGeneratorSaleQuery;
import com.ruoyi.system.query.TDataGeneratorStockQuery;
import com.ruoyi.system.service.TDataGeneratorService;
import com.ruoyi.system.service.TOrderMealService;
import com.ruoyi.system.service.TOrderSaleService;
import com.ruoyi.system.service.TOrderStockService;
import com.ruoyi.system.vo.*;
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.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.stream.Collectors;
/**
*
* 营业数据生成 前端控制器
*
*
* @author xiaochen
* @since 2024-08-27
*/
@Api(tags = "数据生成管理")
@RestController
@RequestMapping("/t-data-generator")
public class TDataGeneratorController {
private final TOrderMealService orderMealService;
private final TOrderSaleService orderSaleService;
private final TOrderStockService orderStockService;
private final TDataGeneratorService dataGeneratorService;
private final TokenService tokenService;
private final RedisCache redisCache;
@Autowired
public TDataGeneratorController(TOrderMealService orderMealService, TOrderSaleService orderSaleService, TOrderStockService orderStockService, TDataGeneratorService dataGeneratorService, TokenService tokenService, RedisCache redisCache) {
this.orderMealService = orderMealService;
this.orderSaleService = orderSaleService;
this.orderStockService = orderStockService;
this.dataGeneratorService = dataGeneratorService;
this.tokenService = tokenService;
this.redisCache = redisCache;
}
@ApiOperation( value = "餐饮数据生成")
@PostMapping(value = "/mealDataGenerator")
public AjaxResult mealDataGenerator(@RequestBody OrderMealGeneratorDTO dto) {
dto.setUserId(tokenService.getLoginUser().getUserId());
dto.setNickName(tokenService.getLoginUser().getNickName());
dataGeneratorService.mealDataGenerator(dto);
return AjaxResult.success();
}
@ApiOperation( value = "销售数据生成")
@PostMapping(value = "/saleDataGenerator")
public AjaxResult saleDataGenerator(@RequestBody OrderSaleGeneratorDTO dto) {
dto.setUserId(tokenService.getLoginUser().getUserId());
dto.setNickName(tokenService.getLoginUser().getNickName());
dataGeneratorService.saleDataGenerator(dto);
return AjaxResult.success();
}
@ApiOperation( value = "数据生成分页")
@PostMapping(value = "/pageList")
public AjaxResult> pageList(@Validated @RequestBody TDataGeneratorQuery query) {
return AjaxResult.success(dataGeneratorService.pageList(query));
}
@ApiOperation( value = "数据生成删除")
@DeleteMapping(value = "/deleteById")
public AjaxResult deleteById(@RequestParam("id") Long id) {
dataGeneratorService.removeById(id);
return AjaxResult.success();
}
@ApiOperation( value = "数据覆盖")
@GetMapping(value = "/dataCoverage")
public AjaxResult dataCoverage(@RequestParam(value = "id") Long id) {
dataGeneratorService.dataCoverage(id);
return AjaxResult.success();
}
@ApiOperation( value = "数据生成终止 shopId=店铺id type: 1=餐饮 2=进货")
@GetMapping(value = "/stopGenerator")
public AjaxResult stopGenerator(@RequestParam(value = "shopId") Long shopId,
@RequestParam(value = "type") Integer type) {
if(type == 1){
redisCache.setCacheObject(OrderNumConstants.MEAL+"_"+shopId,shopId);
}else {
redisCache.setCacheObject(OrderNumConstants.STOCK+"_"+shopId,shopId);
}
return AjaxResult.success();
}
@ApiOperation( value = "餐饮生成数据详情")
@PostMapping(value = "/mealGeneratorDataDetail")
public AjaxResult mealGeneratorDataDetail(@Validated @RequestBody TDataGeneratorMealQuery query) {
return AjaxResult.success(dataGeneratorService.mealGeneratorDataDetail(query));
}
@ApiOperation( value = "销售生成数据详情")
@PostMapping(value = "/saleGeneratorDataDetail")
public AjaxResult saleGeneratorDataDetail(@Validated @RequestBody TDataGeneratorSaleQuery query) {
return AjaxResult.success(dataGeneratorService.saleGeneratorDataDetail(query));
}
@ApiOperation( value = "进货生成数据详情")
@PostMapping(value = "/stockGeneratorDataDetail")
public AjaxResult stockGeneratorDataDetail(@Validated @RequestBody TDataGeneratorStockQuery query) {
return AjaxResult.success(dataGeneratorService.stockGeneratorDataDetail(query));
}
@ApiOperation( value = "餐饮生成数据详情导出")
@PostMapping(value = "/mealGeneratorExport")
public void mealGeneratorExport(@Validated @RequestBody TDataGeneratorMealQuery query) {
List list = orderMealService.mealGeneratorExport(query);
List orderMeals = new ArrayList<>();
for (TOrderMealVO orderMealVO : list) {
TOrderMealExportExcel tOrderMealExportExcel = new TOrderMealExportExcel();
BeanUtils.copyProperties(orderMealVO, tOrderMealExportExcel);
tOrderMealExportExcel.setCreateStrTime(DateUtils.localDateToString(orderMealVO.getMealTime()));
tOrderMealExportExcel.setGoodsList(orderMealVO.getGoodsList().stream().collect(Collectors.joining("\n")));
tOrderMealExportExcel.setPersonCount(orderMealVO.getMealPerson());
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();
}
}
}
@ApiOperation( value = "销售生成数据详情导出")
@PostMapping(value = "/saleGeneratorExport")
public void saleGeneratorExport(@Validated @RequestBody TDataGeneratorSaleQuery query) {
List list = orderSaleService.saleGeneratorExport(query);
List orderMeals = new ArrayList<>();
for (TOrderSaleVO orderSaleVO : list) {
TOrderSaleAndGoodsExportExcel orderSaleExportExcel = new TOrderSaleAndGoodsExportExcel();
BeanUtils.copyProperties(orderSaleVO, orderSaleExportExcel);
orderSaleExportExcel.setCreateStrTime(DateUtils.localDateTimeToString(orderSaleVO.getCreateTime()));
orderSaleExportExcel.setGoodsAmount(orderSaleVO.getOrderSaleGoods().stream().map(TOrderSaleGoods::getThisSalePrice).reduce(BigDecimal::add).get());
orderMeals.add(orderSaleExportExcel);
}
Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), TOrderSaleAndGoodsExportExcel.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();
}
}
}
@ApiOperation( value = "进货生成数据详情导出")
@PostMapping(value = "/stockGeneratorExport")
public void stockGeneratorExport(@Validated @RequestBody TDataGeneratorStockQuery query) {
List list = orderStockService.stockGeneratorExport(query);
List orderStockExportExcels = new ArrayList<>();
for (TOrderStockVO orderStockVO : list) {
TOrderStockExportExcel orderStockExportExcel = new TOrderStockExportExcel();
BeanUtils.copyProperties(orderStockVO, orderStockExportExcel);
orderStockExportExcel.setStockTime(DateUtils.localDateToString(orderStockVO.getStockTime()));
orderStockExportExcels.add(orderStockExportExcel);
}
Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), TOrderStockExportExcel.class, orderStockExportExcels);
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();
}
}
}
@ApiOperation( value = "餐饮数据生成列表导出")
@PostMapping(value = "/mealGeneratorListExport")
public void mealGeneratorListExport(@RequestBody TDataGeneratorQuery query) {
List list = orderMealService.mealGeneratorListExport(query);
List mealGeneratorListExports = new ArrayList<>();
for (TDataGeneratorVO dataGeneratorVO : list) {
MealGeneratorListExport mealGeneratorListExport = new MealGeneratorListExport();
BeanUtils.copyProperties(dataGeneratorVO, mealGeneratorListExport);
mealGeneratorListExport.setGeneratorTime(DateUtils.localDateTimeToString(dataGeneratorVO.getCreateTime()));
mealGeneratorListExport.setStartTimeStr(DateUtils.localDateToString(dataGeneratorVO.getStartTime()) + " ~ " + DateUtils.localDateToString(dataGeneratorVO.getEndTime()));
mealGeneratorListExport.setRevenueRange(dataGeneratorVO.getMinMoney() + " ~ " + dataGeneratorVO.getMaxMoney());
mealGeneratorListExports.add(mealGeneratorListExport);
}
Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), MealGeneratorListExport.class, mealGeneratorListExports);
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();
}
}
}
@ApiOperation( value = "销售数据生成列表导出")
@PostMapping(value = "/saleGeneratorListExport")
public void saleGeneratorListExport(@RequestBody TDataGeneratorQuery query) {
List list = orderSaleService.saleGeneratorListExport(query);
List saleGeneratorListExports = new ArrayList<>();
for (TDataGeneratorVO dataGeneratorVO : list) {
SaleGeneratorListExport saleGeneratorListExport = new SaleGeneratorListExport();
BeanUtils.copyProperties(dataGeneratorVO, saleGeneratorListExport);
saleGeneratorListExport.setGeneratorTime(DateUtils.localDateTimeToString(dataGeneratorVO.getCreateTime()));
saleGeneratorListExport.setStartTimeStr(DateUtils.localDateToString(dataGeneratorVO.getStartTime()) + " ~ " + DateUtils.localDateToString(dataGeneratorVO.getEndTime()));
saleGeneratorListExports.add(saleGeneratorListExport);
}
Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), SaleGeneratorListExport.class, saleGeneratorListExports);
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();
}
}
}
}