From 7e8edd4b59fb22146b90d01ca38f75148f3fd774 Mon Sep 17 00:00:00 2001
From: liding <756868258@qq.com>
Date: 星期一, 20 四月 2026 17:57:18 +0800
Subject: [PATCH] feat(bom): 添加BOM管理功能模块,工序 管理,基础 - 新增CustomerPrivatePoolMapper.xml实现客户私池映射 - 添加SysLoginController支持登录验证和用户信息获取 - 创建TechnologyBomController提供BOM的增删改查接口 - 定义TechnologyBomDto数据传输对象 - 实现TechnologyBomMapper和相关XML映射文件 - 开发TechnologyBomService业务逻辑层 - 添加TechnologyBomStructure结构管理功能 - 集成Excel导入导出BOM数据功能 - 实现BOM结构树形展示和维护功能

---
 src/main/java/com/ruoyi/technology/service/impl/TechnologyRoutingOperationServiceImpl.java |  118 +++++++++++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 110 insertions(+), 8 deletions(-)

diff --git a/src/main/java/com/ruoyi/technology/service/impl/TechnologyRoutingOperationServiceImpl.java b/src/main/java/com/ruoyi/technology/service/impl/TechnologyRoutingOperationServiceImpl.java
index f937f8d..15fd9e8 100644
--- a/src/main/java/com/ruoyi/technology/service/impl/TechnologyRoutingOperationServiceImpl.java
+++ b/src/main/java/com/ruoyi/technology/service/impl/TechnologyRoutingOperationServiceImpl.java
@@ -1,20 +1,122 @@
 package com.ruoyi.technology.service.impl;
 
+import cn.hutool.core.bean.BeanUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+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.technology.bean.dto.TechnologyRoutingOperationDto;
+import com.ruoyi.technology.bean.vo.TechnologyRoutingOperationVo;
+import com.ruoyi.technology.mapper.TechnologyRoutingMapper;
 import com.ruoyi.technology.mapper.TechnologyRoutingOperationMapper;
 import com.ruoyi.technology.pojo.TechnologyRoutingOperation;
 import com.ruoyi.technology.service.TechnologyRoutingOperationService;
+import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
-/**
- * <p>
- * 宸ヨ壓璺嚎宸ュ簭琛� 鏈嶅姟瀹炵幇绫�
- * </p>
- *
- * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
- * @since 2026-04-20 10:06:47
- */
+import java.util.List;
+
 @Service
