From 1ca5584d7e3200a9af65a099bd26d3593e2ba702 Mon Sep 17 00:00:00 2001
From: liyong <18434998025@163.com>
Date: 星期四, 07 五月 2026 14:36:08 +0800
Subject: [PATCH] 迁移pro

---
 src/main/java/com/ruoyi/production/service/impl/ProductionOrderRoutingOperationServiceImpl.java |  176 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 176 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductionOrderRoutingOperationServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductionOrderRoutingOperationServiceImpl.java
new file mode 100644
index 0000000..886da11
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductionOrderRoutingOperationServiceImpl.java
@@ -0,0 +1,176 @@
+package com.ruoyi.production.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.framework.web.domain.R;
+import com.ruoyi.production.mapper.ProductionOperationTaskMapper;
+import com.ruoyi.production.mapper.ProductionOrderRoutingOperationMapper;
+import com.ruoyi.production.mapper.ProductionOrderRoutingOperationParamMapper;
+import com.ruoyi.production.mapper.ProductionProductMainMapper;
+import com.ruoyi.production.pojo.ProductionOperationTask;
+import com.ruoyi.production.pojo.ProductionOrderRoutingOperation;
+import com.ruoyi.production.pojo.ProductionOrderRoutingOperationParam;
+import com.ruoyi.production.pojo.ProductionProductMain;
+import com.ruoyi.production.service.ProductionOrderRoutingOperationService;
+import com.ruoyi.production.service.ProductionProductMainService;
+import com.ruoyi.technology.mapper.TechnologyOperationParamMapper;
+import com.ruoyi.technology.mapper.TechnologyParamMapper;
+import com.ruoyi.technology.pojo.TechnologyOperationParam;
+import com.ruoyi.technology.pojo.TechnologyParam;
+import lombok.RequiredArgsConstructor;
+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
+@Transactional(rollbackFor = Exception.class)
+@RequiredArgsConstructor
+public class ProductionOrderRoutingOperationServiceImpl extends ServiceImpl<ProductionOrderRoutingOperationMapper, ProductionOrderRoutingOperation>
+        implements ProductionOrderRoutingOperationService {
+
+    private final ProductionOrderRoutingOperationMapper productionOrderRoutingOperationMapper;
+    private final ProductionOperationTaskMapper productionOperationTaskMapper;
+    private final ProductionProductMainMapper productionProductMainMapper;
+    private final ProductionProductMainService productionProductMainService;
+    private final TechnologyOperationParamMapper technologyOperationParamMapper;
+    private final TechnologyParamMapper technologyParamMapper;
+    private final ProductionOrderRoutingOperationParamMapper productionOrderRoutingOperationParamMapper;
+
+    @Override
+    public R addRouteItem(ProductionOrderRoutingOperation productionOrderRoutingOperation) {
+        int insert = productionOrderRoutingOperationMapper.insert(productionOrderRoutingOperation);
+        //宸ュ簭鍏宠仈鐨勫弬鏁伴渶瑕佸悓姝ユ柊澧�
+        List<TechnologyOperationParam> technologyOperationParams = technologyOperationParamMapper.selectList(Wrappers.<TechnologyOperationParam>lambdaQuery()
+                .eq(TechnologyOperationParam::getTechnologyOperationId, productionOrderRoutingOperation.getTechnologyOperationId()));
+        if (CollectionUtils.isNotEmpty(technologyOperationParams)){
+            ArrayList<ProductionOrderRoutingOperationParam> productionOrderRoutingOperationParams = new ArrayList<>();
+            for (TechnologyOperationParam technologyOperationParam : technologyOperationParams) {
+                TechnologyParam technologyParam = technologyParamMapper.selectById(technologyOperationParam.getTechnologyParamId());
+                ProductionOrderRoutingOperationParam productionOrderRoutingOperationParam = new ProductionOrderRoutingOperationParam();
+                productionOrderRoutingOperationParam.setProductionOrderId(productionOrderRoutingOperation.getProductionOrderId());
+                productionOrderRoutingOperationParam.setProductionOrderRoutingOperationId(productionOrderRoutingOperation.getId());
+                productionOrderRoutingOperationParam.setParamCode(technologyParam.getParamCode());
+                productionOrderRoutingOperationParam.setParamName(technologyParam.getParamName());
+                productionOrderRoutingOperationParam.setParamType(technologyParam.getParamType());
+                productionOrderRoutingOperationParam.setParamFormat(technologyParam.getParamFormat());
+                productionOrderRoutingOperationParam.setUnit(technologyParam.getUnit());
+                productionOrderRoutingOperationParam.setIsRequired(technologyParam.getIsRequired());
+                productionOrderRoutingOperationParam.setRemark(technologyParam.getRemark());
+                productionOrderRoutingOperationParam.setParamId(technologyParam.getId());
+                productionOrderRoutingOperationParam.setTechnologyOperationId(productionOrderRoutingOperation.getTechnologyOperationId());
+                productionOrderRoutingOperationParams.add(productionOrderRoutingOperationParam);
+            }
+            productionOrderRoutingOperationParamMapper.insert(productionOrderRoutingOperationParams);
+        }
+        String datePrefix = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
+        if (insert > 0) {
+            ProductionOperationTask lastTask = productionOperationTaskMapper.selectOne(
+                    Wrappers.<ProductionOperationTask>lambdaQuery()
+                            .likeRight(ProductionOperationTask::getWorkOrderNo, "GD" + datePrefix)
+                            .orderByDesc(ProductionOperationTask::getWorkOrderNo)
+                            .last("limit 1"));
+            int sequenceNumber = 1;
+            if (lastTask != null && lastTask.getWorkOrderNo() != null) {
+                String lastNo = lastTask.getWorkOrderNo();
+                if (lastNo.startsWith("GD" + datePrefix)) {
+                    String seqStr = lastNo.substring(("GD" + datePrefix).length());
+                    try {
+                        sequenceNumber = Integer.parseInt(seqStr) + 1;
+                    } catch (NumberFormatException e) {
+                        sequenceNumber = 1;
+                    }
+                }
+            }
+            String workOrderNoStr = "GD" + String.format("%s%03d", datePrefix, sequenceNumber);
+            ProductionOperationTask productionOperationTask = new ProductionOperationTask();
+            productionOperationTask.setProductionOrderRoutingOperationId(productionOrderRoutingOperation.getId());
+            productionOperationTask.setProductionOrderId(productionOrderRoutingOperation.getProductionOrderId());
+            productionOperationTask.setPlanQuantity(BigDecimal.ZERO);
+            productionOperationTask.setCompleteQuantity(BigDecimal.ZERO);
+            productionOperationTask.setWorkOrderNo(workOrderNoStr);
+            productionOperationTask.setStatus(1);
+            productionOperationTaskMapper.insert(productionOperationTask);
+        }
+        return R.ok();
+    }
+
+    @Override
+    public R deleteRouteItem(Long id) {
+        try {
+            ProductionOperationTask productionOperationTask = productionOperationTaskMapper.selectOne(
+                    new LambdaQueryWrapper<ProductionOperationTask>()
+                            .eq(ProductionOperationTask::getProductionOrderRoutingOperationId, id)
+                            .last("limit 1"));
+            if (productionOperationTask == null) {
+                throw new RuntimeException("鍒犻櫎澶辫触锛氭湭鎵惧埌鍏宠仈鐨勭敓浜у伐鍗�");
+            }
+            if (productionOperationTask.getCompleteQuantity() != null
+                    && BigDecimal.ZERO.compareTo(productionOperationTask.getCompleteQuantity()) < 0) {
+                throw new RuntimeException("鍒犻櫎澶辫触锛氳宸ュ崟宸插紑濮嬬敓浜э紝璇峰厛鍒犻櫎鐢熶骇鎶ュ伐");
+            }
+            List<ProductionProductMain> productionProductMains = productionProductMainMapper.selectList(
+                    new LambdaQueryWrapper<ProductionProductMain>()
+                            .eq(ProductionProductMain::getProductionOperationTaskId, productionOperationTask.getId()));
+            for (ProductionProductMain main : productionProductMains) {
+                productionProductMainService.removeProductMain(main.getId());
+            }
+            Long productionOrderId = productionOperationTask.getProductionOrderId();
+            Long routingId = null;
+            ProductionOrderRoutingOperation deleteItem = productionOrderRoutingOperationMapper.selectById(id);
+            if (deleteItem != null) {
+                routingId = deleteItem.getOrderRoutingId();
+            }
+            productionOperationTaskMapper.delete(new LambdaQueryWrapper<ProductionOperationTask>()
+                    .eq(ProductionOperationTask::getProductionOrderRoutingOperationId, id));
+            productionOrderRoutingOperationMapper.deleteById(id);
+            if (routingId != null) {
+                List<ProductionOrderRoutingOperation> operationList = productionOrderRoutingOperationMapper.selectList(
+                        Wrappers.<ProductionOrderRoutingOperation>lambdaQuery()
+                                .eq(ProductionOrderRoutingOperation::getOrderRoutingId, routingId)
+                                .eq(ProductionOrderRoutingOperation::getProductionOrderId, productionOrderId)
+                                .orderByAsc(ProductionOrderRoutingOperation::getDragSort));
+                for (int i = 0; i < operationList.size(); i++) {
+                    ProductionOrderRoutingOperation item = operationList.get(i);
+                    if (!Integer.valueOf(i + 1).equals(item.getDragSort())) {
+                        item.setDragSort(i + 1);
+                        productionOrderRoutingOperationMapper.updateById(item);
+                    }
+                }
+            }
+            return R.ok();
+        } catch (Exception e) {
+            throw new RuntimeException("鍒犻櫎鐢熶骇宸ヨ壓璺嚎澶辫触锛�" + e.getMessage());
+        }
+    }
+
+    @Override
+    public int sortRouteItem(ProductionOrderRoutingOperation productionOrderRoutingOperation) {
+        ProductionOrderRoutingOperation oldItem = productionOrderRoutingOperationMapper.selectById(productionOrderRoutingOperation.getId());
+        List<ProductionOrderRoutingOperation> operationList = productionOrderRoutingOperationMapper.selectList(
+                Wrappers.<ProductionOrderRoutingOperation>lambdaQuery()
+                        .eq(ProductionOrderRoutingOperation::getOrderRoutingId, oldItem.getOrderRoutingId())
+                        .orderByAsc(ProductionOrderRoutingOperation::getDragSort));
+        Integer targetPosition = productionOrderRoutingOperation.getDragSort();
+        if (targetPosition != null && targetPosition >= 1) {
+            operationList.removeIf(item -> item.getId().equals(oldItem.getId()));
+            operationList.add(targetPosition - 1, oldItem);
+            for (int i = 0; i < operationList.size(); i++) {
+                ProductionOrderRoutingOperation item = operationList.get(i);
+                int dragSort = i + 1;
+                if (!Integer.valueOf(dragSort).equals(item.getDragSort())) {
+                    item.setDragSort(dragSort);
+                    productionOrderRoutingOperationMapper.updateById(item);
+                }
+            }
+            return 1;
+        }
+        return 0;
+    }
+}

--
Gitblit v1.9.3