From 2a71f6790ddf6be7f63e6b009fc8d325a2a1d13b Mon Sep 17 00:00:00 2001
From: huminmin <mac@MacBook-Pro.local>
Date: 星期一, 27 四月 2026 13:07:34 +0800
Subject: [PATCH] 添加相关接口附件信息

---
 src/main/java/com/ruoyi/technology/service/impl/TechnologyParamServiceImpl.java |  166 ++++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 158 insertions(+), 8 deletions(-)

diff --git a/src/main/java/com/ruoyi/technology/service/impl/TechnologyParamServiceImpl.java b/src/main/java/com/ruoyi/technology/service/impl/TechnologyParamServiceImpl.java
index 1afea09..a3e8f5e 100644
--- a/src/main/java/com/ruoyi/technology/service/impl/TechnologyParamServiceImpl.java
+++ b/src/main/java/com/ruoyi/technology/service/impl/TechnologyParamServiceImpl.java
@@ -1,20 +1,170 @@
 package com.ruoyi.technology.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.technology.bean.dto.TechnologyParamDto;
+import com.ruoyi.technology.bean.vo.TechnologyParamVo;
 import com.ruoyi.technology.mapper.TechnologyParamMapper;
 import com.ruoyi.technology.pojo.TechnologyParam;
 import com.ruoyi.technology.service.TechnologyParamService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 
-/**
- * <p>
- * 鍩虹鍙傛暟琛� 鏈嶅姟瀹炵幇绫�
- * </p>
- *
- * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
- * @since 2026-04-20 09:45:20
- */
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
 @Service
