From 078ef3e4291665a60dda609a631c5fca418947b9 Mon Sep 17 00:00:00 2001
From: chenhj <1263187585@qq.com>
Date: 星期四, 30 四月 2026 15:48:28 +0800
Subject: [PATCH] 删除旧文件上传

---
 src/main/java/com/ruoyi/technology/service/impl/TechnologyRoutingOperationParamServiceImpl.java |  226 ++++++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 217 insertions(+), 9 deletions(-)

diff --git a/src/main/java/com/ruoyi/technology/service/impl/TechnologyRoutingOperationParamServiceImpl.java b/src/main/java/com/ruoyi/technology/service/impl/TechnologyRoutingOperationParamServiceImpl.java
index c10da3f..9f270fa 100644
--- a/src/main/java/com/ruoyi/technology/service/impl/TechnologyRoutingOperationParamServiceImpl.java
+++ b/src/main/java/com/ruoyi/technology/service/impl/TechnologyRoutingOperationParamServiceImpl.java
@@ -1,20 +1,228 @@
 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.CollectionUtils;
+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.common.exception.ServiceException;
+import com.ruoyi.technology.bean.dto.TechnologyRoutingOperationParamDto;
+import com.ruoyi.technology.bean.dto.TechnologyRoutingOperationParamSyncDto;
+import com.ruoyi.technology.bean.vo.TechnologyRoutingOperationParamVo;
+import com.ruoyi.technology.mapper.TechnologyOperationParamMapper;
+import com.ruoyi.technology.mapper.TechnologyParamMapper;
+import com.ruoyi.technology.mapper.TechnologyRoutingOperationMapper;
 import com.ruoyi.technology.mapper.TechnologyRoutingOperationParamMapper;
+import com.ruoyi.technology.pojo.TechnologyOperationParam;
+import com.ruoyi.technology.pojo.TechnologyParam;
+import com.ruoyi.technology.pojo.TechnologyRoutingOperation;
 import com.ruoyi.technology.pojo.TechnologyRoutingOperationParam;
 import com.ruoyi.technology.service.TechnologyRoutingOperationParamService;
+import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
-/**
- * <p>
- * 鐢熶骇璁㈠崟宸ヨ壓璺嚎宸ュ簭鍙傛暟琛� 鏈嶅姟瀹炵幇绫�
- * </p>
- *
- * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
- * @since 2026-04-20 10:22:16
- */
+import java.util.List;
+
 @Service
