From c30ac5918122426ea7a33dbe411aa39b3c7aa2ca Mon Sep 17 00:00:00 2001
From: buhuazhen <hua100783@gmail.com>
Date: 星期一, 27 四月 2026 13:17:36 +0800
Subject: [PATCH] feat(productionPrintOrderExcel) excel导出
---
src/main/java/com/ruoyi/production/service/impl/ProcessRouteServiceImpl.java | 202 ++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 200 insertions(+), 2 deletions(-)
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 a5427d2..ab8fae4 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProcessRouteServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProcessRouteServiceImpl.java
@@ -1,20 +1,27 @@
package com.ruoyi.production.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.production.dto.ProcessRouteAnticlockwiseDto;
import com.ruoyi.production.dto.ProcessRouteDto;
+import com.ruoyi.production.mapper.ProcessRouteItemMapper;
import com.ruoyi.production.mapper.ProcessRouteMapper;
-import com.ruoyi.production.pojo.ProcessRoute;
-import com.ruoyi.production.service.ProcessRouteService;
+import com.ruoyi.production.mapper.ProductOrderMapper;
+import com.ruoyi.production.pojo.*;
+import com.ruoyi.production.service.*;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
+import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
+import java.util.List;
@Service
@AllArgsConstructor
@@ -23,6 +30,28 @@
@Autowired
private ProcessRouteMapper processRouteMapper;
+
+ @Autowired
+ private ProcessRouteItemMapper processRouteItemMapper;
+
+ @Autowired
+ private ProductOrderMapper productOrderMapper;
+ @Autowired
+ private ProductStructureService productStructureService;
+ @Autowired
+ private ProcessRouteItemService processRouteItemService;
+ @Autowired
+ private ProductWorkOrderService productWorkOrderService;
+ @Autowired
+ private ProductBomService productBomService;
+ @Autowired
+ private ProductProcessRouteService productProcessRouteService;
+ @Autowired
+ private ProductProcessRouteItemService productProcessRouteItemService;
+ @Autowired
+ private ProductOrderService productOrderService;
+ @Autowired
+ private ProductProcessService productProcessService;
@Override
public IPage<ProcessRouteDto> pageProcessRouteDto(Page<ProcessRouteDto> page, ProcessRouteDto processRouteDto) {
@@ -40,4 +69,173 @@
processRoute.setProcessRouteCode(newProductCode);
return processRouteMapper.updateById(processRoute);
}
+
+ @Override
+ public int batchDelete(List<Long> ids) {
+ //鍏堝垽鏂槸鍚﹀凡缁忓紩鐢ㄤ簡
+ List<ProductOrder> productOrders = productOrderMapper.selectList(Wrappers.<ProductOrder>lambdaQuery().in(ProductOrder::getRouteId, ids));
+ if (productOrders.size() > 0) {
+ throw new RuntimeException("璇ュ伐鑹鸿矾绾跨敓浜у凡寮曠敤锛屼笉鑳藉垹闄�");
+ }
+ //鍒犻櫎宸ヨ壓璺嚎璇︽儏
+ processRouteItemMapper.delete(Wrappers.<ProcessRouteItem>lambdaQuery().in(ProcessRouteItem::getRouteId, ids));
+ return processRouteMapper.deleteBatchIds(ids);
+ }
+
+
+ /**
+ * 宸ヨ壓璺嚎鍙嶅悜鏂板 鏂板浜哹om bom瀛愯〃 宸ヨ壓璺嚎 宸ヨ壓璺嚎瀛愯〃 鐢熶骇宸ヨ壓璺嚎涓昏〃 鐢熶骇宸ヨ壓璺嚎瀛愯〃 宸ュ崟琛�
+ *
+ * @param processRouteAnticlockwiseDtos 宸ヨ壓瀛愯〃
+ * @param productModelId 鎴愬搧瑙勬牸鍨嬪彿id
+ * @param productOrderId 鐢熶骇璁㈠崟id
+ * @return
+ */
+ @Transactional(rollbackFor = Exception.class)
+ @Override
+ public Long processRouteAnticlockwise(List<ProcessRouteAnticlockwiseDto> processRouteAnticlockwiseDtos, Long productModelId, Long productOrderId) {
+ ProductOrder byId = productOrderService.getById(productOrderId);
+ // 1. 鏂板BOM
+ ProductBom productBom = createProductBom(productModelId);
+
+ // 2. 鏂板BOM瀛愯〃
+ List<ProductStructure> productStructures = buildProductStructures(processRouteAnticlockwiseDtos, productBom.getId());
+ productStructureService.saveBatch(productStructures);
+
+ // 3. 鏂板宸ヨ壓璺嚎
+ ProcessRoute processRoute = createProcessRoute(productModelId, productBom.getId());
+
+ // 4. 鏂板宸ヨ壓璺嚎瀛愯〃
+ List<ProcessRouteItem> processRouteItems = buildProcessRouteItems(processRouteAnticlockwiseDtos, processRoute.getId(), productModelId);
+ processRouteItemService.saveBatch(processRouteItems);
+
+ // 5. 鏂板鐢熶骇宸ヨ壓璺嚎
+ ProductProcessRoute productProcessRoute = createProductProcessRoute(productModelId, productOrderId, productBom.getId(), processRoute.getProcessRouteCode());
+
+ // 6. 鏂板鐢熶骇宸ヨ壓璺嚎瀛愯〃
+ buildProductProcessRouteItems(processRouteAnticlockwiseDtos, productProcessRoute.getId(), productModelId,productOrderId);
+ return processRoute.getId();
+ }
+
+ /**
+ * 鍒涘缓浜у搧BOM
+ */
+ private ProductBom createProductBom(Long productModelId) {
+ ProductBom productBom = new ProductBom();
+ productBom.setProductModelId(productModelId);
+ productBom.setVersion("1.0.0");
+ productBomService.save(productBom);
+
+ productBom.setBomNo("BM." + String.format("%05d", productBom.getId()));
+ productBomService.updateById(productBom);
+
+ return productBom;
+ }
+
+ /**
+ * 鏋勫缓浜у搧缁撴瀯鍒楄〃
+ */
+ private List<ProductStructure> buildProductStructures(List<ProcessRouteAnticlockwiseDto> dtos, Integer bomId) {
+ List<ProductStructure> structures = new ArrayList<>(dtos.size());
+ for (ProcessRouteAnticlockwiseDto dto : dtos) {
+ ProductStructure structure = new ProductStructure();
+ structure.setProductModelId(dto.getProductModelId());
+ structure.setProcessId(dto.getProcessId());
+ structure.setUnitQuantity(new BigDecimal(1));
+ structure.setProcessRouteOpenNum(dto.getProcessRouteOpenNum());
+ structure.setProcessRouteNum(dto.getProcessRouteNum());
+ structure.setProcessRouteAddNum(dto.getProcessRouteAddNum());
+ structure.setProcessRouteRequire(dto.getProcessRouteRequire());
+ structure.setBomId(bomId);
+ structure.setProcessRouteName(dto.getProcessRouteName());
+ structures.add(structure);
+ }
+ return structures;
+ }
+
+ /**
+ * 鍒涘缓宸ヨ壓璺嚎
+ */
+ private ProcessRoute createProcessRoute(Long productModelId, Integer bomId) {
+ ProcessRoute processRoute = new ProcessRoute();
+ processRoute.setProductModelId(productModelId);
+ processRoute.setBomId(bomId);
+ processRoute.setDescription("");
+ this.save(processRoute);
+
+ processRoute.setProcessRouteCode("GYLX." + String.format("%05d", processRoute.getId()));
+ this.updateById(processRoute);
+
+ return processRoute;
+ }
+
+ /**
+ * 鏋勫缓宸ヨ壓璺嚎瀛愰」鍒楄〃
+ */
+ private List<ProcessRouteItem> buildProcessRouteItems(List<ProcessRouteAnticlockwiseDto> dtos, Long routeId, Long productModelId) {
+ List<ProcessRouteItem> items = new ArrayList<>(dtos.size());
+ Integer num = 0;
+ for (ProcessRouteAnticlockwiseDto dto : dtos) {
+ ProcessRouteItem item = new ProcessRouteItem();
+ item.setRouteId(routeId);
+ item.setProcessId(dto.getProcessId());
+ item.setProductModelId(productModelId);
+ item.setProcessRouteName(dto.getProcessRouteName());
+ item.setProcessRouteOpenNum(dto.getProcessRouteOpenNum());
+ item.setProcessRouteNum(dto.getProcessRouteNum());
+ item.setProcessRouteAddNum(dto.getProcessRouteAddNum());
+ item.setProcessRouteRequire(dto.getProcessRouteRequire());
+ item.setDragSort(num++);
+ items.add(item);
+ }
+ return items;
+ }
+
+ /**
+ * 鍒涘缓鐢熶骇宸ヨ壓璺嚎
+ */
+ private ProductProcessRoute createProductProcessRoute(Long productModelId, Long productOrderId, Integer bomId, String processRouteCode) {
+ ProductProcessRoute productProcessRoute = new ProductProcessRoute();
+ productProcessRoute.setProductModelId(productModelId);
+ productProcessRoute.setProductOrderId(productOrderId);
+ productProcessRoute.setBomId(bomId);
+ productProcessRoute.setProcessRouteCode(processRouteCode);
+ productProcessRouteService.save(productProcessRoute);
+
+ return productProcessRoute;
+ }
+
+ /**
+ * 鏋勫缓鐢熶骇宸ヨ壓璺嚎瀛愰」鍒楄〃
+ */
+ private void buildProductProcessRouteItems(List<ProcessRouteAnticlockwiseDto> dtos, Long productRouteId, Long productModelId,Long productOrderId) {
+ ProductOrder byId = productOrderService.getById(productOrderId);
+ Integer num = 0;
+ for (ProcessRouteAnticlockwiseDto dto : dtos) {
+ ProductProcessRouteItem item = new ProductProcessRouteItem();
+ item.setProductRouteId(productRouteId);
+ item.setProcessId(dto.getProcessId());
+ item.setProductModelId(dto.getProductModelId());
+ item.setProcessRouteName(dto.getProcessRouteName());
+ item.setProcessRouteOpenNum(dto.getProcessRouteOpenNum());
+ item.setProcessRouteNum(dto.getProcessRouteNum());
+ item.setProcessRouteAddNum(dto.getProcessRouteAddNum());
+ item.setProcessRouteRequire(dto.getProcessRouteRequire());
+ item.setDragSort(num++);
+ item.setUuid(dto.getUuid());
+ productProcessRouteItemService.save(item);
+ ProductProcess productProcess = productProcessService.getById(item.getProcessId());
+ //鍚屾鏂板鐢熶骇宸ュ崟
+ ProductWorkOrder productWorkOrder = new ProductWorkOrder();
+ productWorkOrder.setProductProcessRouteItemId(item.getId());
+ productWorkOrder.setProductOrderId(productOrderId);
+ productWorkOrder.setPlanQuantity(new BigDecimal(dto.getProcessRouteNum()));
+ productWorkOrder.setDeviceId(dto.getDeviceId());
+ productWorkOrder.setUserIds(dto.getUserIds());
+ productWorkOrder.setUserNames(dto.getUserNames());
+ productWorkOrder.setWorkOrderNo(productWorkOrderService.generateProductWorkOrder( productProcess.getName(), byId.getNpsNo()));
+ productWorkOrder.setStatus(1);
+ productWorkOrderService.save(productWorkOrder);
+ }
+ }
}
--
Gitblit v1.9.3