|
@@ -1,20 +1,44 @@
|
|
|
package com.usky.dxtop.service.impl;
|
|
|
|
|
|
|
|
|
+import cn.afterturn.easypoi.excel.ExcelExportUtil;
|
|
|
+import cn.afterturn.easypoi.excel.entity.ExportParams;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
+import com.usky.dxtop.common.core.domain.model.LoginUser;
|
|
|
import com.usky.dxtop.common.core.page.CommonPage;
|
|
|
+import com.usky.dxtop.common.exception.CustomException;
|
|
|
import com.usky.dxtop.common.utils.DateUtils;
|
|
|
+import com.usky.dxtop.common.utils.ExcelUtils;
|
|
|
+import com.usky.dxtop.common.utils.SecurityUtils;
|
|
|
import com.usky.dxtop.mapper.DishMapper;
|
|
|
import com.usky.dxtop.model.Dish;
|
|
|
+import com.usky.dxtop.model.SysFile;
|
|
|
+import com.usky.dxtop.model.SysUser;
|
|
|
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.DishExport;
|
|
|
import com.usky.dxtop.service.vo.DishRequest;
|
|
|
+import ma.glasnost.orika.MapperFacade;
|
|
|
+import ma.glasnost.orika.MapperFactory;
|
|
|
+import ma.glasnost.orika.impl.DefaultMapperFactory;
|
|
|
+import org.apache.poi.ss.usermodel.Workbook;
|
|
|
+import org.springframework.aop.framework.AopContext;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.scheduling.annotation.Async;
|
|
|
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.stream.Collectors;
|
|
|
|
|
|
|
|
|
* <p>
|
|
@@ -27,6 +51,11 @@ import java.util.Map;
|
|
|
@Service
|
|
|
public class DishServiceImpl extends ServiceImpl<DishMapper, Dish> implements DishService {
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private ISysAsyncTaskService sysAsyncTaskService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private SysFileService sysFileService;
|
|
|
@Override
|
|
|
public CommonPage<Dish> page(DishRequest dishRequest) {
|
|
|
IPage<Dish> page = new Page<>(dishRequest.getCurrent(), dishRequest.getSize());
|
|
@@ -54,5 +83,107 @@ public class DishServiceImpl extends ServiceImpl<DishMapper, Dish> implements Di
|
|
|
return this.updateById(dish);
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public String export(DishRequest dishRequest) {
|
|
|
+ LoginUser loginUser = SecurityUtils.getLoginUser();
|
|
|
+ SysUser user = loginUser.getUser();
|
|
|
+ Long taskId = sysAsyncTaskService.getId(user.getUserName(), "消费记录");
|
|
|
+ if (null == taskId) {
|
|
|
+ throw new CustomException("获取次数太多了请稍后获取");
|
|
|
+ }
|
|
|
+ ((DishServiceImpl) AopContext.currentProxy()).syncDish(taskId,dishRequest);
|
|
|
+ return String.valueOf(taskId);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ @Async
|
|
|
+ public void syncDish(Long taskId, DishRequest dishRequest){
|
|
|
+ Workbook workbook = null;
|
|
|
+ try {
|
|
|
+ ExportParams params = new ExportParams(null, "消费记录");
|
|
|
+ workbook = ExcelExportUtil.exportBigExcel(params, DishExport.class,
|
|
|
+ (o, i) -> {
|
|
|
+ dishRequest.setCurrent(i);
|
|
|
+ dishRequest.setSize(30);
|
|
|
+ CommonPage<Dish> page = this.page(dishRequest);
|
|
|
+ return page.getRecords().stream().map(this::getDishExport).collect(Collectors.toList());
|
|
|
+ },null);
|
|
|
+ if (null != workbook) {
|
|
|
+ String fileName = String.format("%s.xls", "消费记录报表");
|
|
|
+ MultipartFile multipartFile = ExcelUtils.downLoadExcel(workbook, fileName);
|
|
|
+ uploadOrderFile(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 DishExport getDishExport(Dish dish){
|
|
|
+ MapperFactory factory = new DefaultMapperFactory.Builder().build();
|
|
|
+ factory.classMap(Dish.class, DishExport.class)
|
|
|
+ .exclude("type")
|
|
|
+ .exclude("account")
|
|
|
+ .exclude("part")
|
|
|
+ .byDefault().register();
|
|
|
+ MapperFacade mapper = factory.getMapperFacade();
|
|
|
+ DishExport dishExport = mapper.map(dish, DishExport.class);
|
|
|
+ if (dish.getType() == 1){
|
|
|
+ dishExport.setType("消费");
|
|
|
+ }else{
|
|
|
+ dishExport.setType("消费撤单");
|
|
|
+ }
|
|
|
+ if (dish.getAccount() == 0){
|
|
|
+ dishExport.setAccount("主账户");
|
|
|
+ }else {
|
|
|
+ dishExport.setAccount("补贴账户");
|
|
|
+ }
|
|
|
+ if (dish.getPart() == 1){
|
|
|
+ dishExport.setPart("早餐");
|
|
|
+ }else if (dish.getPart() == 2){
|
|
|
+ dishExport.setPart("午餐");
|
|
|
+ }else if (dish.getPart() == 3){
|
|
|
+ dishExport.setPart("晚餐");
|
|
|
+ }else if (dish.getPart() == 4){
|
|
|
+ dishExport.setPart("夜宵");
|
|
|
+ }
|
|
|
+ return dishExport;
|
|
|
+ }
|
|
|
+
|
|
|
+ public void uploadOrderFile(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);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
}
|