+@Transactional(rollbackFor = Exception.class)
+@RequiredArgsConstructor
 public class TechnologyRoutingOperationServiceImpl extends ServiceImpl<TechnologyRoutingOperationMapper, TechnologyRoutingOperation> implements TechnologyRoutingOperationService {
 
+    private final TechnologyRoutingOperationMapper technologyRoutingOperationMapper;
+
+    private final TechnologyRoutingMapper technologyRoutingMapper;
+
+    @Override
+    public IPage<TechnologyRoutingOperationVo> pageTechnologyRoutingOperation(Page<TechnologyRoutingOperationDto> page,
+                                                                              TechnologyRoutingOperationDto technologyRoutingOperationDto) {
+        Page<TechnologyRoutingOperation> entityPage = new Page<>(page.getCurrent(), page.getSize(), page.getTotal());
+        return this.page(entityPage, buildQueryWrapper(technologyRoutingOperationDto))
+                .convert(item -> BeanUtil.copyProperties(item, TechnologyRoutingOperationVo.class));
+    }
+
+    @Override
+    public List<TechnologyRoutingOperationVo> listTechnologyRoutingOperation(TechnologyRoutingOperationDto technologyRoutingOperationDto) {
+        return BeanUtil.copyToList(this.list(buildQueryWrapper(technologyRoutingOperationDto)), TechnologyRoutingOperationVo.class);
+    }
+
+    @Override
+    public TechnologyRoutingOperationVo getTechnologyRoutingOperationInfo(Long id) {
+        TechnologyRoutingOperation technologyRoutingOperation = this.getById(id);
+        if (technologyRoutingOperation == null) {
+            return null;
+        }
+        return BeanUtil.copyProperties(technologyRoutingOperation, TechnologyRoutingOperationVo.class);
+    }
+
+    @Override
+    public boolean saveTechnologyRoutingOperation(TechnologyRoutingOperation technologyRoutingOperation) {
+        if (technologyRoutingOperation.getTechnologyRoutingId() == null
+                || technologyRoutingMapper.selectById(technologyRoutingOperation.getTechnologyRoutingId()) == null) {
+            throw new RuntimeException("宸ヨ壓璺嚎涓嶅瓨鍦紝鏃犳硶淇濆瓨宸ュ簭");
+        }
+        if (technologyRoutingOperation.getDragSort() == null || technologyRoutingOperation.getDragSort() <= 0) {
+            technologyRoutingOperation.setDragSort(nextDragSort(technologyRoutingOperation.getTechnologyRoutingId()));
+        }
+        return this.save(technologyRoutingOperation);
+    }
+
+    @Override
+    public boolean removeTechnologyRoutingOperation(Long id) {
+        TechnologyRoutingOperation technologyRoutingOperation = this.getById(id);
+        if (technologyRoutingOperation == null) {
+            return false;
+        }
+        boolean removed = this.removeById(id);
+        if (removed) {
+            resetDragSort(technologyRoutingOperation.getTechnologyRoutingId());
+        }
+        return removed;
+    }
+
+    private LambdaQueryWrapper<TechnologyRoutingOperation> buildQueryWrapper(TechnologyRoutingOperationDto technologyRoutingOperation) {
+        LambdaQueryWrapper<TechnologyRoutingOperation> queryWrapper = Wrappers.lambdaQuery();
+        queryWrapper.eq(technologyRoutingOperation.getId() != null, TechnologyRoutingOperation::getId, technologyRoutingOperation.getId())
+                .eq(technologyRoutingOperation.getTechnologyRoutingId() != null,
+                        TechnologyRoutingOperation::getTechnologyRoutingId, technologyRoutingOperation.getTechnologyRoutingId())
+                .eq(technologyRoutingOperation.getProductModelId() != null,
+                        TechnologyRoutingOperation::getProductModelId, technologyRoutingOperation.getProductModelId())
+                .eq(technologyRoutingOperation.getTechnologyOperationId() != null,
+                        TechnologyRoutingOperation::getTechnologyOperationId, technologyRoutingOperation.getTechnologyOperationId())
+                .eq(technologyRoutingOperation.getIsQuality() != null,
+                        TechnologyRoutingOperation::getIsQuality, technologyRoutingOperation.getIsQuality())
+                .orderByAsc(TechnologyRoutingOperation::getDragSort)
+                .orderByAsc(TechnologyRoutingOperation::getId);
+        return queryWrapper;
+    }
+
+    private Integer nextDragSort(Long technologyRoutingId) {
+        TechnologyRoutingOperation lastOperation = technologyRoutingOperationMapper.selectOne(
+                Wrappers.<TechnologyRoutingOperation>lambdaQuery()
+                        .eq(TechnologyRoutingOperation::getTechnologyRoutingId, technologyRoutingId)
+                        .orderByDesc(TechnologyRoutingOperation::getDragSort)
+                        .last("limit 1")
+        );
+        if (lastOperation == null || lastOperation.getDragSort() == null) {
+            return 1;
+        }
+        return lastOperation.getDragSort() + 1;
+    }
+
+    private void resetDragSort(Long technologyRoutingId) {
+        List<TechnologyRoutingOperation> operationList = technologyRoutingOperationMapper.selectList(
+                Wrappers.<TechnologyRoutingOperation>lambdaQuery()
+                        .eq(TechnologyRoutingOperation::getTechnologyRoutingId, technologyRoutingId)
+                        .orderByAsc(TechnologyRoutingOperation::getDragSort)
+                        .orderByAsc(TechnologyRoutingOperation::getId)
+        );
+        for (int i = 0; i < operationList.size(); i++) {
+            TechnologyRoutingOperation item = operationList.get(i);
+            int dragSort = i + 1;
+            if (item.getDragSort() == null || item.getDragSort() != dragSort) {
+                item.setDragSort(dragSort);
+                technologyRoutingOperationMapper.updateById(item);
+            }
+        }
+    }
 }

--
Gitblit v1.9.3