|
@@ -1,33 +1,44 @@
|
|
|
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.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.common.utils.StringUtils;
|
|
|
import com.usky.dxtop.common.utils.file.ImageUtils;
|
|
|
import com.usky.dxtop.common.utils.sign.Base64;
|
|
|
import com.usky.dxtop.mapper.StaffMapper;
|
|
|
-import com.usky.dxtop.model.MsgLog;
|
|
|
-import com.usky.dxtop.model.Staff;
|
|
|
+import com.usky.dxtop.model.*;
|
|
|
+import com.usky.dxtop.service.ISysAsyncTaskService;
|
|
|
import com.usky.dxtop.service.MsgLogService;
|
|
|
import com.usky.dxtop.service.StaffService;
|
|
|
+import com.usky.dxtop.service.SysFileService;
|
|
|
import com.usky.dxtop.service.config.rabbitmq.RabbitmqUtils;
|
|
|
import com.usky.dxtop.service.constant.MsgLogBusinessCode;
|
|
|
+import com.usky.dxtop.service.emun.AsyncResultType;
|
|
|
import com.usky.dxtop.service.emun.RabbitmqBeenCode;
|
|
|
-import com.usky.dxtop.service.vo.StaffRequest;
|
|
|
+import com.usky.dxtop.service.vo.*;
|
|
|
+import org.apache.poi.ss.usermodel.Workbook;
|
|
|
import org.springframework.amqp.rabbit.connection.CorrelationData;
|
|
|
+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.math.BigDecimal;
|
|
|
-import java.util.HashMap;
|
|
|
-import java.util.List;
|
|
|
-import java.util.Map;
|
|
|
-import java.util.Optional;
|
|
|
+import java.util.*;
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
|
* <p>
|
|
@@ -44,6 +55,12 @@ public class StaffServiceImpl extends ServiceImpl<StaffMapper, Staff> implements
|
|
|
private MsgLogService msgLogService;
|
|
|
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private ISysAsyncTaskService sysAsyncTaskService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private SysFileService sysFileService;
|
|
|
+
|
|
|
@Override
|
|
|
public CommonPage<Staff> page(StaffRequest staffRequest) {
|
|
|
IPage<Staff> page = new Page<>(staffRequest.getCurrent(), staffRequest.getSize());
|
|
@@ -157,4 +174,85 @@ public class StaffServiceImpl extends ServiceImpl<StaffMapper, Staff> implements
|
|
|
public List<Staff> selectStaffByPhoneList(List<String> phoneList) {
|
|
|
return baseMapper.selectListByPhones(phoneList);
|
|
|
}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public CommonPage<ChargeAndDishVO> collectByMonth(ChargeRequest chargeRequest) {
|
|
|
+ IPage<ChargeAndDishVO> page = new Page<>(chargeRequest.getCurrent(), chargeRequest.getSize());
|
|
|
+ page = baseMapper.selectCollectByMonth(page,chargeRequest);
|
|
|
+ return new CommonPage<>(page.getRecords(),page.getTotal(),page.getCurrent(),page.getSize());
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public String exportChargeAndDish(ChargeRequest chargeRequest) {
|
|
|
+ LoginUser loginUser = SecurityUtils.getLoginUser();
|
|
|
+ SysUser user = loginUser.getUser();
|
|
|
+ Long taskId = sysAsyncTaskService.getId(user.getUserName(), "充值消费统计");
|
|
|
+ if (null == taskId) {
|
|
|
+ throw new CustomException("获取次数太多了请稍后获取");
|
|
|
+ }
|
|
|
+ ((StaffServiceImpl) AopContext.currentProxy()).syncChargeAndDish(taskId,chargeRequest);
|
|
|
+ return String.valueOf(taskId);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ @Async
|
|
|
+ public void syncChargeAndDish(Long taskId, ChargeRequest chargeRequest){
|
|
|
+ Workbook workbook = null;
|
|
|
+ try {
|
|
|
+ ExportParams params = new ExportParams(null, "充值消费统计");
|
|
|
+ workbook = ExcelExportUtil.exportBigExcel(params, ChargeAndDishVO.class,
|
|
|
+ (o, i) -> {
|
|
|
+ chargeRequest.setCurrent(i);
|
|
|
+ chargeRequest.setSize(30);
|
|
|
+ CommonPage<ChargeAndDishVO> page = this.collectByMonth(chargeRequest);
|
|
|
+ return Collections.singletonList(page.getRecords());
|
|
|
+ },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 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);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|