-public class TechnologyRoutingOperationParamServiceImpl extends ServiceImpl<TechnologyRoutingOperationParamMapper, TechnologyRoutingOperationParam> implements TechnologyRoutingOperationParamService {
+@Transactional(rollbackFor = Exception.class)
+@RequiredArgsConstructor
+public class TechnologyRoutingOperationParamServiceImpl extends ServiceImpl<TechnologyRoutingOperationParamMapper, TechnologyRoutingOperationParam>
+        implements TechnologyRoutingOperationParamService {
 
+    private final TechnologyRoutingOperationParamMapper technologyRoutingOperationParamMapper;
+    private final TechnologyRoutingOperationMapper technologyRoutingOperationMapper;
+    private final TechnologyOperationParamMapper technologyOperationParamMapper;
+    private final TechnologyParamMapper technologyParamMapper;
+
+    @Override
+    public IPage<TechnologyRoutingOperationParamVo> pageTechnologyRoutingOperationParam(Page<TechnologyRoutingOperationParamDto> page,
+                                                                                         TechnologyRoutingOperationParamDto dto) {
+        Page<TechnologyRoutingOperationParam> entityPage = new Page<>(page.getCurrent(), page.getSize(), page.getTotal());
+        return this.page(entityPage, buildQueryWrapper(dto))
+                .convert(item -> BeanUtil.copyProperties(item, TechnologyRoutingOperationParamVo.class));
+    }
+
+    @Override
+    public List<TechnologyRoutingOperationParamVo> listTechnologyRoutingOperationParam(TechnologyRoutingOperationParamDto dto) {
+        return BeanUtil.copyToList(this.list(buildQueryWrapper(dto)), TechnologyRoutingOperationParamVo.class);
+    }
+
+    @Override
+    public TechnologyRoutingOperationParamVo getTechnologyRoutingOperationParamInfo(Long id) {
+        TechnologyRoutingOperationParam item = this.getById(id);
+        if (item == null) {
+            return null;
+        }
+        return BeanUtil.copyProperties(item, TechnologyRoutingOperationParamVo.class);
+    }
+
+    @Override
+    public boolean saveTechnologyRoutingOperationParam(TechnologyRoutingOperationParam item) {
+        TechnologyRoutingOperation routingOperation = getRoutingOperation(item.getTechnologyRoutingOperationId());
+        fillFromOperationParam(item, routingOperation);
+        checkDuplicate(item);
+        return this.saveOrUpdate(item);
+    }
+
+    @Override
+    public boolean removeTechnologyRoutingOperationParam(Long id) {
+        return this.removeById(id);
+    }
+
+    @Override
+    public int syncTechnologyRoutingOperationParam(TechnologyRoutingOperationParamSyncDto syncDto) {
+        if (syncDto == null || syncDto.getTechnologyRoutingOperationId() == null) {
+            throw new ServiceException("宸ヨ壓璺嚎宸ュ簭ID涓嶈兘涓虹┖");
+        }
+        TechnologyRoutingOperation routingOperation = getRoutingOperation(syncDto.getTechnologyRoutingOperationId());
+        List<TechnologyOperationParam> operationParamList = technologyOperationParamMapper.selectList(
+                Wrappers.<TechnologyOperationParam>lambdaQuery()
+                        .eq(TechnologyOperationParam::getTechnologyOperationId, routingOperation.getTechnologyOperationId())
+                        .orderByAsc(TechnologyOperationParam::getId)
+        );
+        boolean replaceExisting = syncDto.getReplaceExisting() == null || syncDto.getReplaceExisting();
+        if (replaceExisting) {
+            technologyRoutingOperationParamMapper.delete(
+                    Wrappers.<TechnologyRoutingOperationParam>lambdaQuery()
+                            .eq(TechnologyRoutingOperationParam::getTechnologyRoutingOperationId, routingOperation.getId())
+            );
+        }
+        int successCount = 0;
+        if (CollectionUtils.isNotEmpty(operationParamList)) {
+            for (TechnologyOperationParam operationParam : operationParamList) {
+                boolean exists = technologyRoutingOperationParamMapper.selectCount(
+                        Wrappers.<TechnologyRoutingOperationParam>lambdaQuery()
+                                .eq(TechnologyRoutingOperationParam::getTechnologyRoutingOperationId, routingOperation.getId())
+                                .eq(TechnologyRoutingOperationParam::getTechnologyOperationParamId, operationParam.getId())
+                ) > 0;
+                if (!replaceExisting && exists) {
+                    continue;
+                }
+                TechnologyRoutingOperationParam snapshot = new TechnologyRoutingOperationParam();
+                snapshot.setTechnologyRoutingOperationId(routingOperation.getId());
+                snapshot.setTechnologyOperationParamId(operationParam.getId());
+                snapshot.setTechnologyOperationId(operationParam.getTechnologyOperationId());
+                snapshot.setStandardValue(operationParam.getStandardValue());
+                fillFromOperationParam(snapshot, routingOperation);
+                technologyRoutingOperationParamMapper.insert(snapshot);
+                successCount++;
+            }
+        }
+        return successCount;
+    }
+
+    private LambdaQueryWrapper<TechnologyRoutingOperationParam> buildQueryWrapper(TechnologyRoutingOperationParamDto dto) {
+        TechnologyRoutingOperationParam query = dto == null ? new TechnologyRoutingOperationParam() : dto;
+        return Wrappers.<TechnologyRoutingOperationParam>lambdaQuery()
+                .eq(query.getId() != null, TechnologyRoutingOperationParam::getId, query.getId())
+                .eq(query.getTechnologyRoutingOperationId() != null,
+                        TechnologyRoutingOperationParam::getTechnologyRoutingOperationId, query.getTechnologyRoutingOperationId())
+                .eq(query.getTechnologyOperationId() != null,
+                        TechnologyRoutingOperationParam::getTechnologyOperationId, query.getTechnologyOperationId())
+                .eq(query.getTechnologyOperationParamId() != null,
+                        TechnologyRoutingOperationParam::getTechnologyOperationParamId, query.getTechnologyOperationParamId())
+                .eq(query.getParamId() != null, TechnologyRoutingOperationParam::getParamId, query.getParamId())
+                .eq(query.getParamType() != null, TechnologyRoutingOperationParam::getParamType, query.getParamType())
+                .like(query.getParamCode() != null && !query.getParamCode().isEmpty(),
+                        TechnologyRoutingOperationParam::getParamCode, query.getParamCode())
+                .like(query.getParamName() != null && !query.getParamName().isEmpty(),
+                        TechnologyRoutingOperationParam::getParamName, query.getParamName())
+                .orderByAsc(TechnologyRoutingOperationParam::getTechnologyRoutingOperationId)
+                .orderByAsc(TechnologyRoutingOperationParam::getId);
+    }
+
+    private TechnologyRoutingOperation getRoutingOperation(Long technologyRoutingOperationId) {
+        if (technologyRoutingOperationId == null) {
+            throw new ServiceException("宸ヨ壓璺嚎宸ュ簭ID涓嶈兘涓虹┖");
+        }
+        TechnologyRoutingOperation routingOperation = technologyRoutingOperationMapper.selectById(technologyRoutingOperationId);
+        if (routingOperation == null) {
+            throw new ServiceException("宸ヨ壓璺嚎宸ュ簭涓嶅瓨鍦�");
+        }
+        return routingOperation;
+    }
+
+    private void fillFromOperationParam(TechnologyRoutingOperationParam item, TechnologyRoutingOperation routingOperation) {
+        if (item.getTechnologyOperationId() == null) {
+            item.setTechnologyOperationId(routingOperation.getTechnologyOperationId());
+        } else if (!item.getTechnologyOperationId().equals(routingOperation.getTechnologyOperationId())) {
+            throw new ServiceException("宸ュ簭ID涓庡伐鑹鸿矾绾垮伐搴忎笉鍖归厤");
+        }
+
+        if (item.getTechnologyOperationParamId() != null) {
+            TechnologyOperationParam operationParam = technologyOperationParamMapper.selectById(item.getTechnologyOperationParamId());
+            if (operationParam == null) {
+                throw new ServiceException("宸ュ簭鍙傛暟涓嶅瓨鍦�");
+            }
+            if (!routingOperation.getTechnologyOperationId().equals(operationParam.getTechnologyOperationId())) {
+                throw new ServiceException("宸ュ簭鍙傛暟涓嶅睘浜庡綋鍓嶅伐鑹鸿矾绾垮伐搴�");
+            }
+            TechnologyParam technologyParam = technologyParamMapper.selectById(operationParam.getTechnologyParamId());
+            if (technologyParam == null) {
+                throw new ServiceException("鍩虹鍙傛暟涓嶅瓨鍦�");
+            }
+            fillFromTechnologyParam(item, technologyParam);
+            if (item.getStandardValue() == null) {
+                item.setStandardValue(operationParam.getStandardValue());
+            }
+            return;
+        }
+
+        if (item.getParamId() != null) {
+            TechnologyParam technologyParam = technologyParamMapper.selectById(item.getParamId());
+            if (technologyParam == null) {
+                throw new ServiceException("鍩虹鍙傛暟涓嶅瓨鍦�");
+            }
+            fillFromTechnologyParam(item, technologyParam);
+            TechnologyOperationParam operationParam = technologyOperationParamMapper.selectOne(
+                    Wrappers.<TechnologyOperationParam>lambdaQuery()
+                            .eq(TechnologyOperationParam::getTechnologyOperationId, routingOperation.getTechnologyOperationId())
+                            .eq(TechnologyOperationParam::getTechnologyParamId, item.getParamId())
+                            .orderByAsc(TechnologyOperationParam::getId)
+                            .last("limit 1")
+            );
+            if (operationParam != null) {
+                item.setTechnologyOperationParamId(operationParam.getId());
+                if (item.getStandardValue() == null) {
+                    item.setStandardValue(operationParam.getStandardValue());
+                }
+            }
+            return;
+        }
+
+        throw new ServiceException("paramId鎴杢echnologyOperationParamId涓嶈兘涓虹┖");
+    }
+
+    private void fillFromTechnologyParam(TechnologyRoutingOperationParam item, TechnologyParam technologyParam) {
+        item.setParamId(technologyParam.getId());
+        item.setParamCode(technologyParam.getParamCode());
+        item.setParamName(technologyParam.getParamName());
+        item.setParamType(technologyParam.getParamType());
+        item.setParamFormat(technologyParam.getParamFormat());
+        item.setUnit(technologyParam.getUnit());
+        item.setIsRequired(technologyParam.getIsRequired());
+        if (item.getRemark() == null || item.getRemark().trim().isEmpty()) {
+            item.setRemark(technologyParam.getRemark());
+        }
+    }
+
+    private void checkDuplicate(TechnologyRoutingOperationParam item) {
+        boolean duplicate = technologyRoutingOperationParamMapper.selectCount(
+                Wrappers.<TechnologyRoutingOperationParam>lambdaQuery()
+                        .eq(TechnologyRoutingOperationParam::getTechnologyRoutingOperationId, item.getTechnologyRoutingOperationId())
+                        .eq(item.getTechnologyOperationParamId() != null,
+                                TechnologyRoutingOperationParam::getTechnologyOperationParamId, item.getTechnologyOperationParamId())
+                        .eq(item.getTechnologyOperationParamId() == null && item.getParamId() != null,
+                                TechnologyRoutingOperationParam::getParamId, item.getParamId())
+                        .eq(item.getTechnologyOperationParamId() == null && item.getParamId() == null && item.getParamCode() != null,
+                                TechnologyRoutingOperationParam::getParamCode, item.getParamCode())
+                        .ne(item.getId() != null, TechnologyRoutingOperationParam::getId, item.getId())
+        ) > 0;
+        if (duplicate) {
+            throw new ServiceException("宸ヨ壓璺嚎宸ュ簭鍙傛暟閲嶅");
+        }
+    }
 }

--
Gitblit v1.9.3