1.优化跟踪记录导出时页面等待问题

master
董哲奇 6 days ago
parent 42e24a3c01
commit c4b7db92b7

@ -2,6 +2,7 @@ package com.dsic.gj_erp;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.date.TimeInterval; import cn.hutool.core.date.TimeInterval;
import cn.hutool.core.io.FileUtil;
import cn.hutool.extra.qrcode.QrCodeUtil; import cn.hutool.extra.qrcode.QrCodeUtil;
import cn.hutool.extra.qrcode.QrConfig; import cn.hutool.extra.qrcode.QrConfig;
import com.google.zxing.BarcodeFormat; import com.google.zxing.BarcodeFormat;
@ -19,10 +20,17 @@ import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.util.List;
public class Test { public class Test {
public static void main(String[] args) throws IOException { public static void main(String[] args) throws IOException {
List<String> gbk = FileUtil.readLines("D:\\T300K-132_400_erp0909\\T300K-132_400批量型材统计数据_7跨.XC", "GBK");
System.out.println(gbk);
List<String> gbk1 = FileUtil.readLines("D:\\T300K-132_400_erp0909\\T300K-132_400批量数控板材统计数据_4跨.BC", "GBK");
System.out.println(gbk1);
// System.out.println(DateUtil.thisYear()); // System.out.println(DateUtil.thisYear());
// System.out.println(StrUtil.padPre("1",3,"0")); // System.out.println(StrUtil.padPre("1",3,"0"));
@ -32,17 +40,17 @@ public class Test {
//System.out.println("aaa = " + String.format("%03d",1)); //System.out.println("aaa = " + String.format("%03d",1));
// MatrixToImageWriter. // MatrixToImageWriter.
TimeInterval timer = DateUtil.timer(); // TimeInterval timer = DateUtil.timer();
String pdfFilePath = "E:\\B058HC104HN第058批量龙门套料图2023-07-20.pdf"; // PDF文件路径 // String pdfFilePath = "E:\\B058HC104HN第058批量龙门套料图2023-07-20.pdf"; // PDF文件路径
PDDocument document = PDDocument.load(new File(pdfFilePath)); // PDDocument document = PDDocument.load(new File(pdfFilePath));
// PDFTextStripper stripper = new PDFTextStripper(); // PDFTextStripper stripper = new PDFTextStripper();
// String text = stripper.getText(document); // String text = stripper.getText(document);
// String[] split = text.split("\\n"); // String[] split = text.split("\\n");
// List<QrCodeDto> list = new ArrayList<>(); // List<QrCodeDto> list = new ArrayList<>();
QrConfig config = new QrConfig(300, 300);//二维码宽/高 // QrConfig config = new QrConfig(300, 300);//二维码宽/高
// 设置边距,既二维码和背景之间的边距(即白边大小) // 设置边距,既二维码和背景之间的边距(即白边大小)
config.setMargin(0); // config.setMargin(0);
// 设置前景色,既二维码颜色(青色) // 设置前景色,既二维码颜色(青色)
//config.setForeColor(Color.CYAN.getRGB()); //config.setForeColor(Color.CYAN.getRGB());
// 设置背景色(灰色) // 设置背景色(灰色)
@ -80,25 +88,25 @@ public class Test {
// } // }
// } // }
for (int pageNumber = 1; pageNumber < document.getNumberOfPages(); ++pageNumber) { // for (int pageNumber = 1; pageNumber < document.getNumberOfPages(); ++pageNumber) {
PDPage page = document.getPage(pageNumber); // PDPage page = document.getPage(pageNumber);
String textByRegion = getTextByRegion(page, 80, 50, 1100, 40); // String textByRegion = getTextByRegion(page, 80, 50, 1100, 40);
// System.out.println(textByRegion); //// System.out.println(textByRegion);
String[] split = textByRegion.split(" "); // String[] split = textByRegion.split(" ");
String dcch = split[1]; // String dcch = split[1];
String dcpl = split[3]; // String dcpl = split[3];
String tzbh = split[7]; // String tzbh = split[7];
String pageIndex = split[12]; // String pageIndex = split[12];
BufferedImage bufferedImage = QrCodeUtil.generate(String.format("%s_%s_%s", dcch, dcpl, tzbh), config); // BufferedImage bufferedImage = QrCodeUtil.generate(String.format("%s_%s_%s", dcch, dcpl, tzbh), config);
PDPageContentStream contentStream = new PDPageContentStream(document, page, PDPageContentStream.AppendMode.APPEND, true, true); // PDPageContentStream contentStream = new PDPageContentStream(document, page, PDPageContentStream.AppendMode.APPEND, true, true);
PDImageXObject qrCodeImage = JPEGFactory.createFromImage(document, bufferedImage); // PDImageXObject qrCodeImage = JPEGFactory.createFromImage(document, bufferedImage);
contentStream.drawImage(qrCodeImage, 10, 10, 75, 75); // 在PDF中的坐标位置添加二维码 // contentStream.drawImage(qrCodeImage, 10, 10, 75, 75); // 在PDF中的坐标位置添加二维码
contentStream.close(); // contentStream.close();
} // }
document.save("E:/updated_document.pdf"); // document.save("E:/updated_document.pdf");
document.close(); // document.close();
System.out.println(timer.interval()); // System.out.println(timer.interval());
// 输出提取的文本到控制台 // 输出提取的文本到控制台
// System.out.println(text); // System.out.println(text);

@ -0,0 +1,904 @@
package com.dsic.gj_erp.bean.jcsj;
import cn.hutool.core.util.NumberUtil;
import lombok.Getter;
import lombok.Setter;
import java.math.BigDecimal;
/**
* VO
* tableColumnfield
*/
@Setter
@Getter
public class YdjhzzVO {
/**
*
*/
private Object dcCh;
/**
*
*/
private Object dcPl;
/**
*
*/
private Object dcFd;
/**
* 1
*/
private Object lm1;
/**
*
*/
private Object bclqzl_lm1;
/**
*
*/
private Object bcshzl_lm1;
/**
*
*/
private Object 1;
/**
*
*/
private Object 1;
/**
*
*/
private Object 1;
/**
* 1
*/
private Object s1;
/**
*
*/
private Object bclqzl_s1;
/**
*
*/
private Object bcshzl_s1;
/**
*
*/
private Object 1;
/**
*
*/
private Object 1;
/**
*
*/
private Object 1;
/**
* 2
*/
private Object xj2;
/**
*
*/
private Object bclqzl_xj2;
/**
*
*/
private Object bcshzl_xj2;
/**
*
*/
private Object 2;
/**
*
*/
private Object 2;
/**
*
*/
private Object 2;
/**
* 2
*/
private Object dj2;
/**
*
*/
private Object bclqzl_dj2;
/**
*
*/
private Object bcshzl_dj2;
/**
*
*/
private Object 2;
/**
*
*/
private Object 2;
/**
*
*/
private Object 2;
/**
* 2
*/
private Object sx2;
/**
*
*/
private Object bclqzl_sx2;
/**
*
*/
private Object bcshzl_sx2;
/**
*
*/
private Object 2;
/**
*
*/
private Object 2;
/**
*
*/
private Object 2;
/**
* 2
*/
private Object szd2;
/**
*
*/
private Object bclqzl_szd2;
/**
*
*/
private Object bcshzl_szd2;
/**
*
*/
private Object 2;
/**
*
*/
private Object 2;
/**
*
*/
private Object 2;
/**
*
*/
private Object xf;
/**
*
*/
private Object bclqzl_xf;
/**
*
*/
private Object bcshzl_xf;
/**
*
*/
private Object ;
/**
*
*/
private Object ;
/**
*
*/
private Object ;
/**
*
*/
private Object df;
/**
*
*/
private Object bclqzl_df;
/**
*
*/
private Object bcshzl_df;
/**
*
*/
private Object ;
/**
*
*/
private Object ;
/**
*
*/
private Object ;
/**
*
*/
private Object xzhb;
/**
*
*/
private Object bclqzl_xzhb;
/**
*
*/
private Object bcshzl_xzhb;
/**
*
*/
private Object ;
/**
*
*/
private Object ;
/**
*
*/
private Object ;
/**
*
*/
private Object dzhb;
/**
*
*/
private Object bclqzl_dzhb;
/**
*
*/
private Object bcshzl_dzhb;
/**
*
*/
private Object ;
/**
*
*/
private Object ;
/**
*
*/
private Object ;
/**
* 4
*/
private Object sx4;
/**
*
*/
private Object bclqzl_sx4;
/**
*
*/
private Object bcshzl_sx4;
/**
*
*/
private Object 4;
/**
*
*/
private Object 4;
/**
*
*/
private Object 4;
/**
* 4
*/
private Object jz4;
/**
*
*/
private Object bclqzl_jz4;
/**
*
*/
private Object bcshzl_jz4;
/**
*
*/
private Object 4;
/**
*
*/
private Object 4;
/**
*
*/
private Object 4;
/**
*
*/
private Object xm;
/**
*
*/
private Object bclqzl_xm;
/**
*
*/
private Object bcshzl_xm;
/**
*
*/
private Object ;
/**
*
*/
private Object ;
/**
*
*/
private Object ;
/**
*
*/
private Object dm;
/**
*
*/
private Object bclqzl_dm;
/**
*
*/
private Object bcshzl_dm;
/**
*
*/
private Object ;
/**
*
*/
private Object ;
/**
*
*/
private Object ;
/**
* 3
*/
private Object sx3;
/**
*
*/
private Object bclqzl_sx3;
/**
*
*/
private Object bcshzl_sx3;
/**
*
*/
private Object 3;
/**
*
*/
private Object 3;
/**
*
*/
private Object 3;
/**
* 3
*/
private Object sj3;
/**
*
*/
private Object bclqzl_sj3;
/**
*
*/
private Object bcshzl_sj3;
/**
*
*/
private Object 3;
/**
*
*/
private Object 3;
/**
*
*/
private Object 3;
/**
* 3
*/
private Object szd3;
/**
*
*/
private Object bclqzl_szd3;
/**
*
*/
private Object bcshzl_szd3;
/**
*
*/
private Object 3;
/**
*
*/
private Object 3;
/**
*
*/
private Object 3;
/**
*
*/
private Object xzxcgs;
/**
*
*/
private Object ;
/**
*
*/
private Object ;
/**
*
*/
private Object lqzl_xzxc;
/**
*
*/
private Object shzl_xzxc;
/**
*
*/
private Object ;
/**
*
*/
private Object ;
/**
*
*/
private Object ;
/**
*
*/
private Object dzxcgs;
/**
*
*/
private Object ;
/**
*
*/
private Object ;
/**
*
*/
private Object lqzl_dzxc;
/**
*
*/
private Object shzl_dzxc;
/**
*
*/
private Object ;
/**
*
*/
private Object ;
/**
*
*/
private Object ;
/**
*
*/
private Object fggs;
/**
*
*/
private Object ;
/**
*
*/
private Object ;
/**
*
*/
private Object lqzl_fg;
/**
*
*/
private Object shzl_fg;
/**
*
*/
private Object ;
/**
*
*/
private Object ;
/**
*
*/
private Object ;
/**
*
*/
private Object xcgs_hj;
/**
*
*/
private Object xcms_hj;
/**
*
*/
private BigDecimal lqhj_xz;
/**
*
*/
private BigDecimal shhj_xz;
/**
* 4
*/
private Object szd4;
/**
*
*/
private Object bclqzl_szd4;
/**
*
*/
private Object bcshzl_szd4;
/**
*
*/
private Object 4;
/**
*
*/
private Object 4;
/**
*
*/
private Object 4;
/**
* 2
*/
private Object sq2x;
/**
*
*/
private Object bclqzl_sq2x;
/**
*
*/
private Object bcshzl_sq2x;
/**
*
*/
private Object 2;
/**
*
*/
private Object 2;
/**
*
*/
private Object 2;
/**
* 2
*/
private Object sq2d;
/**
*
*/
private Object bclqzl_sq2d;
/**
*
*/
private Object bcshzl_sq2d;
/**
*
*/
private Object 2;
/**
*
*/
private Object 2;
/**
*
*/
private Object 2;
/**
* 3
*/
private Object xq3;
/**
*
*/
private Object bclqzl_xq3;
/**
*
*/
private Object bcshzl_xq3;
/**
*
*/
private Object 3;
/**
*
*/
private Object 3;
/**
*
*/
private Object 3;
/**
* 3
*/
private Object dq3;
/**
*
*/
private Object bclqzl_dq3;
/**
*
*/
private Object bcshzl_dq3;
/**
*
*/
private Object 3;
/**
*
*/
private Object 3;
/**
*
*/
private Object 3;
/**
*
*/
private Object gd;
/**
*
*/
private Object bclqzl_gd;
/**
*
*/
private Object bcshzl_gd;
/**
*
*/
private Object ;
/**
*
*/
private Object ;
/**
*
*/
private Object ;
/**
*
*/
private BigDecimal lqhj_dz;
/**
*
*/
private BigDecimal shhj_dz;
/**
*
*/
private BigDecimal lqhj;
/**
*
*/
private BigDecimal shhj;
/**
*
*/
private Object hjbs;
/**
*
*/
private Object xflj;
/**
*
*/
private Object dflj;
public void initLqhj() {
this.lqhj = NumberUtil.add(this.lqhj_xz, this.lqhj_dz);
}
public void initShhj() {
this.shhj = NumberUtil.add(this.shhj_xz, this.shhj_dz);
}
}

@ -23,7 +23,6 @@ import com.dsic.gj_erp.service.jhgk.DmYdjhService;
import com.dsic.gj_erp.service.sy.SYService; import com.dsic.gj_erp.service.sy.SYService;
import com.dsic.gj_erp.util.ObjConvertUtils; import com.dsic.gj_erp.util.ObjConvertUtils;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import jdk.nashorn.internal.ir.ReturnNode;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;

@ -4,16 +4,21 @@ package com.dsic.gj_erp.controller.jcsj;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.dsic.gj_erp.bean.ResultBean; import com.dsic.gj_erp.bean.ResultBean;
import com.dsic.gj_erp.bean.jcsj.Ydjhzz; import com.dsic.gj_erp.bean.jcsj.Ydjhzz;
import com.dsic.gj_erp.bean.jcsj.YdjhzzVO;
import com.dsic.gj_erp.bean.jhgk.DmYdjh; import com.dsic.gj_erp.bean.jhgk.DmYdjh;
import com.dsic.gj_erp.mapper.jhgk.DmYdjhMapper; import com.dsic.gj_erp.mapper.jhgk.DmYdjhMapper;
import com.dsic.gj_erp.service.jcsj.DmBclqmxpService; import com.dsic.gj_erp.service.jcsj.DmBclqmxpService;
import com.dsic.gj_erp.service.jcsj.YdjhzzExportService;
import com.dsic.gj_erp.service.jhgk.DmYdjhService; import com.dsic.gj_erp.service.jhgk.DmYdjhService;
import com.dsic.gj_erp.vo.VO; import com.dsic.gj_erp.vo.VO;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
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;
@ -35,6 +40,20 @@ public class YdjhzzController {
private final DmBclqmxpService bclqmxpService; private final DmBclqmxpService bclqmxpService;
private final DmYdjhService ydjhService; private final DmYdjhService ydjhService;
private final YdjhzzExportService ydjhzzExportService;
/**
* Excel
* POSTExcel
*
* @param dataList
* @param response HttpServletResponse
*/
@PostMapping("/export")
public void exportExcel(@RequestBody List<YdjhzzVO> dataList, HttpServletResponse response) throws Exception {
ydjhzzExportService.export(dataList, response);
}
@PostMapping @PostMapping
public ResultBean<?> yqbtjcx(@RequestBody Map<String,String> map){ public ResultBean<?> yqbtjcx(@RequestBody Map<String,String> map){
List<VO> list = bclqmxpService.(map); List<VO> list = bclqmxpService.(map);

@ -0,0 +1,83 @@
package com.dsic.gj_erp.service.jcsj;
import com.dsic.gj_erp.bean.jcsj.YdjhzzVO;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.core.io.ClassPathResource;
import org.springframework.stereotype.Service;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.lang.reflect.Field;
import java.net.URLEncoder;
import java.util.List;
/**
* Service
* Excel
*/
@Service
public class YdjhzzExportService {
private static final String TEMPLATE_PATH = "templates/预切板计划导出模板.xlsx";
/**
* Excel
*
* @param dataList
* @param response HTTP
* @throws Exception
*/
public void export(List<YdjhzzVO> dataList, HttpServletResponse response) throws Exception {
// 1. 加载模板文件
ClassPathResource resource = new ClassPathResource(TEMPLATE_PATH);
try (InputStream templateStream = resource.getInputStream();
Workbook workbook = new XSSFWorkbook(templateStream)) {
Sheet sheet = workbook.getSheetAt(0);
if (sheet == null) {
throw new RuntimeException("模板中未找到Sheet");
}
// 2. 获取VO的所有字段按tableColumn顺序声明
Field[] fields = YdjhzzVO.class.getDeclaredFields();
int fieldCount = fields.length;
// 3. 逐行写入数据从第3行开始第1行=分组标题第2行=列标题)
for (YdjhzzVO vo : dataList) {
vo.initLqhj();
vo.initShhj();
Row dataRow = sheet.createRow(sheet.getLastRowNum() + 1);
// 遍历VO的所有字段按声明顺序写入Excel列
for (int j = 0; j < fieldCount; j++) {
Field field = fields[j];
field.setAccessible(true);
Object value = field.get(vo);
Cell cell = dataRow.createCell(j);
if (value != null) {
if (value instanceof Number) {
cell.setCellValue(((Number) value).doubleValue());
} else {
cell.setCellValue(value.toString());
}
}
}
}
// 4. 设置响应头,触发浏览器下载
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setCharacterEncoding("utf-8");
String fileName = URLEncoder.encode("预切板计划.xlsx", "UTF-8");
response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
// 5. 写入响应流
try (OutputStream outputStream = response.getOutputStream()) {
workbook.write(outputStream);
outputStream.flush();
}
}
}
}

@ -19,7 +19,7 @@ public class 钢材到货情况统计Service extends MppServiceImpl<钢材到货
public void init(){ public void init(){
//CronUtil.schedule("0 0 16 * * ?", (Task) this::process); //CronUtil.schedule("0 0 16 * * ?", (Task) this::process);
CronUtil.schedule("*/30 * * * * ?", (Task) this::process); CronUtil.schedule("0 30 * * * ?", (Task) this::process);
System.out.println("初始化定时任务"); System.out.println("初始化定时任务");
} }

Loading…
Cancel
Save