rev: 修改
This commit is contained in:
@@ -236,17 +236,17 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.apache.poi</groupId>
|
<groupId>org.apache.poi</groupId>
|
||||||
<artifactId>poi-ooxml-schemas</artifactId>
|
<artifactId>poi-ooxml-schemas</artifactId>
|
||||||
<version>3.17</version>
|
<version>4.0.0</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.apache.poi</groupId>
|
<groupId>org.apache.poi</groupId>
|
||||||
<artifactId>poi</artifactId>
|
<artifactId>poi</artifactId>
|
||||||
<version>3.17</version>
|
<version>4.0.0</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.apache.poi</groupId>
|
<groupId>org.apache.poi</groupId>
|
||||||
<artifactId>poi-ooxml</artifactId>
|
<artifactId>poi-ooxml</artifactId>
|
||||||
<version>3.17</version>
|
<version>4.0.0</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>xerces</groupId>
|
<groupId>xerces</groupId>
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/*
|
package org.nl.common.utils;/*
|
||||||
* Copyright 2019-2020 Zheng Jie
|
* Copyright 2019-2020 Zheng Jie
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
@@ -13,18 +13,20 @@
|
|||||||
* See the License for the specific language governing permissions and
|
* See the License for the specific language governing permissions and
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
package org.nl.common.utils;
|
|
||||||
|
|
||||||
import cn.hutool.core.io.IoUtil;
|
import cn.hutool.core.io.IoUtil;
|
||||||
import cn.hutool.core.util.IdUtil;
|
import cn.hutool.core.util.IdUtil;
|
||||||
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
import cn.hutool.poi.excel.BigExcelWriter;
|
import cn.hutool.poi.excel.BigExcelWriter;
|
||||||
import cn.hutool.poi.excel.ExcelUtil;
|
import cn.hutool.poi.excel.ExcelUtil;
|
||||||
|
import com.google.common.collect.Lists;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.apache.poi.ss.usermodel.*;
|
||||||
import org.apache.poi.util.IOUtils;
|
import org.apache.poi.util.IOUtils;
|
||||||
import org.apache.poi.xssf.streaming.SXSSFSheet;
|
import org.apache.poi.xssf.streaming.SXSSFSheet;
|
||||||
|
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
|
||||||
import org.nl.common.exception.BadRequestException;
|
import org.nl.common.exception.BadRequestException;
|
||||||
import org.nl.config.language.LangProcess;
|
import org.springframework.util.CollectionUtils;
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
import javax.servlet.ServletOutputStream;
|
import javax.servlet.ServletOutputStream;
|
||||||
@@ -34,6 +36,7 @@ import java.io.*;
|
|||||||
import java.security.MessageDigest;
|
import java.security.MessageDigest;
|
||||||
import java.text.DecimalFormat;
|
import java.text.DecimalFormat;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@@ -44,9 +47,10 @@ import java.util.Map;
|
|||||||
* @author Zheng Jie
|
* @author Zheng Jie
|
||||||
* @date 2018-12-27
|
* @date 2018-12-27
|
||||||
*/
|
*/
|
||||||
|
@Slf4j
|
||||||
public class FileUtil extends cn.hutool.core.io.FileUtil {
|
public class FileUtil extends cn.hutool.core.io.FileUtil {
|
||||||
|
|
||||||
private static final Logger log = LoggerFactory.getLogger(FileUtil.class);
|
private Integer batchWriteExcelRowAmount = 500;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 系统临时目录
|
* 系统临时目录
|
||||||
@@ -205,12 +209,15 @@ public class FileUtil extends cn.hutool.core.io.FileUtil {
|
|||||||
* 导出excel
|
* 导出excel
|
||||||
*/
|
*/
|
||||||
public static void downloadExcel(List<Map<String, Object>> list, HttpServletResponse response) throws IOException {
|
public static void downloadExcel(List<Map<String, Object>> list, HttpServletResponse response) throws IOException {
|
||||||
|
ServletOutputStream out = null;
|
||||||
|
BigExcelWriter writer;
|
||||||
|
try {
|
||||||
String tempPath = SYS_TEM_DIR + IdUtil.fastSimpleUUID() + ".xlsx";
|
String tempPath = SYS_TEM_DIR + IdUtil.fastSimpleUUID() + ".xlsx";
|
||||||
File file = new File(tempPath);
|
File file = new File(tempPath);
|
||||||
BigExcelWriter writer = ExcelUtil.getBigWriter(file);
|
writer = ExcelUtil.getBigWriter(file);
|
||||||
// 一次性写出内容,使用默认样式,强制输出标题
|
// 一次性写出内容,使用默认样式,强制输出标题
|
||||||
writer.write(list, true);
|
writer.write(list, true);
|
||||||
SXSSFSheet sheet = (SXSSFSheet)writer.getSheet();
|
SXSSFSheet sheet = (SXSSFSheet) writer.getSheet();
|
||||||
//上面需要强转SXSSFSheet 不然没有trackAllColumnsForAutoSizing方法
|
//上面需要强转SXSSFSheet 不然没有trackAllColumnsForAutoSizing方法
|
||||||
sheet.trackAllColumnsForAutoSizing();
|
sheet.trackAllColumnsForAutoSizing();
|
||||||
//列宽自适应
|
//列宽自适应
|
||||||
@@ -219,13 +226,100 @@ public class FileUtil extends cn.hutool.core.io.FileUtil {
|
|||||||
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8");
|
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8");
|
||||||
//test.xls是弹出下载对话框的文件名,不能为中文,中文请自行编码
|
//test.xls是弹出下载对话框的文件名,不能为中文,中文请自行编码
|
||||||
response.setHeader("Content-Disposition", "attachment;filename=file.xlsx");
|
response.setHeader("Content-Disposition", "attachment;filename=file.xlsx");
|
||||||
ServletOutputStream out = response.getOutputStream();
|
out = response.getOutputStream();
|
||||||
// 终止后删除临时文件
|
// 终止后删除临时文件
|
||||||
file.deleteOnExit();
|
file.deleteOnExit();
|
||||||
writer.flush(out, true);
|
writer.flush(out, true);
|
||||||
|
} finally {
|
||||||
//此处记得关闭输出Servlet流
|
//此处记得关闭输出Servlet流
|
||||||
|
if (ObjectUtil.isNotEmpty(out)) {
|
||||||
IoUtil.close(out);
|
IoUtil.close(out);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 流导出:后续改成导出文件
|
||||||
|
* @param list
|
||||||
|
* @param response
|
||||||
|
* @throws IOException
|
||||||
|
*/
|
||||||
|
public void downloadExcelIO(List<Map<String,String>> list, String[] columnExcelNameArr, HttpServletResponse response) {
|
||||||
|
List<Map<String,String>> lastRestDataList = list;
|
||||||
|
List<List<Map<String,String>>> dataPiece = Lists.partition(list, 5000);
|
||||||
|
int blockNum = 0;
|
||||||
|
int blockNumMax = dataPiece.size();
|
||||||
|
List<String> allFileLocations = new ArrayList<>();
|
||||||
|
ServletOutputStream out = null;
|
||||||
|
try {
|
||||||
|
boolean allFinish = false;
|
||||||
|
while (!allFinish) {
|
||||||
|
int thisFileRowNumber = 1;
|
||||||
|
SXSSFWorkbook wb = null;
|
||||||
|
try {
|
||||||
|
// if (blockNum<blockNumMax){
|
||||||
|
// lastRestDataList = dataPiece.get(blockNum);
|
||||||
|
// blockNum++;
|
||||||
|
// }
|
||||||
|
// if (blockNum==blockNumMax){
|
||||||
|
// allFinish = true;
|
||||||
|
// }
|
||||||
|
wb = new SXSSFWorkbook(this.batchWriteExcelRowAmount);// 流式写入EXCEL,只保留少数行(比如50行)数据在内存,防止内存溢出
|
||||||
|
Sheet sh = wb.createSheet();
|
||||||
|
Row titleRow = sh.createRow(0);
|
||||||
|
for (int cellNum = 0; cellNum < columnExcelNameArr.length; cellNum++) {
|
||||||
|
Cell cell = titleRow.createCell(cellNum);
|
||||||
|
cell.setCellValue(columnExcelNameArr[cellNum]);
|
||||||
|
}
|
||||||
|
if (!CollectionUtils.isEmpty(lastRestDataList)) {
|
||||||
|
for (int i = 0; i < lastRestDataList.size(); i++) {
|
||||||
|
Row dataRow = sh.createRow(thisFileRowNumber);
|
||||||
|
Map<String, String> columnMap = lastRestDataList.get(i);
|
||||||
|
for (int cellNum = 0; cellNum < columnExcelNameArr.length; cellNum++) {
|
||||||
|
Cell cell = dataRow.createCell(cellNum);
|
||||||
|
String valueStr = columnMap.get(columnExcelNameArr[cellNum]);
|
||||||
|
cell.setCellValue(valueStr);
|
||||||
|
}
|
||||||
|
thisFileRowNumber++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
String localFilePath = SYS_TEM_DIR + IdUtil.fastSimpleUUID()+ blockNum + ".xlsx";
|
||||||
|
allFileLocations.add(localFilePath);
|
||||||
|
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8");
|
||||||
|
response.setHeader("Content-Disposition", "attachment;filename="+localFilePath);
|
||||||
|
out = response.getOutputStream();
|
||||||
|
wb.write(out);
|
||||||
|
// 必须清理流式写入Excel生成的临时文件
|
||||||
|
wb.dispose();
|
||||||
|
allFinish = true;
|
||||||
|
}catch (Exception ex){
|
||||||
|
log.warn(ex.getMessage());
|
||||||
|
throw new BadRequestException(ex.getMessage());
|
||||||
|
} finally {
|
||||||
|
if (out != null) {
|
||||||
|
try {
|
||||||
|
out.flush();
|
||||||
|
out.close();
|
||||||
|
} catch (IOException e) {log.warn(e.getMessage());}
|
||||||
|
}
|
||||||
|
if (wb != null) {
|
||||||
|
try {
|
||||||
|
wb.dispose();
|
||||||
|
} catch (Exception e) {log.warn(e.getMessage());}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}finally {
|
||||||
|
if (out != null) {
|
||||||
|
try {
|
||||||
|
out.flush();
|
||||||
|
out.close();
|
||||||
|
} catch (IOException e) {log.warn(e.getMessage());}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static String getFileType(String type) {
|
public static String getFileType(String type) {
|
||||||
String documents = "txt doc pdf ppt pps xlsx xls docx";
|
String documents = "txt doc pdf ppt pps xlsx xls docx";
|
||||||
@@ -249,7 +343,7 @@ public class FileUtil extends cn.hutool.core.io.FileUtil {
|
|||||||
// 1M
|
// 1M
|
||||||
int len = 1024 * 1024;
|
int len = 1024 * 1024;
|
||||||
if (size > (maxSize * len)) {
|
if (size > (maxSize * len)) {
|
||||||
throw new BadRequestException(LangProcess.msg("error_File_1"));
|
throw new BadRequestException("文件超出规定大小!");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -343,5 +437,6 @@ public class FileUtil extends cn.hutool.core.io.FileUtil {
|
|||||||
public static String getMd5(File file) {
|
public static String getMd5(File file) {
|
||||||
return getMd5(getByte(file));
|
return getMd5(getByte(file));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -13,6 +13,8 @@ import org.springframework.http.HttpStatus;
|
|||||||
import org.springframework.http.ResponseEntity;
|
import org.springframework.http.ResponseEntity;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
import java.io.IOException;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -67,5 +69,11 @@ public class SysLogController {
|
|||||||
logService.delAllByInfo();
|
logService.delAllByInfo();
|
||||||
return new ResponseEntity<>(HttpStatus.OK);
|
return new ResponseEntity<>(HttpStatus.OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Log("导出数据")
|
||||||
|
@GetMapping(value = "/download")
|
||||||
|
public void download(@RequestParam Map map, HttpServletResponse response, String[] product_area) throws IOException {
|
||||||
|
logService.download(map, response, product_area);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,8 @@ import org.nl.common.domain.query.PageQuery;
|
|||||||
import org.nl.system.service.logging.dao.SysLog;
|
import org.nl.system.service.logging.dao.SysLog;
|
||||||
import org.springframework.scheduling.annotation.Async;
|
import org.springframework.scheduling.annotation.Async;
|
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
import java.io.IOException;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -54,4 +56,6 @@ public interface ISysLogService extends IService<SysLog> {
|
|||||||
*/
|
*/
|
||||||
@Async
|
@Async
|
||||||
void save(String username, String browser, String ip, ProceedingJoinPoint joinPoint, SysLog log);
|
void save(String username, String browser, String ip, ProceedingJoinPoint joinPoint, SysLog log);
|
||||||
|
|
||||||
|
void download(Map map, HttpServletResponse response, String[] product_area) throws IOException;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,6 +15,8 @@ import org.aspectj.lang.ProceedingJoinPoint;
|
|||||||
import org.aspectj.lang.reflect.MethodSignature;
|
import org.aspectj.lang.reflect.MethodSignature;
|
||||||
import org.nl.common.domain.query.PageQuery;
|
import org.nl.common.domain.query.PageQuery;
|
||||||
import org.nl.common.logging.annotation.Log;
|
import org.nl.common.logging.annotation.Log;
|
||||||
|
import org.nl.common.utils.FileUtil;
|
||||||
|
import org.nl.common.utils.SecurityUtils;
|
||||||
import org.nl.common.utils.StringUtils;
|
import org.nl.common.utils.StringUtils;
|
||||||
import org.nl.common.utils.ValidationUtil;
|
import org.nl.common.utils.ValidationUtil;
|
||||||
import org.nl.system.service.logging.ISysLogService;
|
import org.nl.system.service.logging.ISysLogService;
|
||||||
@@ -25,12 +27,11 @@ import org.springframework.stereotype.Service;
|
|||||||
import org.springframework.web.bind.annotation.RequestBody;
|
import org.springframework.web.bind.annotation.RequestBody;
|
||||||
import org.springframework.web.bind.annotation.RequestParam;
|
import org.springframework.web.bind.annotation.RequestParam;
|
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
import java.io.IOException;
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
import java.lang.reflect.Parameter;
|
import java.lang.reflect.Parameter;
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>
|
* <p>
|
||||||
@@ -112,6 +113,38 @@ public class SysLogServiceImpl extends ServiceImpl<SysLogMapper, SysLog> impleme
|
|||||||
logDto.setCreate_time(DateUtil.now());
|
logDto.setCreate_time(DateUtil.now());
|
||||||
logMapper.insert(logDto);
|
logMapper.insert(logDto);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void download(Map map, HttpServletResponse response, String[] product_area) throws IOException {
|
||||||
|
String blurry = ObjectUtil.isNotEmpty(map.get("blurry"))?map.get("blurry").toString():null;
|
||||||
|
String log_type = ObjectUtil.isNotEmpty(map.get("log_type"))?map.get("log_type").toString():null;
|
||||||
|
String username = ObjectUtil.isNotEmpty(map.get("username"))?map.get("username").toString():null;
|
||||||
|
String begin_time = ObjectUtil.isNotEmpty(map.get("begin_time"))?map.get("begin_time").toString():null;
|
||||||
|
String end_time = ObjectUtil.isNotEmpty(map.get("end_time"))?map.get("end_time").toString():null;
|
||||||
|
LambdaQueryWrapper<SysLog> lam = new LambdaQueryWrapper<>();
|
||||||
|
lam.eq(ObjectUtil.isNotEmpty(log_type), SysLog::getLog_type, log_type)
|
||||||
|
.eq(ObjectUtil.isNotEmpty(username), SysLog::getUsername, username)
|
||||||
|
.like(ObjectUtil.isNotEmpty(blurry), SysLog::getDescription, blurry)
|
||||||
|
.le(ObjectUtil.isNotEmpty(end_time), SysLog::getCreate_time, end_time)
|
||||||
|
.ge(ObjectUtil.isNotEmpty(begin_time), SysLog::getCreate_time, begin_time)
|
||||||
|
.orderByDesc(SysLog::getCreate_time);
|
||||||
|
List<SysLog> dataList = this.list(lam);
|
||||||
|
List<Map<String, Object>> list = new ArrayList<>();
|
||||||
|
for (int i = 0; i < dataList.size(); i++) {
|
||||||
|
SysLog sysLog = dataList.get(i);
|
||||||
|
Map<String, Object> mp = new LinkedHashMap<>();
|
||||||
|
mp.put("用户名", SecurityUtils.getCurrentNickName());
|
||||||
|
mp.put("IP", sysLog.getRequest_ip());
|
||||||
|
mp.put("IP来源", sysLog.getAddress());
|
||||||
|
mp.put("描述", sysLog.getDescription());
|
||||||
|
mp.put("浏览器", sysLog.getBrowser());
|
||||||
|
mp.put("请求耗时", sysLog.getTime() + "ms");
|
||||||
|
mp.put("创建日期", sysLog.getCreate_time());
|
||||||
|
list.add(mp);
|
||||||
|
}
|
||||||
|
FileUtil.downloadExcel(list, response);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 根据方法和传入的参数获取请求参数
|
* 根据方法和传入的参数获取请求参数
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -14,6 +14,8 @@ import org.springframework.http.ResponseEntity;
|
|||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
import java.io.IOException;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
@@ -71,4 +73,10 @@ public class SchBaseTaskController {
|
|||||||
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
|
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Log("导出数据")
|
||||||
|
@GetMapping(value = "/download")
|
||||||
|
public void download(@RequestParam Map map, HttpServletResponse response, String[] product_area) throws IOException {
|
||||||
|
schBaseTaskService.download(map, response, product_area);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -150,6 +150,14 @@ public interface ISchBasePointService extends IService<SchBasePoint> {
|
|||||||
*/
|
*/
|
||||||
List<SchBasePoint> getNoTaskPointByRegionAndType(String region, String type, String pointStatus);
|
List<SchBasePoint> getNoTaskPointByRegionAndType(String region, String type, String pointStatus);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取可用点位(成品-需要按照入库顺序排序)
|
||||||
|
* @param region
|
||||||
|
* @param type
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<SchBasePoint> getNoTaskPointByRegionAndTypeCp(String region, String type, String pointStatus);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取可以直接上料的缠绕机
|
* 获取可以直接上料的缠绕机
|
||||||
* @return
|
* @return
|
||||||
|
|||||||
@@ -8,6 +8,8 @@ import org.nl.common.domain.query.PageQuery;
|
|||||||
import org.nl.wms.sch_manage.service.dao.SchBaseTask;
|
import org.nl.wms.sch_manage.service.dao.SchBaseTask;
|
||||||
import org.nl.wms.sch_manage.service.dto.SchBaseTaskQuery;
|
import org.nl.wms.sch_manage.service.dto.SchBaseTaskQuery;
|
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
import java.io.IOException;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
@@ -81,4 +83,6 @@ public interface ISchBaseTaskService extends IService<SchBaseTask> {
|
|||||||
List<SchBaseTask> getTaskByQuery(LambdaQueryWrapper<SchBaseTask> lam);
|
List<SchBaseTask> getTaskByQuery(LambdaQueryWrapper<SchBaseTask> lam);
|
||||||
|
|
||||||
Integer haveTaskAll(String deviceCode);
|
Integer haveTaskAll(String deviceCode);
|
||||||
|
|
||||||
|
void download(Map map, HttpServletResponse response, String[] product_area) throws IOException;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -81,5 +81,7 @@ public interface SchBasePointMapper extends BaseMapper<SchBasePoint> {
|
|||||||
|
|
||||||
List<SchBasePoint> getNoTaskPointByRegionAndType(String region, String type, String pointStatus);
|
List<SchBasePoint> getNoTaskPointByRegionAndType(String region, String type, String pointStatus);
|
||||||
|
|
||||||
|
List<SchBasePoint> getNoTaskPointByRegionAndTypeCp(String region, String type, String pointStatus);
|
||||||
|
|
||||||
List<SchBasePoint> getCRUsedDevice();
|
List<SchBasePoint> getCRUsedDevice();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -185,6 +185,21 @@
|
|||||||
t.point_code2 = p.point_code OR t.point_code3 = p.point_code OR t.point_code4 = p.point_code)
|
t.point_code2 = p.point_code OR t.point_code3 = p.point_code OR t.point_code4 = p.point_code)
|
||||||
AND '5' > t.task_status)
|
AND '5' > t.task_status)
|
||||||
</select>
|
</select>
|
||||||
|
<select id="getNoTaskPointByRegionAndTypeCp" resultType="org.nl.wms.sch_manage.service.dao.SchBasePoint">
|
||||||
|
SELECT *
|
||||||
|
FROM sch_base_point p
|
||||||
|
WHERE p.region_code = #{region}
|
||||||
|
AND p.point_type = #{type}
|
||||||
|
AND p.point_status = #{pointStatus}
|
||||||
|
AND p.is_used = TRUE
|
||||||
|
AND 0 = (SELECT COUNT(*)
|
||||||
|
FROM sch_base_task t
|
||||||
|
WHERE t.is_delete = '0'
|
||||||
|
AND (t.point_code1 = p.point_code OR
|
||||||
|
t.point_code2 = p.point_code OR t.point_code3 = p.point_code OR t.point_code4 = p.point_code)
|
||||||
|
AND '5' > t.task_status)
|
||||||
|
order by p.in_order_seq
|
||||||
|
</select>
|
||||||
<select id="getCRUsedDevice" resultType="org.nl.wms.sch_manage.service.dao.SchBasePoint">
|
<select id="getCRUsedDevice" resultType="org.nl.wms.sch_manage.service.dao.SchBasePoint">
|
||||||
SELECT p.*
|
SELECT p.*
|
||||||
FROM sch_base_point p
|
FROM sch_base_point p
|
||||||
|
|||||||
@@ -26,8 +26,11 @@ public interface SchBaseTaskMapper extends BaseMapper<SchBaseTask> {
|
|||||||
|
|
||||||
IPage<SchBaseTask> selectPageLeftJoin(IPage<SchBaseTask> pages, SchBaseTaskQuery whereJson, List<String> collect);
|
IPage<SchBaseTask> selectPageLeftJoin(IPage<SchBaseTask> pages, SchBaseTaskQuery whereJson, List<String> collect);
|
||||||
|
|
||||||
|
List<SchBaseTask> downloadTask(Map whereJson, List<String> collect);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 手持查询任务
|
* 手持查询任务
|
||||||
|
*
|
||||||
* @param whereJson {
|
* @param whereJson {
|
||||||
* search: 载具号、起点、终点、任务号
|
* search: 载具号、起点、终点、任务号
|
||||||
* }
|
* }
|
||||||
@@ -36,6 +39,7 @@ public interface SchBaseTaskMapper extends BaseMapper<SchBaseTask> {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 手持查询历史记录
|
* 手持查询历史记录
|
||||||
|
*
|
||||||
* @param whereJson {
|
* @param whereJson {
|
||||||
* search: 载具号、起点、终点、任务号
|
* search: 载具号、起点、终点、任务号
|
||||||
* start_time: 开始时间
|
* start_time: 开始时间
|
||||||
@@ -46,6 +50,7 @@ public interface SchBaseTaskMapper extends BaseMapper<SchBaseTask> {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取载具任务
|
* 获取载具任务
|
||||||
|
*
|
||||||
* @param page
|
* @param page
|
||||||
* @param whereJson {
|
* @param whereJson {
|
||||||
* storagevehicle_code
|
* storagevehicle_code
|
||||||
@@ -56,6 +61,7 @@ public interface SchBaseTaskMapper extends BaseMapper<SchBaseTask> {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取点对点送货任务
|
* 获取点对点送货任务
|
||||||
|
*
|
||||||
* @param page
|
* @param page
|
||||||
* @param whereJson {
|
* @param whereJson {
|
||||||
* storagevehicle_code
|
* storagevehicle_code
|
||||||
|
|||||||
@@ -75,6 +75,48 @@
|
|||||||
</where>
|
</where>
|
||||||
ORDER BY t.create_time DESC
|
ORDER BY t.create_time DESC
|
||||||
</select>
|
</select>
|
||||||
|
<select id="downloadTask" resultType="org.nl.wms.sch_manage.service.dao.SchBaseTask">
|
||||||
|
SELECT
|
||||||
|
t.*,
|
||||||
|
tc.config_name,
|
||||||
|
tc.task_name,
|
||||||
|
mb.material_name
|
||||||
|
FROM
|
||||||
|
`sch_base_task` t
|
||||||
|
LEFT JOIN sch_base_taskconfig tc ON tc.config_code = t.config_code
|
||||||
|
LEFT JOIN md_me_materialbase mb ON mb.material_id = t.material_id
|
||||||
|
<where>
|
||||||
|
<if test="whereJson.task_code != null">
|
||||||
|
AND t.task_code = #{whereJson.task_code}
|
||||||
|
</if>
|
||||||
|
<if test="whereJson.config_code != null">
|
||||||
|
AND t.config_code = #{whereJson.config_code}
|
||||||
|
</if>
|
||||||
|
<if test="whereJson.point_code != null">
|
||||||
|
AND (t.point_code1 LIKE '%${whereJson.point_code}%'
|
||||||
|
OR t.point_code2 LIKE '%${whereJson.point_code}%')
|
||||||
|
</if>
|
||||||
|
<if test="whereJson.unFinished != null">
|
||||||
|
AND t.task_status <![CDATA[<=]]> #{whereJson.unFinished}
|
||||||
|
</if>
|
||||||
|
<if test="whereJson.vehicle_code != null">
|
||||||
|
AND t.vehicle_code = #{whereJson.vehicle_code}
|
||||||
|
</if>
|
||||||
|
<if test="whereJson.end_time != null">
|
||||||
|
AND t.create_time <![CDATA[<=]]> #{whereJson.end_time}
|
||||||
|
</if>
|
||||||
|
<if test="whereJson.begin_time != null">
|
||||||
|
AND t.create_time <![CDATA[>=]]> #{whereJson.begin_time}
|
||||||
|
</if>
|
||||||
|
<if test="collect != null and collect != ''">
|
||||||
|
AND t.task_status IN
|
||||||
|
<foreach collection="collect" item="code" separator="," open="(" close=")">
|
||||||
|
#{code}
|
||||||
|
</foreach>
|
||||||
|
</if>
|
||||||
|
</where>
|
||||||
|
ORDER BY t.create_time DESC
|
||||||
|
</select>
|
||||||
|
|
||||||
<select id="queryPdaTask" resultType="com.alibaba.fastjson.JSONObject">
|
<select id="queryPdaTask" resultType="com.alibaba.fastjson.JSONObject">
|
||||||
SELECT
|
SELECT
|
||||||
|
|||||||
@@ -339,6 +339,11 @@ public class SchBasePointServiceImpl extends ServiceImpl<SchBasePointMapper, Sch
|
|||||||
return this.baseMapper.getNoTaskPointByRegionAndType(region, type, pointStatus);
|
return this.baseMapper.getNoTaskPointByRegionAndType(region, type, pointStatus);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<SchBasePoint> getNoTaskPointByRegionAndTypeCp(String region, String type, String pointStatus) {
|
||||||
|
return this.baseMapper.getNoTaskPointByRegionAndTypeCp(region, type, pointStatus);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<SchBasePoint> getCRUsedDevice() {
|
public List<SchBasePoint> getCRUsedDevice() {
|
||||||
return this.baseMapper.getCRUsedDevice();
|
return this.baseMapper.getCRUsedDevice();
|
||||||
|
|||||||
@@ -14,7 +14,9 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.nl.common.domain.query.PageQuery;
|
import org.nl.common.domain.query.PageQuery;
|
||||||
import org.nl.common.exception.BadRequestException;
|
import org.nl.common.exception.BadRequestException;
|
||||||
|
import org.nl.common.utils.FileUtil;
|
||||||
import org.nl.common.utils.SecurityUtils;
|
import org.nl.common.utils.SecurityUtils;
|
||||||
|
import org.nl.system.service.logging.dao.SysLog;
|
||||||
import org.nl.wms.basedata_manage.enums.BaseDataEnum;
|
import org.nl.wms.basedata_manage.enums.BaseDataEnum;
|
||||||
import org.nl.wms.sch_manage.enums.TaskStatus;
|
import org.nl.wms.sch_manage.enums.TaskStatus;
|
||||||
import org.nl.wms.sch_manage.service.ISchBaseTaskService;
|
import org.nl.wms.sch_manage.service.ISchBaseTaskService;
|
||||||
@@ -27,10 +29,9 @@ import org.springframework.beans.factory.annotation.Autowired;
|
|||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
import java.util.List;
|
import java.io.IOException;
|
||||||
import java.util.Map;
|
import java.util.*;
|
||||||
import java.util.Set;
|
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@@ -190,4 +191,33 @@ public class SchBaseTaskServiceImpl extends ServiceImpl<SchBaseTaskMapper, SchBa
|
|||||||
return this.count(lam);
|
return this.count(lam);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void download(Map map, HttpServletResponse response, String[] product_area) throws IOException {
|
||||||
|
List<String> collect = ObjectUtil.isNotEmpty(map.get("more_task_status"))
|
||||||
|
? Arrays.stream(map.get("more_task_status").toString().split(",")).collect(Collectors.toList()) : null;
|
||||||
|
if (collect != null) {
|
||||||
|
if (collect.contains(TaskStatus.UNFINISHED.getCode())) {
|
||||||
|
collect = null;
|
||||||
|
map.put("unFinished",TaskStatus.EXECUTING.getCode());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
List<SchBaseTask> dataList = schBaseTaskMapper.downloadTask(map, collect);
|
||||||
|
List<Map<String, Object>> list = new ArrayList<>();
|
||||||
|
for (int i = 0; i < dataList.size(); i++) {
|
||||||
|
SchBaseTask schBaseTask = dataList.get(i);
|
||||||
|
Map<String, Object> mp = new LinkedHashMap<>();
|
||||||
|
mp.put("任务编码", schBaseTask.getTask_code());
|
||||||
|
mp.put("载具编码", schBaseTask.getVehicle_code());
|
||||||
|
mp.put("任务状态", schBaseTask.getRemark());
|
||||||
|
mp.put("配置编码", schBaseTask.getConfig_code());
|
||||||
|
mp.put("配置名称", schBaseTask.getConfig_name());
|
||||||
|
mp.put("起点", schBaseTask.getPoint_code1());
|
||||||
|
mp.put("终点", schBaseTask.getPoint_code2());
|
||||||
|
mp.put("创建人", schBaseTask.getCreate_name());
|
||||||
|
mp.put("创建时间", schBaseTask.getCreate_time());
|
||||||
|
list.add(mp);
|
||||||
|
}
|
||||||
|
FileUtil.downloadExcel(list, response);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ public class WrappingDownTask extends AbstractTask {
|
|||||||
@Override
|
@Override
|
||||||
public String create(JSONObject json) {
|
public String create(JSONObject json) {
|
||||||
// 查找空闲的成品区
|
// 查找空闲的成品区
|
||||||
List<SchBasePoint> list = pointService.getNoTaskPointByRegionAndType("CPQ01", "1", "1");
|
List<SchBasePoint> list = pointService.getNoTaskPointByRegionAndTypeCp("CPQ01", "1", "1");
|
||||||
if (list.size() == 0) {
|
if (list.size() == 0) {
|
||||||
throw new BadRequestException("成品区没有空闲点位!");
|
throw new BadRequestException("成品区没有空闲点位!");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,17 @@
|
|||||||
<div class="head-container">
|
<div class="head-container">
|
||||||
<Search />
|
<Search />
|
||||||
<crudOperation>
|
<crudOperation>
|
||||||
|
<el-button
|
||||||
|
slot="right"
|
||||||
|
class="filter-item"
|
||||||
|
type="success"
|
||||||
|
icon="el-icon-thumb"
|
||||||
|
size="mini"
|
||||||
|
:loading="showDtlLoading"
|
||||||
|
@click="down"
|
||||||
|
>
|
||||||
|
导出
|
||||||
|
</el-button>
|
||||||
</crudOperation>
|
</crudOperation>
|
||||||
</div>
|
</div>
|
||||||
<!--表格渲染-->
|
<!--表格渲染-->
|
||||||
@@ -49,6 +60,8 @@ import Search from './search'
|
|||||||
import CRUD, { presenter } from '@crud/crud'
|
import CRUD, { presenter } from '@crud/crud'
|
||||||
import crudOperation from '@crud/CRUD.operation'
|
import crudOperation from '@crud/CRUD.operation'
|
||||||
import pagination from '@crud/Pagination'
|
import pagination from '@crud/Pagination'
|
||||||
|
import { download } from '@/api/data'
|
||||||
|
import { downloadFile } from '@/utils'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'ErrorLog',
|
name: 'ErrorLog',
|
||||||
@@ -59,6 +72,7 @@ export default {
|
|||||||
mixins: [presenter()],
|
mixins: [presenter()],
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
|
showDtlLoading: false,
|
||||||
errorInfo: '', dialog: false
|
errorInfo: '', dialog: false
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -96,6 +110,23 @@ export default {
|
|||||||
})
|
})
|
||||||
}).catch(() => {
|
}).catch(() => {
|
||||||
})
|
})
|
||||||
|
},
|
||||||
|
down() {
|
||||||
|
if (this.currentRow !== null) {
|
||||||
|
const data = this.crud.query
|
||||||
|
if (this.crud.query.createTime !== undefined) {
|
||||||
|
data.begin_time = this.crud.query.createTime[0]
|
||||||
|
data.end_time = this.crud.query.createTime[1]
|
||||||
|
}
|
||||||
|
data.log_type = 'ERROR'
|
||||||
|
this.showDtlLoading = true
|
||||||
|
download('/api/logs/download', data).then(result => {
|
||||||
|
downloadFile(result, '日志查询', 'xlsx')
|
||||||
|
this.showDtlLoading = false
|
||||||
|
}).catch(() => {
|
||||||
|
this.showDtlLoading = false
|
||||||
|
})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,17 @@
|
|||||||
<div class="head-container">
|
<div class="head-container">
|
||||||
<Search />
|
<Search />
|
||||||
<crudOperation>
|
<crudOperation>
|
||||||
|
<el-button
|
||||||
|
slot="right"
|
||||||
|
class="filter-item"
|
||||||
|
type="success"
|
||||||
|
icon="el-icon-thumb"
|
||||||
|
size="mini"
|
||||||
|
:loading="showDtlLoading"
|
||||||
|
@click="down"
|
||||||
|
>
|
||||||
|
导出
|
||||||
|
</el-button>
|
||||||
</crudOperation>
|
</crudOperation>
|
||||||
</div>
|
</div>
|
||||||
<!--表格渲染-->
|
<!--表格渲染-->
|
||||||
@@ -49,6 +60,8 @@ import CRUD, { presenter } from '@crud/crud'
|
|||||||
import crudOperation from '@crud/CRUD.operation'
|
import crudOperation from '@crud/CRUD.operation'
|
||||||
import pagination from '@crud/Pagination'
|
import pagination from '@crud/Pagination'
|
||||||
import i18n from '@/i18n'
|
import i18n from '@/i18n'
|
||||||
|
import { download } from '@/api/data'
|
||||||
|
import { downloadFile } from '@/utils'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'Log',
|
name: 'Log',
|
||||||
@@ -65,6 +78,11 @@ export default {
|
|||||||
download: false
|
download: false
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
showDtlLoading: false
|
||||||
|
}
|
||||||
|
},
|
||||||
methods: {
|
methods: {
|
||||||
confirmDelAll() {
|
confirmDelAll() {
|
||||||
this.$confirm(i18n.t('ErrorLog.msg.m1'), i18n.t('common.Operate'), {
|
this.$confirm(i18n.t('ErrorLog.msg.m1'), i18n.t('common.Operate'), {
|
||||||
@@ -84,6 +102,23 @@ export default {
|
|||||||
})
|
})
|
||||||
}).catch(() => {
|
}).catch(() => {
|
||||||
})
|
})
|
||||||
|
},
|
||||||
|
down() {
|
||||||
|
if (this.currentRow !== null) {
|
||||||
|
const data = this.crud.query
|
||||||
|
if (this.crud.query.createTime !== undefined) {
|
||||||
|
data.begin_time = this.crud.query.createTime[0]
|
||||||
|
data.end_time = this.crud.query.createTime[1]
|
||||||
|
}
|
||||||
|
data.log_type = 'INFO'
|
||||||
|
this.showDtlLoading = true
|
||||||
|
download('/api/logs/download', data).then(result => {
|
||||||
|
downloadFile(result, '日志查询', 'xlsx')
|
||||||
|
this.showDtlLoading = false
|
||||||
|
}).catch(() => {
|
||||||
|
this.showDtlLoading = false
|
||||||
|
})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -85,7 +85,19 @@
|
|||||||
</el-form>
|
</el-form>
|
||||||
</div>
|
</div>
|
||||||
<!--如果想在工具栏加入更多按钮,可以使用插槽方式, slot = 'left' or 'right'-->
|
<!--如果想在工具栏加入更多按钮,可以使用插槽方式, slot = 'left' or 'right'-->
|
||||||
<crudOperation :permission="permission" />
|
<crudOperation :permission="permission">
|
||||||
|
<el-button
|
||||||
|
slot="right"
|
||||||
|
class="filter-item"
|
||||||
|
type="success"
|
||||||
|
icon="el-icon-thumb"
|
||||||
|
size="mini"
|
||||||
|
:loading="showDtlLoading"
|
||||||
|
@click="down"
|
||||||
|
>
|
||||||
|
导出
|
||||||
|
</el-button>
|
||||||
|
</crudOperation>
|
||||||
<!--表单组件-->
|
<!--表单组件-->
|
||||||
<el-dialog :close-on-click-modal="false" :before-close="crud.cancelCU" :visible.sync="crud.status.cu > 0" :title="crud.status.title" width="800px">
|
<el-dialog :close-on-click-modal="false" :before-close="crud.cancelCU" :visible.sync="crud.status.cu > 0" :title="crud.status.title" width="800px">
|
||||||
<el-form ref="form" style="border: 1px solid #cfe0df;margin-top: 10px;padding-top: 10px;" :inline="true" :model="form" :rules="rules" size="mini" label-width="115px" label-suffix=":">
|
<el-form ref="form" style="border: 1px solid #cfe0df;margin-top: 10px;padding-top: 10px;" :inline="true" :model="form" :rules="rules" size="mini" label-width="115px" label-suffix=":">
|
||||||
@@ -261,6 +273,8 @@ import rrOperation from '@crud/RR.operation'
|
|||||||
import crudOperation from '@crud/CRUD.operation'
|
import crudOperation from '@crud/CRUD.operation'
|
||||||
import udOperation from '@crud/UD.operation'
|
import udOperation from '@crud/UD.operation'
|
||||||
import pagination from '@crud/Pagination'
|
import pagination from '@crud/Pagination'
|
||||||
|
import {download} from "@/api/data";
|
||||||
|
import {downloadFile} from "@/utils";
|
||||||
|
|
||||||
const defaultForm = {
|
const defaultForm = {
|
||||||
task_id: null,
|
task_id: null,
|
||||||
@@ -322,6 +336,7 @@ export default {
|
|||||||
},
|
},
|
||||||
rules: {
|
rules: {
|
||||||
},
|
},
|
||||||
|
showDtlLoading: false,
|
||||||
taskStatusList: [],
|
taskStatusList: [],
|
||||||
taskConfigList: []
|
taskConfigList: []
|
||||||
}
|
}
|
||||||
@@ -390,6 +405,22 @@ export default {
|
|||||||
}).catch(err => {
|
}).catch(err => {
|
||||||
console.log(err.response.data.message)
|
console.log(err.response.data.message)
|
||||||
})
|
})
|
||||||
|
},
|
||||||
|
down() {
|
||||||
|
if (this.currentRow !== null) {
|
||||||
|
const data = this.crud.query
|
||||||
|
if (this.crud.query.createTime !== undefined) {
|
||||||
|
data.begin_time = this.crud.query.createTime[0]
|
||||||
|
data.end_time = this.crud.query.createTime[1]
|
||||||
|
}
|
||||||
|
this.showDtlLoading = true
|
||||||
|
download('/api/schBaseTask/download', data).then(result => {
|
||||||
|
downloadFile(result, '任务查询', 'xlsx')
|
||||||
|
this.showDtlLoading = false
|
||||||
|
}).catch(() => {
|
||||||
|
this.showDtlLoading = false
|
||||||
|
})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user