From 36d911c4155b90d06f68e92d54da82f805f910d2 Mon Sep 17 00:00:00 2001
From: lyh <925863403@qq.com>
Date: 星期四, 10 七月 2025 11:41:32 +0800
Subject: [PATCH] 台账导出

---
 lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/BaseFactoryServiceImpl.java |  128 ++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 128 insertions(+), 0 deletions(-)

diff --git a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/BaseFactoryServiceImpl.java b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/BaseFactoryServiceImpl.java
index c50d112..d28a83f 100644
--- a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/BaseFactoryServiceImpl.java
+++ b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/BaseFactoryServiceImpl.java
@@ -5,6 +5,7 @@
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.IdWorker;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import org.apache.commons.lang3.StringUtils;
 import org.jeecg.common.constant.CommonConstant;
 import org.jeecg.common.constant.FillRuleConstant;
@@ -102,7 +103,121 @@
         return Collections.emptyList();
     }
 
+    public BaseFactory searchCenterByKeyWord(String keyWord) {
+        if (StringUtils.isBlank(keyWord)) {
+            return null;
+        }
 
+        if (keyWord.contains("/")) {
+            return searchByHierarchy(keyWord);
+        } else {
+            return searchByCodeOrName(keyWord);
+        }
+    }
+
+    private BaseFactory searchByHierarchy(String path) {
+        String[] levels = path.split("/");
+        int depth = levels.length;
+
+        // 鏀寔澶氱鏍煎紡锛氫腑蹇�/宸ュ尯銆佷腑蹇�/宸ユ銆佷腑蹇�/宸ュ尯/宸ユ
+        if (depth < 2 || depth > 3) {
+            return null;
+        }
+
+        // 浠庡簳灞傚紑濮嬫煡璇細鏈�鍚庝竴绾у彲鑳芥槸宸ュ尯鎴栧伐娈�
+        String lastName = levels[depth - 1];
+        BaseFactory lastLevel = searchForLastLevel(lastName);
+        if (lastLevel == null) return null;
+
+        return validatePath(levels, lastLevel);
+    }
+
+    private BaseFactory validatePath(String[] levels, BaseFactory lastLevel) {
+        if (levels.length == 2) {
+            // 涓績/宸ュ尯 鎴� 涓績/宸ユ
+            BaseFactory center = findParentCenter(lastLevel);
+            if (center != null &&
+                    center.getFactoryName().equals(levels[0]) &&
+                    ("1").equals(center.getFactoryCategory())) {
+                return lastLevel;
+            }
+        } else {
+            // 涓績/宸ュ尯/宸ユ
+            if (!("3").equals(lastLevel.getFactoryCategory())) return null;
+
+            BaseFactory workArea = getById(lastLevel.getParentId());
+            if (workArea == null ||
+                    !("2").equals(workArea.getFactoryCategory())) return null;
+
+            BaseFactory center = getById(workArea.getParentId());
+            if (center == null ||
+                    !("1").equals(center.getFactoryCategory())) return null;
+
+            if (workArea.getFactoryName().equals(levels[1]) &&
+                    center.getFactoryName().equals(levels[0])) {
+                return lastLevel;
+            }
+        }
+        return null;
+    }
+
+    private BaseFactory searchForLastLevel(String name) {
+        // 鍏堝皾璇曟煡璇㈠伐娈碉紙绫诲埆3锛�
+        BaseFactory workshop = findFactory(name, 3, null);
+        if (workshop != null) return workshop;
+
+        // 濡傛灉娌℃湁鎵惧埌宸ユ锛屽皾璇曟煡璇㈠伐鍖猴紙绫诲埆2锛�
+        return findFactory(name, 2, null);
+    }
+
+    private BaseFactory findParentCenter(BaseFactory entity) {
+        if (("1").equals(entity.getFactoryCategory())) {
+            return entity; // 鏈韩灏辨槸涓績
+        }
+
+        BaseFactory parent = getById(entity.getParentId());
+        if (parent == null) return null;
+
+        if (("1").equals(parent.getFactoryCategory())) {
+            return parent; // 鐩存帴鐖剁骇鏄腑蹇�
+        }
+
+        // 濡傛灉鐖剁骇涓嶆槸涓績锛屽皾璇曟壘鐖剁骇鐨勭埗绾�
+        return getById(parent.getParentId());
+    }
+
+    private BaseFactory searchByCodeOrName(String keyword) {
+        // 浣跨敤鍒嗛〉鏂瑰紡鍏煎SQL Server
+        LambdaQueryWrapper<BaseFactory> query = new LambdaQueryWrapper<>();
+        query.and(q -> q.eq(BaseFactory::getFactoryName, keyword)
+                .or()
+                .like(BaseFactory::getFactoryCode, keyword));
+
+        // 浣跨敤鍒嗛〉鏌ヨ鑾峰彇绗竴鏉¤褰�
+        Page<BaseFactory> page = new Page<>(1, 1);
+        Page<BaseFactory> resultPage = baseMapper.selectPage(page, query);
+
+        return resultPage.getRecords().isEmpty() ? null : resultPage.getRecords().get(0);
+    }
+
+    private BaseFactory findFactory(String name, Integer category, String parentId) {
+        LambdaQueryWrapper<BaseFactory> query = new LambdaQueryWrapper<>();
+        query.eq(BaseFactory::getFactoryName, name);
+
+        if (category != null) query.eq(BaseFactory::getFactoryCategory, category);
+        if (parentId != null) query.eq(BaseFactory::getParentId, parentId);
+
+        // 浣跨敤鍒嗛〉鏂瑰紡鍏煎SQL Server
+        Page<BaseFactory> page = new Page<>(1, 1);
+        Page<BaseFactory> resultPage = baseMapper.selectPage(page, query);
+
+        return resultPage.getRecords().isEmpty() ? null : resultPage.getRecords().get(0);
+    }
+
+    private BaseFactory getById(String id) {
+        if (StringUtils.isBlank(id)) return null;
+        return baseMapper.selectById(id);
+    }
 
     /**
      * saveProductionData 瀵瑰簲 add 淇濆瓨鐢ㄦ埛鍦ㄩ〉闈㈡坊鍔犵殑鏂扮殑璁惧杞﹂棿绠$悊瀵硅薄鏁版嵁
@@ -234,4 +349,17 @@
             }
         }
     }
+
+    /**
+     * 閫氳繃orgCode缃崲涓績鍚嶇О
+     * @param orgCode
+     */
+    @Override
+    public String factoryDataNameByOrgCode(String orgCode){
+        BaseFactory baseFactory = baseMapper.selectOne(new LambdaQueryWrapper<BaseFactory>().eq(BaseFactory::getOrgCode, orgCode));
+        if (baseFactory != null) {
+            return baseFactory.getFactoryName();
+        }
+        return null;
+    }
 }

--
Gitblit v1.9.3