From 0d9b0dab20eae44c817944e98c967dfd8832f580 Mon Sep 17 00:00:00 2001
From: liyong <18434998025@163.com>
Date: 星期六, 25 四月 2026 17:13:16 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev_天津_阳光彩印' into dev_天津_阳光彩印
---
src/main/java/com/ruoyi/production/service/ProductionPrintOrderService.java | 7
src/main/resources/mapper/production/ProductWorkOrderMapper.xml | 9
src/main/java/com/ruoyi/production/service/impl/ProductOrderServiceImpl.java | 4
src/main/resources/static/printOrderTemp.xlsx | 0
src/main/java/com/ruoyi/production/dto/ProductOrderDto.java | 2
src/main/java/com/ruoyi/basic/excel/ProductionPrintOrderExcel.java | 193 ++++++++++++++++++++++++
src/main/java/com/ruoyi/basic/excel/ExcelUtils.java | 9 +
src/main/java/com/ruoyi/production/controller/ProductionPrintOrderController.java | 23 ++
src/main/java/com/ruoyi/production/service/impl/ProductProcessRouteItemServiceImpl.java | 2
src/main/java/com/ruoyi/production/mapper/ProductWorkOrderMapper.java | 2
src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java | 2
src/main/java/com/ruoyi/production/service/impl/ProductWorkOrderServiceImpl.java | 29 --
src/main/java/com/ruoyi/quality/service/impl/QualityUnqualifiedServiceImpl.java | 2
src/main/resources/mapper/production/ProductOrderMapper.xml | 2
src/main/java/com/ruoyi/production/dto/ExportProductionPrintOrderDto.java | 68 ++++++++
src/main/java/com/ruoyi/production/service/ProductWorkOrderService.java | 2
src/main/java/com/ruoyi/production/service/impl/ProductionPrintOrderServiceImpl.java | 51 ++++++
src/main/java/com/ruoyi/production/pojo/ProductionPrintOrder.java | 13 +
src/main/java/com/ruoyi/common/utils/StringUtils.java | 46 +++++
src/main/java/com/ruoyi/production/service/impl/ProcessRouteServiceImpl.java | 2
20 files changed, 426 insertions(+), 42 deletions(-)
diff --git a/src/main/java/com/ruoyi/basic/excel/ExcelUtils.java b/src/main/java/com/ruoyi/basic/excel/ExcelUtils.java
new file mode 100644
index 0000000..4b07986
--- /dev/null
+++ b/src/main/java/com/ruoyi/basic/excel/ExcelUtils.java
@@ -0,0 +1,9 @@
+package com.ruoyi.basic.excel;
+
+/**
+ * @author buhuazhen
+ * @date 2026/4/25
+ * @email 3038525872@qq.com
+ */
+public class ExcelUtils {
+}
diff --git a/src/main/java/com/ruoyi/basic/excel/ProductionPrintOrderExcel.java b/src/main/java/com/ruoyi/basic/excel/ProductionPrintOrderExcel.java
new file mode 100644
index 0000000..e8bdd25
--- /dev/null
+++ b/src/main/java/com/ruoyi/basic/excel/ProductionPrintOrderExcel.java
@@ -0,0 +1,193 @@
+package com.ruoyi.basic.excel;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.io.FileUtil;
+import cn.hutool.core.util.IdUtil;
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.ExcelWriter;
+import com.alibaba.excel.enums.WriteDirectionEnum;
+import com.alibaba.excel.write.metadata.WriteSheet;
+import com.alibaba.excel.write.metadata.fill.FillConfig;
+import com.alibaba.excel.write.metadata.fill.FillWrapper;
+import com.ruoyi.common.exception.ServiceException;
+import com.ruoyi.production.dto.ExportProductionPrintOrderDto;
+import lombok.SneakyThrows;
+import org.apache.poi.ss.usermodel.*;
+import org.apache.poi.ss.util.CellRangeAddress;
+import org.springframework.stereotype.Component;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.InputStream;
+
+/**
+ * @author buhuazhen
+ * @date 2026/4/25
+ * @email 3038525872@qq.com
+ */
+@Component
+public class ProductionPrintOrderExcel {
+
+
+ /**
+ * 鍚堝苟鍗曞厓鏍煎苟涓哄悎骞跺尯鍩熸坊鍔犲乏鍙宠竟妗�
+ *
+ * @param sheet Sheet
+ * @param workbook Workbook
+ * @param range 瑕佸悎骞剁殑鍖哄煙
+ */
+ public static void mergeWithBorder(Sheet sheet, Workbook workbook, CellRangeAddress range, CellStyle s) {
+
+ // 1. 娣诲姞鍚堝苟鍖哄煙锛堟娴嬫槸鍚﹂噸鍙狅級
+ for (int i = sheet.getNumMergedRegions() - 1; i >= 0; i--) {
+ CellRangeAddress old = sheet.getMergedRegion(i);
+ // 鍒ゆ柇鏄惁閲嶅彔锛堢畝鍗曠煩褰㈤噸鍙犻�昏緫锛�
+ if (!(range.getLastRow() < old.getFirstRow()
+ || range.getFirstRow() > old.getLastRow()
+ || range.getLastColumn() < old.getFirstColumn()
+ || range.getFirstColumn() > old.getLastColumn())) {
+
+ // 瀛樺湪閲嶅彔 鈫� 鍒犻櫎鏃х殑
+ sheet.removeMergedRegion(i);
+ }
+ }
+
+ sheet.addMergedRegion(range);
+
+ // 2. 涓哄悎骞跺尯鍩熷唴鐨勬墍鏈夊崟鍏冩牸娣诲姞宸﹀彸杈规
+ for (int rowIdx = range.getFirstRow(); rowIdx <= range.getLastRow(); rowIdx++) {
+ Row row = sheet.getRow(rowIdx);
+ if (row == null) {
+ row = sheet.createRow(rowIdx);
+ }
+
+ for (int colIdx = range.getFirstColumn(); colIdx <= range.getLastColumn(); colIdx++) {
+
+ Cell cell = row.getCell(colIdx);
+ if (cell == null) {
+ cell = row.createCell(colIdx);
+ }
+
+ CellStyle style = workbook.createCellStyle();
+
+ // 鑻ヨ鍗曞厓鏍煎凡鏈夋牱寮忥紝澶嶅埗
+ if (cell.getCellStyle() != null) {
+ style.cloneStyleFrom(cell.getCellStyle());
+ }
+
+ // 璁剧疆宸﹀彸杈规
+ style.setBorderLeft(s.getBorderLeft());
+ style.setBorderRight(s.getBorderRight());
+ style.setBorderTop(s.getBorderTop());
+ style.setBorderBottom(s.getBorderBottom());
+ style.setAlignment(s.getAlignment());
+ style.setVerticalAlignment(VerticalAlignment.CENTER);
+ cell.setCellStyle(style);
+ }
+ }
+ }
+ @SneakyThrows
+ public byte[] createPrintOrderTemplate(ExportProductionPrintOrderDto printOrderDto, InputStream templateInputStream) {
+
+ ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
+
+ try (ExcelWriter excelWriter = EasyExcel.write(byteArrayOutputStream)
+ .withTemplate(templateInputStream)
+ .build()) {
+
+ FillConfig fillConfig = FillConfig.builder()
+ .forceNewRow(true)
+ .autoStyle(true)
+ .direction(WriteDirectionEnum.VERTICAL)
+ .build();
+
+ WriteSheet writeSheet = EasyExcel.writerSheet().build();
+
+ excelWriter.fill(printOrderDto, writeSheet);
+
+ excelWriter.fill(new FillWrapper("materialInfo", printOrderDto.getMaterialInfo()), fillConfig, writeSheet);
+ excelWriter.fill(new FillWrapper("processContent", printOrderDto.getProcessContent()), fillConfig, writeSheet);
+ excelWriter.fill(new FillWrapper("plateMaking", printOrderDto.getPlateMaking()), fillConfig, writeSheet);
+
+ excelWriter.finish();
+
+ } catch (Exception e) {
+ throw new ServiceException("excel 鐢熸垚澶辫触! " + e.getMessage());
+ }
+ ByteArrayOutputStream out = new ByteArrayOutputStream();
+ try {
+ Workbook workbook = WorkbookFactory.create(
+ new ByteArrayInputStream(byteArrayOutputStream.toByteArray())
+ );
+
+ CellStyle cellStyleTblr = workbook.createCellStyle();
+ cellStyleTblr.setBorderBottom(BorderStyle.THIN);
+ cellStyleTblr.setBorderTop(BorderStyle.THIN);
+ cellStyleTblr.setBorderLeft(BorderStyle.THIN);
+ cellStyleTblr.setBorderRight(BorderStyle.THIN);
+ cellStyleTblr.setWrapText(true);
+ cellStyleTblr.setAlignment(HorizontalAlignment.CENTER);
+ cellStyleTblr.setVerticalAlignment(VerticalAlignment.CENTER);
+
+ Sheet sheet = workbook.getSheetAt(0);
+
+ // ===== 鎻掑叆鍥剧墖 =====
+ byte[] imageBytes = printOrderDto.getCuttingImage();
+
+ int pictureIdx = workbook.addPicture(imageBytes, Workbook.PICTURE_TYPE_JPEG);
+ CreationHelper helper = workbook.getCreationHelper();
+ Drawing<?> drawing = sheet.createDrawingPatriarch();
+
+ ClientAnchor anchor = helper.createClientAnchor();
+ anchor.setCol1(6); // 绗�7鍒楋紙G鍒楋級
+ anchor.setRow1(7);
+ anchor.setDx1(142700); // 鍚戝彸绉诲姩锛堢害鍗婃牸锛�
+ anchor.setDy1(222700);
+
+ anchor.setCol2(8); // 瀹藉害缁堢偣
+ anchor.setRow2(9); // 楂樺害缁堢偣
+
+ Picture picture = drawing.createPicture(anchor, pictureIdx);
+// picture.resize(0.5);
+
+
+
+ // 杩涜鍚堝苟鎿嶄綔 鍒囨枡绀烘剰鍥鹃儴鍒�
+ int startRow = 7;
+ int size = printOrderDto.getMaterialInfo().size();
+ int qlEndRow = startRow + size - 1 + 4;
+ mergeWithBorder(sheet, workbook, new CellRangeAddress(
+ startRow,
+ qlEndRow,
+ 6,
+ 7
+ ), cellStyleTblr);
+
+ // 浜у搧澶囨敞
+ mergeWithBorder(sheet, workbook, new CellRangeAddress(
+ 6+1+printOrderDto.getMaterialInfo().size() +0,
+ 6+1+printOrderDto.getMaterialInfo().size() +1,
+ 0,
+ 5
+ ), cellStyleTblr);
+
+ int zbRowStart = qlEndRow + 2 + CollUtil.size(printOrderDto.getPlateMaking()) +1;
+ int zbRowEnd = zbRowStart + CollUtil.size(printOrderDto.getProcessContent());
+ mergeWithBorder(sheet, workbook, new CellRangeAddress(
+ zbRowStart,
+ zbRowEnd,
+ 4,
+ 7
+ ), cellStyleTblr);
+
+
+ workbook.write(out);
+ workbook.close();
+ } catch (Exception e) {
+ throw new ServiceException("鍥剧墖澶勭悊澶辫触! " + e.getMessage());
+ }
+
+ return out.toByteArray();
+ }
+
+}
diff --git a/src/main/java/com/ruoyi/common/utils/StringUtils.java b/src/main/java/com/ruoyi/common/utils/StringUtils.java
index 5e13807..cdba7bb 100644
--- a/src/main/java/com/ruoyi/common/utils/StringUtils.java
+++ b/src/main/java/com/ruoyi/common/utils/StringUtils.java
@@ -1,5 +1,6 @@
package com.ruoyi.common.utils;
+import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
@@ -761,4 +762,49 @@
return sb.toString();
}
}
+
+ public static void fillStringNull(Object obj) {
+ if (obj == null) return;
+
+ Class<?> clazz = obj.getClass();
+
+ // 鍩烘湰绫诲瀷 / 鍖呰绫� / String 涓嶅鐞�
+ if (clazz.isPrimitive() ||
+ clazz == String.class ||
+ Number.class.isAssignableFrom(clazz) ||
+ clazz == Boolean.class ||
+ clazz == Character.class) {
+ return;
+ }
+
+ for (Field field : clazz.getDeclaredFields()) {
+ field.setAccessible(true);
+ try {
+ Object value = field.get(obj);
+
+ // 1锔忊儯 String 绫诲瀷锛歯ull 鈫� ""
+ if (field.getType() == String.class) {
+ if (value == null) {
+ field.set(obj, "");
+ }
+ }
+ // 2锔忊儯 List 閫掑綊澶勭悊
+ else if (value instanceof List) {
+ for (Object item : (List<?>) value) {
+ fillStringNull(item);
+ }
+ }
+ // 3锔忊儯 鍏朵粬瀵硅薄閫掑綊
+ else if (value != null && !isJdkClass(value.getClass())) {
+ fillStringNull(value);
+ }
+
+ } catch (IllegalAccessException ignored) {}
+ }
+ }
+
+ private static boolean isJdkClass(Class<?> clazz) {
+ return clazz.getPackage() != null &&
+ clazz.getPackage().getName().startsWith("java.");
+ }
}
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/production/controller/ProductionPrintOrderController.java b/src/main/java/com/ruoyi/production/controller/ProductionPrintOrderController.java
index 2e76b67..94a5cb7 100644
--- a/src/main/java/com/ruoyi/production/controller/ProductionPrintOrderController.java
+++ b/src/main/java/com/ruoyi/production/controller/ProductionPrintOrderController.java
@@ -6,7 +6,12 @@
import com.ruoyi.production.service.ProductionPrintOrderService;
import io.swagger.annotations.Api;
import lombok.RequiredArgsConstructor;
+import lombok.SneakyThrows;
import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServletResponse;
+import java.net.URLEncoder;
/**
* @author buhuazhen
@@ -22,15 +27,29 @@
private final ProductionPrintOrderService productionPrintOrderService;
@PostMapping("/save")
- public R save(@RequestBody SaveProductionPrintOrderDto dto){
+ public R save(@RequestBody SaveProductionPrintOrderDto dto) {
productionPrintOrderService.save(dto);
return R.ok();
}
@PostMapping("/getByProductWordId/{id}")
- public ProductionPrintOrder getByProductWordId(@PathVariable Long id){
+ public ProductionPrintOrder getByProductWordId(@PathVariable Long id) {
return productionPrintOrderService.getByProductWordId(id);
}
+ @PostMapping("/export/{id}")
+ @SneakyThrows
+ public void export(@PathVariable Long id, HttpServletResponse response) {
+ byte[] bytes = productionPrintOrderService.exportPrintExcelByWordId(id);
+ String fileName = "鍗板埛瀹氬嵃鍗�.xlsx";
+ response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
+ response.setCharacterEncoding("utf-8");
+ // 瑙e喅涓枃鏂囦欢鍚嶄贡鐮�
+ response.setHeader("Content-Disposition",
+ "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
+ ServletOutputStream out = response.getOutputStream();
+ out.write(bytes);
+ out.flush();
+ }
}
diff --git a/src/main/java/com/ruoyi/production/dto/ExportProductionPrintOrderDto.java b/src/main/java/com/ruoyi/production/dto/ExportProductionPrintOrderDto.java
new file mode 100644
index 0000000..b5b1205
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/dto/ExportProductionPrintOrderDto.java
@@ -0,0 +1,68 @@
+package com.ruoyi.production.dto;
+
+import com.alibaba.excel.metadata.data.ImageData;
+import com.alibaba.excel.metadata.data.WriteCellData;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.util.Collections;
+
+/**
+ * @author buhuazhen
+ * @date 2026/4/25
+ * @email 3038525872@qq.com
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class ExportProductionPrintOrderDto extends ProductionPrintOrderDto implements Serializable {
+ private String numSuffix;
+
+ private String unitSuffix;
+
+ private String priceSuffix;
+
+ // 鍒跺崟鏃ユ湡
+ private String printOrderTimeStr;
+
+ // 瀹屾垚鏃ユ湡
+ private String finishTimeStr;
+
+ // 浠嬬粛淇�
+ private String introductionLetter1 = "拢";
+ // 鍟嗘爣娉ㄥ唽
+ private String introductionLetter2 = "拢";
+ // 濮斿嵃鍗�
+ private String introductionLetter3 = "拢";
+ // 涔﹀彿
+ private String introductionLetter4 = "拢";
+
+ // 骞冲紶
+ private String cuttingDiagramCheckout1 = "拢";
+ // 鍗风瓛
+ private String cuttingDiagramCheckout2 = "拢";
+
+ private byte[] cuttingImage;
+//
+// public void setCuttingImage(byte[] bytes) {
+//
+// WriteCellData<Void> cell = new WriteCellData<>();
+//
+// ImageData imageData = new ImageData();
+//
+// imageData.setImage(bytes);
+//
+// imageData.setImageType(ImageData.ImageType.PICTURE_TYPE_PNG);
+//
+// cell.setImageDataList(Collections.singletonList(imageData));
+//
+// this.cuttingImage = cell;
+//
+// }
+
+}
+
diff --git a/src/main/java/com/ruoyi/production/dto/ProductOrderDto.java b/src/main/java/com/ruoyi/production/dto/ProductOrderDto.java
index 1d7d48b..754dbf5 100644
--- a/src/main/java/com/ruoyi/production/dto/ProductOrderDto.java
+++ b/src/main/java/com/ruoyi/production/dto/ProductOrderDto.java
@@ -94,4 +94,6 @@
@Excel(name = "鑹叉暟",sort = 9)
private String printColorCount;
+ private Long printId;
+
}
diff --git a/src/main/java/com/ruoyi/production/mapper/ProductWorkOrderMapper.java b/src/main/java/com/ruoyi/production/mapper/ProductWorkOrderMapper.java
index bf46540..4dbd6ed 100644
--- a/src/main/java/com/ruoyi/production/mapper/ProductWorkOrderMapper.java
+++ b/src/main/java/com/ruoyi/production/mapper/ProductWorkOrderMapper.java
@@ -19,5 +19,5 @@
List<ProductWorkOrderDto> selectWorkOrderStartStats(@Param("startDate") String startDate, @Param("endDate") String endDate);
- ProductWorkOrder selectMax(@Param("datePrefix") String datePrefix);
+ Integer selectMax(@Param("datePrefix") String datePrefix);
}
diff --git a/src/main/java/com/ruoyi/production/pojo/ProductionPrintOrder.java b/src/main/java/com/ruoyi/production/pojo/ProductionPrintOrder.java
index 58c7ce4..fdcb92f 100644
--- a/src/main/java/com/ruoyi/production/pojo/ProductionPrintOrder.java
+++ b/src/main/java/com/ruoyi/production/pojo/ProductionPrintOrder.java
@@ -6,6 +6,7 @@
import java.io.Serializable;
import java.time.LocalDateTime;
+import java.util.ArrayList;
import java.util.List;
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
@@ -119,19 +120,19 @@
* 鍒剁増
*/
@TableField(value = "plate_making",typeHandler = JacksonTypeHandler.class)
- private List<PlateMakingDto> plateMaking;
+ private List<PlateMakingDto> plateMaking = new ArrayList<>();
/**
* 宸ュ簭鍔犲伐鍐呭
*/
@TableField(value = "process_content",typeHandler = JacksonTypeHandler.class)
- private List<ProcessContentDto> processContent;
+ private List<ProcessContentDto> processContent = new ArrayList<>();
/**
* 鏉愭枡淇℃伅
*/
@TableField(value = "material_info",typeHandler = JacksonTypeHandler.class)
- private List<MaterialInfoDto> materialInfo;
+ private List<MaterialInfoDto> materialInfo = new ArrayList<>();
/**
* 宸ヨ壓瑕佹眰
@@ -262,6 +263,12 @@
@TableField(value = "client_name")
private String clientName;
+ /**
+ * 鍒囨枡鍥剧ず閫夋嫨 鍗曢��
+ */
+ @TableField(value = "cutting_diagram_checkout")
+ private String cuttingDiagramCheckout;
+
public ProductOrderDto convertProductOrderDto(@NotNull ProductOrderDto dto) {
dto.setCutSize(this.getCutSize());
diff --git a/src/main/java/com/ruoyi/production/service/ProductWorkOrderService.java b/src/main/java/com/ruoyi/production/service/ProductWorkOrderService.java
index e8a2aed..85e26bb 100644
--- a/src/main/java/com/ruoyi/production/service/ProductWorkOrderService.java
+++ b/src/main/java/com/ruoyi/production/service/ProductWorkOrderService.java
@@ -26,5 +26,5 @@
* @param npsNo 鐢熶骇璁㈠崟鍙�
* @return String
*/
- String generateProductWorkOrder(String datePrefix, String processName,String npsNo);
+ String generateProductWorkOrder(String processName, String npsNo);
}
diff --git a/src/main/java/com/ruoyi/production/service/ProductionPrintOrderService.java b/src/main/java/com/ruoyi/production/service/ProductionPrintOrderService.java
index aa51f0c..07686df 100644
--- a/src/main/java/com/ruoyi/production/service/ProductionPrintOrderService.java
+++ b/src/main/java/com/ruoyi/production/service/ProductionPrintOrderService.java
@@ -30,4 +30,11 @@
List<ProductionPrintOrder> getListByOrders(@Nullable List<Long> orderIds);
+
+ /**
+ * 鐢熸垚瀵煎嚭excel 鍗板埛鍗曟ā鐗�
+ * @param orderId 璁㈠崟id
+ */
+ byte[] exportPrintExcelByWordId(@Nullable Long orderId);
+
}
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProcessRouteServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProcessRouteServiceImpl.java
index f3237b8..ab8fae4 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProcessRouteServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProcessRouteServiceImpl.java
@@ -233,7 +233,7 @@
productWorkOrder.setDeviceId(dto.getDeviceId());
productWorkOrder.setUserIds(dto.getUserIds());
productWorkOrder.setUserNames(dto.getUserNames());
- productWorkOrder.setWorkOrderNo(productWorkOrderService.generateProductWorkOrder(null, productProcess.getName(), byId.getNpsNo()));
+ productWorkOrder.setWorkOrderNo(productWorkOrderService.generateProductWorkOrder( productProcess.getName(), byId.getNpsNo()));
productWorkOrder.setStatus(1);
productWorkOrderService.save(productWorkOrder);
}
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductOrderServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductOrderServiceImpl.java
index 5eed99f..d622379 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductOrderServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductOrderServiceImpl.java
@@ -83,8 +83,6 @@
productionPrintOrder.convertProductOrderDto(record);
}
});
-
-
}
return productOrderDtoIPage;
@@ -126,7 +124,7 @@
productWorkOrder.setProductOrderId(productOrder.getId());
ProductOrder order = productOrderMapper.selectById(productOrder.getId());
productWorkOrder.setPlanQuantity(order.getQuantity());
- productWorkOrder.setWorkOrderNo(productWorkOrderService.generateProductWorkOrder(null, productProcessMap.getOrDefault(productProcessRouteItem.getProcessId(), new ProductProcess()).getName(), productOrder.getNpsNo()));
+ productWorkOrder.setWorkOrderNo(productWorkOrderService.generateProductWorkOrder( productProcessMap.getOrDefault(productProcessRouteItem.getProcessId(), new ProductProcess()).getName(), productOrder.getNpsNo()));
productWorkOrder.setStatus(1);
productWorkOrderMapper.insert(productWorkOrder);
}
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductProcessRouteItemServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductProcessRouteItemServiceImpl.java
index 081ff3b..2e97872 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductProcessRouteItemServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductProcessRouteItemServiceImpl.java
@@ -145,7 +145,7 @@
productWorkOrder.setProductProcessRouteItemId(productProcessRouteItem.getId());
productWorkOrder.setProductOrderId(productProcessRouteItem.getProductOrderId());
productWorkOrder.setPlanQuantity(productOrder.getQuantity());
- productWorkOrder.setWorkOrderNo(productWorkOrderService.generateProductWorkOrder(null,productProcess.getName(),productOrder.getNpsNo()));
+ productWorkOrder.setWorkOrderNo(productWorkOrderService.generateProductWorkOrder(productProcess.getName(),productOrder.getNpsNo()));
productWorkOrder.setStatus(1);
productWorkOrderMapper.insert(productWorkOrder);
}
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductWorkOrderServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductWorkOrderServiceImpl.java
index 72320be..35a22b6 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductWorkOrderServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductWorkOrderServiceImpl.java
@@ -3,7 +3,6 @@
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.StrUtil;
-import cn.hutool.extra.pinyin.PinyinUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -29,8 +28,6 @@
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
-import java.time.LocalDate;
-import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@@ -73,7 +70,7 @@
if (CollectionUtils.isNotEmpty(productWorkOrderFiles)) {
productWorkOrderFiles.forEach(productWorkOrderFile -> {
Map<String, Object> image = new HashMap<>();
- PictureRenderData pictureRenderData = Pictures.ofLocal( productWorkOrderFile.getUrl()).sizeInCm(17, 20).create();
+ PictureRenderData pictureRenderData = Pictures.ofLocal(productWorkOrderFile.getUrl()).sizeInCm(17, 20).create();
image.put("url", pictureRenderData);
images.add(image);
});
@@ -95,7 +92,7 @@
put("actualEndTime", productWorkOrderDto.getActualEndTime());
put("twoCode", Pictures.ofLocal(codePath).create());
put("deviceName", productWorkOrderDto.getDeviceName());
- put("images", images.isEmpty()?null:images);
+ put("images", images.isEmpty() ? null : images);
}});
try {
@@ -122,25 +119,13 @@
}
@Override
- public String generateProductWorkOrder(String datePrefix,String processName, String npsNo) {
- datePrefix = StrUtil.isBlank(datePrefix) ? LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd")) : datePrefix;
+ public String generateProductWorkOrder(String processName, String npsNo) {
processName = StrUtil.isBlank(processName) ? "鏈煡" : processName;
Assert.notNull(npsNo, "鐢熶骇璁㈠崟鍙风紪鍙蜂笉鑳戒负绌�");
- ProductWorkOrder lastWorkOrder = productWorkOrderMapper.selectMax(datePrefix);
- int sequenceNumber = 1; // 榛樿搴忓彿
- if (lastWorkOrder != null && lastWorkOrder.getWorkOrderNo() != null) {
- String lastNo = lastWorkOrder.getWorkOrderNo().toString();
- if (lastNo.startsWith(datePrefix)) {
- String seqStr = lastNo.substring(datePrefix.length());
- try {
- sequenceNumber = Integer.parseInt(seqStr) + 1;
- } catch (NumberFormatException e) {
- sequenceNumber = 1;
- }
- }
- }
- String processPinyin = StringUtils.getProcessNo(processName);
- return StrUtil.format("{}{}",processPinyin,npsNo,String.format("%03d", sequenceNumber));
+ Integer maxNo = productWorkOrderMapper.selectMax(npsNo);
+ int sequenceNumber = maxNo + 1; // 榛樿搴忓彿
+ String processPinyin = StringUtils.getProcessNo(processName);
+ return StrUtil.format("{}{}", processPinyin, npsNo, String.format("%03d", sequenceNumber));
}
}
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductionPrintOrderServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductionPrintOrderServiceImpl.java
index 1720e59..3716dec 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductionPrintOrderServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductionPrintOrderServiceImpl.java
@@ -2,11 +2,18 @@
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.io.FileUtil;
+import cn.hutool.core.io.IoUtil;
+import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.IdUtil;
+import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.basic.excel.ProductionPrintOrderExcel;
import com.ruoyi.basic.service.CustomerFollowUpFileService;
+import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.dto.SimplePersonDto;
import com.ruoyi.production.dto.*;
import com.ruoyi.production.mapper.ProductOrderMapper;
@@ -15,9 +22,11 @@
import com.ruoyi.production.pojo.ProductionPrintOrder;
import com.ruoyi.production.service.ProductionPrintOrderService;
import lombok.RequiredArgsConstructor;
+import org.jetbrains.annotations.Nullable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
+import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
@@ -36,6 +45,7 @@
private final ProductOrderMapper productOrderMapper;
private final ProcessRouteServiceImpl processRouteService;
+ private final ProductionPrintOrderExcel productionPrintOrderExcel;
private final CustomerFollowUpFileService customerFollowUpFileService;
@Override
@@ -111,6 +121,47 @@
map -> new ArrayList<>(map.values())
));
}
+
+ @Override
+ public byte[] exportPrintExcelByWordId(@Nullable Long orderId) {
+ ProductionPrintOrderDto printOrderDto = this.getByProductWordId(orderId);
+ List<MaterialInfoDto> materialInfo = printOrderDto.getMaterialInfo();
+ Assert.isTrue(CollUtil.isNotEmpty(materialInfo),"鏈湁鏉愭枡淇℃伅锛岃娣诲姞鏀逛俊鎭�!");
+ MaterialInfoDto materialInfoDto = materialInfo.get(0);
+ ExportProductionPrintOrderDto exportProductionPrintOrderDto = BeanUtil.copyProperties(printOrderDto, ExportProductionPrintOrderDto.class);
+ exportProductionPrintOrderDto.setNumSuffix(materialInfoDto.getNumSuffix());
+ exportProductionPrintOrderDto.setUnitSuffix(materialInfoDto.getUnitSuffix());
+ exportProductionPrintOrderDto.setPriceSuffix(materialInfoDto.getPriceSuffix());
+ StringUtils.fillStringNull(exportProductionPrintOrderDto);
+ // 鏃ユ湡淇涓� yyyy骞� MM 鏈� mm 鏃�
+ exportProductionPrintOrderDto.setPrintOrderTimeStr(DateUtil.format(exportProductionPrintOrderDto.getPrintOrderTime(),"yyyy骞� MM 鏈� mm 鏃�"));
+ exportProductionPrintOrderDto.setFinishTimeStr(DateUtil.format(exportProductionPrintOrderDto.getFinishTime(),"yyyy骞� MM 鏈� mm 鏃�"));
+
+ // 浠嬬粛淇� 鍕鹃�夋
+ String introductionLetter = exportProductionPrintOrderDto.getIntroductionLetter();
+ List<String> introductionLetterItem = StrUtil.split(introductionLetter, ",");
+ exportProductionPrintOrderDto.setIntroductionLetter1(introductionLetterItem.contains("浠嬬粛淇�")?"R" : "拢");
+ exportProductionPrintOrderDto.setIntroductionLetter2(introductionLetterItem.contains("鍟嗘爣娉ㄥ唽")?"R" : "拢");
+ exportProductionPrintOrderDto.setIntroductionLetter3(introductionLetterItem.contains("濮斿嵃鍗�")?"R" : "拢");
+ exportProductionPrintOrderDto.setIntroductionLetter4(introductionLetterItem.contains("涔﹀彿")?"R" : "拢");
+
+ // 鍒囨枡鍥剧ず
+ exportProductionPrintOrderDto.setCuttingDiagramCheckout1("骞冲紶".equals(exportProductionPrintOrderDto.getCuttingDiagramCheckout())?"R" : "拢");
+ exportProductionPrintOrderDto.setCuttingDiagramCheckout2("鍗风瓛".equals(exportProductionPrintOrderDto.getCuttingDiagramCheckout())?"R" : "拢");
+
+ // 璇诲彇鍥剧墖淇℃伅
+ if(exportProductionPrintOrderDto.getCuttingFileVo() != null){
+ byte[] bytes = FileUtil.readBytes(exportProductionPrintOrderDto.getCuttingFileVo().getFileUrl());
+ exportProductionPrintOrderDto.setCuttingImage(bytes);
+ }
+ // cutNum 涓哄皬鐩掓暟閲�+涓洅鏁伴噺
+ exportProductionPrintOrderDto.setCutNum(String.valueOf(NumberUtil.add(exportProductionPrintOrderDto.getSmallBoxQty(),exportProductionPrintOrderDto.getMediumBoxQty())));
+
+ byte[] printOrderTemplate = productionPrintOrderExcel.createPrintOrderTemplate(exportProductionPrintOrderDto, this.getClass().getResourceAsStream("/static/printOrderTemp.xlsx"));
+ return printOrderTemplate;
+ }
+
+
}
diff --git a/src/main/java/com/ruoyi/quality/service/impl/QualityUnqualifiedServiceImpl.java b/src/main/java/com/ruoyi/quality/service/impl/QualityUnqualifiedServiceImpl.java
index 05d9d7d..687bf1c 100644
--- a/src/main/java/com/ruoyi/quality/service/impl/QualityUnqualifiedServiceImpl.java
+++ b/src/main/java/com/ruoyi/quality/service/impl/QualityUnqualifiedServiceImpl.java
@@ -118,7 +118,7 @@
productWorkOrder.setProductProcessRouteItemId(productProcessRouteItem.getId());
productWorkOrder.setProductOrderId(order.getId());
productWorkOrder.setPlanQuantity(order.getQuantity());
- productWorkOrder.setWorkOrderNo("FG"+productWorkOrderService.generateProductWorkOrder(null, productProcessMap.getOrDefault(productProcessRouteItem.getProcessId(), new ProductProcess()).getName(), productOrder.getNpsNo()));
+ productWorkOrder.setWorkOrderNo("FG"+productWorkOrderService.generateProductWorkOrder( productProcessMap.getOrDefault(productProcessRouteItem.getProcessId(), new ProductProcess()).getName(), productOrder.getNpsNo()));
productWorkOrder.setStatus(1);
productWorkOrderMapper.insert(productWorkOrder);
}
diff --git a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
index e597a9e..b830a96 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
@@ -322,7 +322,7 @@
productWorkOrder.setProductProcessRouteItemId(productProcessRouteItem.getId());
productWorkOrder.setProductOrderId(productOrder.getId());
productWorkOrder.setPlanQuantity(salesLedgerProduct.getQuantity());
- productWorkOrder.setWorkOrderNo(productWorkOrderService.generateProductWorkOrder(null, productProcessMap.getOrDefault(productProcessRouteItem.getProcessId(),new ProductProcess()).getName(), productOrder.getNpsNo()));
+ productWorkOrder.setWorkOrderNo(productWorkOrderService.generateProductWorkOrder( productProcessMap.getOrDefault(productProcessRouteItem.getProcessId(),new ProductProcess()).getName(), productOrder.getNpsNo()));
productWorkOrder.setStatus(1);
productWorkOrderMapper.insert(productWorkOrder);
diff --git a/src/main/resources/mapper/production/ProductOrderMapper.xml b/src/main/resources/mapper/production/ProductOrderMapper.xml
index 59942bf..c6030f7 100644
--- a/src/main/resources/mapper/production/ProductOrderMapper.xml
+++ b/src/main/resources/mapper/production/ProductOrderMapper.xml
@@ -28,6 +28,7 @@
sl.delivery_date,
sl.actually_delivery_date,
sl.execution_date,
+ t6.id as print_id,
CASE
WHEN shipping_status_counts.total_count = 0 THEN false
WHEN shipping_status_counts.unshipped_count = 0 THEN true
@@ -47,6 +48,7 @@
left join sales_ledger_product slp on po.sale_ledger_product_id = slp.id and slp.type = 1
left join product_process_route ppr on po.id = ppr.product_order_id
left join product_bom pb on pb.id = ppr.bom_id
+ left join production_print_order as t6 on t6.product_order_id = po.id
<where>
<if test="c.npsNo != null and c.npsNo != ''">
and po.nps_no like concat('%',#{c.npsNo},'%')
diff --git a/src/main/resources/mapper/production/ProductWorkOrderMapper.xml b/src/main/resources/mapper/production/ProductWorkOrderMapper.xml
index 5849d88..6bb7fc6 100644
--- a/src/main/resources/mapper/production/ProductWorkOrderMapper.xml
+++ b/src/main/resources/mapper/production/ProductWorkOrderMapper.xml
@@ -92,12 +92,9 @@
actual_start_time >= #{startDate}
AND actual_start_time <= #{endDate}
</select>
- <select id="selectMax" resultType="com.ruoyi.production.pojo.ProductWorkOrder">
- SELECT SUBSTRING(work_order_no, 3) as work_order_no
+ <select id="selectMax" resultType="java.lang.Integer">
+ SELECT count(1)
FROM product_work_order
- WHERE SUBSTRING(work_order_no, 3) like concat(#{datePrefix},'%')
- order by work_order_no desc
- limit 1
- ;
+ WHERE SUBSTRING(work_order_no, 3) like concat('%',#{datePrefix},'%')
</select>
</mapper>
diff --git a/src/main/resources/static/printOrderTemp.xlsx b/src/main/resources/static/printOrderTemp.xlsx
new file mode 100644
index 0000000..c66967c
--- /dev/null
+++ b/src/main/resources/static/printOrderTemp.xlsx
Binary files differ
--
Gitblit v1.9.3