+@RequiredArgsConstructor
 public class TechnologyParamServiceImpl extends ServiceImpl<TechnologyParamMapper, TechnologyParam> implements TechnologyParamService {
 
+    private static final List<Integer> VALID_PARAM_TYPES = Arrays.asList(1, 2, 3, 4);
+    private static final String PARAM_CODE_PREFIX = "PARAM_";
+    private static final Byte DATE_PARAM_TYPE = (byte) 4;
+
+    /**
+     * 鍒嗛〉鏌ヨ鍩虹鍙傛暟骞舵牸寮忓寲鏃ユ湡绫诲瀷灞曠ず銆�
+     */
+    @Override
+    public IPage<TechnologyParamVo> baseParamList(Page<TechnologyParamDto> page, TechnologyParamDto baseParam) {
+        LambdaQueryWrapper<TechnologyParam> queryWrapper = new LambdaQueryWrapper<>();
+        if (baseParam != null && StringUtils.isNotEmpty(baseParam.getParamName())) {
+            queryWrapper.like(TechnologyParam::getParamName, baseParam.getParamName());
+        }
+        queryWrapper.orderByDesc(TechnologyParam::getId);
+
+        Page<TechnologyParam> entityPage = new Page<>(page.getCurrent(), page.getSize(), page.getTotal());
+        Page<TechnologyParam> paramPage = page(entityPage, queryWrapper);
+
+        Page<TechnologyParamVo> resultPage = new Page<>(paramPage.getCurrent(), paramPage.getSize(), paramPage.getTotal());
+        List<TechnologyParamVo> records = new ArrayList<>(paramPage.getRecords().size());
+        for (TechnologyParam item : paramPage.getRecords()) {
+            TechnologyParamVo vo = new TechnologyParamVo();
+            BeanUtils.copyProperties(item, vo);
+            if (DATE_PARAM_TYPE.equals(item.getParamType()) && StringUtils.isNotEmpty(item.getParamFormat())) {
+                vo.setParamFormat(toDisplayDatePattern(item.getParamFormat()));
+            }
+            records.add(vo);
+        }
+        resultPage.setRecords(records);
+        return resultPage;
+    }
+
+    /**
+     * 鏂板鍩虹鍙傛暟骞剁敓鎴愬敮涓�鍙傛暟缂栫爜銆�
+     */
+    @Override
+    public int addBaseParam(TechnologyParamDto baseParam) {
+        if (baseParam == null) {
+            throw new RuntimeException("鏂板鍙傛暟涓嶈兘涓虹┖");
+        }
+        checkBaseParam(baseParam);
+        baseParam.setParamCode(generateParamCode());
+        baseParam.setCreateUser(SecurityUtils.getUsername());
+        baseParam.setCreateTime(LocalDateTime.now());
+        if (baseParam.getIsRequired() == null) {
+            baseParam.setIsRequired((byte) 0);
+        }
+        return baseMapper.insert(baseParam);
+    }
+
+    /**
+     * 淇敼鍩虹鍙傛暟骞朵繚鐣欏師鏈夊弬鏁扮紪鐮併��
+     */
+    @Override
+    public int updateBaseParam(TechnologyParamDto baseParam) {
+        if (baseParam == null || baseParam.getId() == null) {
+            throw new RuntimeException("淇敼鍙傛暟ID涓嶈兘涓虹┖");
+        }
+        checkBaseParam(baseParam);
+        TechnologyParam current = baseMapper.selectById(baseParam.getId());
+        if (current == null) {
+            throw new RuntimeException("鍙傛暟涓嶅瓨鍦�");
+        }
+        if (StringUtils.isEmpty(baseParam.getParamCode())) {
+            baseParam.setParamCode(current.getParamCode());
+        }
+        baseParam.setUpdateUser(SecurityUtils.getUsername());
+        baseParam.setUpdateTime(LocalDateTime.now());
+        return baseMapper.updateById(baseParam);
+    }
+
+    /**
+     * 鍙傛暟瀹氫箟鍚堟硶鏍¢獙銆�
+     */
+    private void checkBaseParam(TechnologyParamDto baseParam) {
+        if (StringUtils.isEmpty(baseParam.getParamName())) {
+            throw new RuntimeException("鍙傛暟鍚嶇О涓嶈兘涓虹┖");
+        }
+        if (baseParam.getParamType() == null || !VALID_PARAM_TYPES.contains(Integer.valueOf(baseParam.getParamType()))) {
+            throw new RuntimeException("闈炴硶鍙傛暟绫诲瀷");
+        }
+
+        if (DATE_PARAM_TYPE.equals(baseParam.getParamType())) {
+            if (StringUtils.isEmpty(baseParam.getParamFormat())) {
+                throw new RuntimeException("鏃ユ湡绫诲瀷蹇呴』閰嶇疆鍙傛暟鏍煎紡(濡�: yyyy-MM-dd)");
+            }
+            try {
+                String standardPattern = normalizeDatePattern(baseParam.getParamFormat());
+                DateTimeFormatter.ofPattern(standardPattern);
+                baseParam.setParamFormat(standardPattern);
+            } catch (Exception e) {
+                throw new RuntimeException("鏃ユ湡鏍煎紡闈炴硶: " + baseParam.getParamFormat());
+            }
+        } else {
+            baseParam.setParamFormat(baseParam.getParamFormat());
+        }
+    }
+
+    /**
+     * 鐢熸垚鍙傛暟鍞竴缂栫爜锛屼緵宸ヨ壓鍙傛暟鍜岀敓浜ц鍗曞揩鐓у紩鐢ㄣ��
+     */
+    private String generateParamCode() {
+        LambdaQueryWrapper<TechnologyParam> wrapper = new LambdaQueryWrapper<>();
+        wrapper.select(TechnologyParam::getParamCode)
+                .likeRight(TechnologyParam::getParamCode, PARAM_CODE_PREFIX)
+                .orderByDesc(TechnologyParam::getParamCode)
+                .last("limit 1");
+
+        TechnologyParam last = baseMapper.selectOne(wrapper);
+        int nextNum = 1;
+        if (last != null && StringUtils.isNotEmpty(last.getParamCode())) {
+            try {
+                String numStr = last.getParamCode().replace(PARAM_CODE_PREFIX, "");
+                nextNum = Integer.parseInt(numStr) + 1;
+            } catch (Exception e) {
+                log.error("瑙f瀽 paramCode 寮傚父", e);
+            }
+        }
+        return PARAM_CODE_PREFIX + String.format("%04d", nextNum);
+    }
+
+    private String normalizeDatePattern(String pattern) {
+        return pattern.trim()
+                .replace('Y', 'y')
+                .replace('D', 'd')
+                .replace('S', 's');
+    }
+
+    private String toDisplayDatePattern(String pattern) {
+        return normalizeDatePattern(pattern);
+    }
+
+    /**
+     * 鎵归噺鍒犻櫎鍩虹鍙傛暟銆�
+     */
+    @Override
+    public int deleteBaseParamByIds(Long[] ids) {
+        if (ids == null || ids.length == 0) {
+            throw new RuntimeException("鍒犻櫎ID涓嶈兘涓虹┖");
+        }
+        return baseMapper.deleteBatchIds(Arrays.asList(ids));
+    }
 }

--
Gitblit v1.9.3