|
@@ -3,6 +3,7 @@ package com.usky.dxtop.service.impl;
|
|
|
|
|
|
import cn.afterturn.easypoi.excel.ExcelExportUtil;
|
|
|
import cn.afterturn.easypoi.excel.entity.ExportParams;
|
|
|
+import com.alibaba.fastjson.JSON;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
@@ -21,6 +22,7 @@ import com.usky.dxtop.service.DishService;
|
|
|
import com.usky.dxtop.service.ISysAsyncTaskService;
|
|
|
import com.usky.dxtop.service.SysFileService;
|
|
|
import com.usky.dxtop.service.emun.AsyncResultType;
|
|
|
+import com.usky.dxtop.service.vo.DishCollectExportVO;
|
|
|
import com.usky.dxtop.service.vo.DishExport;
|
|
|
import com.usky.dxtop.service.vo.DishRequest;
|
|
|
import ma.glasnost.orika.MapperFacade;
|
|
@@ -34,10 +36,7 @@ import org.springframework.stereotype.Service;
|
|
|
import org.springframework.web.multipart.MultipartFile;
|
|
|
|
|
|
import java.io.IOException;
|
|
|
-import java.util.ArrayList;
|
|
|
-import java.util.Date;
|
|
|
-import java.util.List;
|
|
|
-import java.util.Map;
|
|
|
+import java.util.*;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
@@ -95,6 +94,96 @@ public class DishServiceImpl extends ServiceImpl<DishMapper, Dish> implements Di
|
|
|
return String.valueOf(taskId);
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public CommonPage<DishCollectExportVO> collect(Integer current, Integer size, Date startTime, Date endTime) {
|
|
|
+ IPage<Map<String,Object>> page = new Page<>(current, size);
|
|
|
+ String dateType = "DATE(create_time) reportDate";
|
|
|
+ QueryWrapper<Dish> queryWrapper = new QueryWrapper<>();
|
|
|
+ queryWrapper.select(dateType,
|
|
|
+ "cast(sum(amt) AS decimal(15,2)) as totalMoney",
|
|
|
+ "sum(if(shop_name = '餐厅', amt, 0)) as canteen",
|
|
|
+ "sum(if(shop_name = '6F', amt, 0)) as sixFloor",
|
|
|
+ "sum(if(shop_name = '1F便利店', amt, 0)) as oneCircle",
|
|
|
+ "sum(if(shop_name = '1F咖啡店', amt, 0)) as oneCoffee",
|
|
|
+ "'日' as collectType")
|
|
|
+ .between(null != startTime && null != endTime,"create_time",startTime,endTime)
|
|
|
+ .groupBy("reportDate")
|
|
|
+ .orderByDesc("reportDate");
|
|
|
+ IPage<Map<String, Object>> mapIPage = baseMapper.selectMapsPage(page, queryWrapper);
|
|
|
+ String jsonStr = JSON.toJSONString(mapIPage.getRecords());
|
|
|
+ List<DishCollectExportVO> orderReports = JSON.parseArray(jsonStr, DishCollectExportVO.class);
|
|
|
+ return new CommonPage<>(orderReports,page.getTotal(),page.getCurrent(),page.getSize());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public String dayCollectExport(Date startTime, Date endTime) {
|
|
|
+ LoginUser loginUser = SecurityUtils.getLoginUser();
|
|
|
+ SysUser user = loginUser.getUser();
|
|
|
+ Long taskId = sysAsyncTaskService.getId(user.getUserName(), "消费日报表");
|
|
|
+ if (null == taskId) {
|
|
|
+ throw new CustomException("获取次数太多了请稍后获取");
|
|
|
+ }
|
|
|
+ ((DishServiceImpl) AopContext.currentProxy()).syncDishCollect(taskId,startTime,endTime);
|
|
|
+ return String.valueOf(taskId);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ @Async
|
|
|
+ public void syncDishCollect(Long taskId, Date startTime,Date endTime){
|
|
|
+ Workbook workbook = null;
|
|
|
+ try {
|
|
|
+ ExportParams params = new ExportParams(null, "消费日报表");
|
|
|
+ workbook = ExcelExportUtil.exportBigExcel(params, DishCollectExportVO.class,
|
|
|
+ (o, i) -> {
|
|
|
+ CommonPage<DishCollectExportVO> page = this.collect(i,30,startTime,endTime);
|
|
|
+ return new ArrayList<>(page.getRecords());
|
|
|
+ },null);
|
|
|
+ if (null != workbook) {
|
|
|
+ String fileName = String.format("%s.xls", "消费日报表");
|
|
|
+ MultipartFile multipartFile = ExcelUtils.downLoadExcel(workbook, fileName);
|
|
|
+ uploadCollect(multipartFile,taskId);
|
|
|
+ } else {
|
|
|
+ sysAsyncTaskService.sendResult(taskId, false, "表格数据为空", AsyncResultType.TEXT);
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("导出文件失败", e);
|
|
|
+ sysAsyncTaskService.sendResult(taskId, false, "导出订单文件失败", AsyncResultType.TEXT);
|
|
|
+ } finally {
|
|
|
+ if (workbook != null) {
|
|
|
+ try {
|
|
|
+ workbook.close();
|
|
|
+ } catch (IOException e) {
|
|
|
+ log.error("===export spec=== 关闭workbook失败", e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public void uploadCollect(MultipartFile multipartFile, Long taskId){
|
|
|
+ List<MultipartFile> list = new ArrayList<>();
|
|
|
+ list.add(multipartFile);
|
|
|
+ String batchNo = sysFileService.generateBatchNo();
|
|
|
+ SysFile sysFile = new SysFile();
|
|
|
+ sysFile.setBatchNo(batchNo);
|
|
|
+ sysFile.setFiles(list);
|
|
|
+ sysFile.setUploadType(SysFileServiceImpl.FILE);
|
|
|
+ sysFile.setBusinessType("消费日报表");
|
|
|
+ sysFile.setExpriceAt(DateUtils.addDays(new Date(), 3));
|
|
|
+ List<SysFile> sysFileList = sysFileService.addFile(sysFile);
|
|
|
+ long count = sysFileList.stream().filter(sysFileDTO -> !sysFileDTO.getSuccess()).count();
|
|
|
+ if (count > 0) {
|
|
|
+ sysAsyncTaskService.sendResult(taskId, false, "上传文件失败", AsyncResultType.TEXT);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ List<String> idList = sysFileList.stream().map(sf -> sf.getId().toString()).collect(Collectors.toList());
|
|
|
+ boolean active = sysFileService.active(batchNo,idList);
|
|
|
+ if (active) {
|
|
|
+ sysAsyncTaskService.sendResult(taskId, true, batchNo, AsyncResultType.FILE);
|
|
|
+ } else {
|
|
|
+ sysAsyncTaskService.sendResult(taskId, false, "上传文件失败", AsyncResultType.TEXT);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
@Async
|
|
|
public void syncDish(Long taskId, DishRequest dishRequest){
|