From 92eb695ac1254708feb6e740432fc5da9e1ad42b Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期三, 08 七月 2026 15:37:12 +0800
Subject: [PATCH] Merge branch 'dev_New_pro' into dev_山西_黎城康森商砼
---
src/main/java/com/ruoyi/mock/service/impl/DataCheckServiceImpl.java | 282 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 282 insertions(+), 0 deletions(-)
diff --git a/src/main/java/com/ruoyi/mock/service/impl/DataCheckServiceImpl.java b/src/main/java/com/ruoyi/mock/service/impl/DataCheckServiceImpl.java
new file mode 100644
index 0000000..0fc4718
--- /dev/null
+++ b/src/main/java/com/ruoyi/mock/service/impl/DataCheckServiceImpl.java
@@ -0,0 +1,282 @@
+package com.ruoyi.mock.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.ruoyi.approve.pojo.ApprovalTemplate;
+import com.ruoyi.approve.mapper.ApprovalTemplateMapper;
+import com.ruoyi.basic.mapper.CustomerMapper;
+import com.ruoyi.basic.mapper.ProductMapper;
+import com.ruoyi.basic.mapper.ProductModelMapper;
+import com.ruoyi.basic.mapper.SupplierManageMapper;
+import com.ruoyi.common.enums.TypeEnums;
+import com.ruoyi.mock.dto.DataCheckRequest;
+import com.ruoyi.mock.service.DataCheckService;
+import com.ruoyi.mock.vo.DataCheckResult;
+import com.ruoyi.mock.vo.DataCheckResult.CheckItem;
+import com.ruoyi.project.system.domain.SysUser;
+import com.ruoyi.project.system.mapper.SysUserMapper;
+import com.ruoyi.quality.mapper.QualityTestStandardBindingMapper;
+import com.ruoyi.quality.mapper.QualityTestStandardMapper;
+import com.ruoyi.technology.mapper.TechnologyBomMapper;
+import com.ruoyi.technology.mapper.TechnologyBomStructureMapper;
+import com.ruoyi.technology.mapper.TechnologyOperationMapper;
+import com.ruoyi.technology.mapper.TechnologyRoutingMapper;
+import com.ruoyi.technology.mapper.TechnologyRoutingOperationMapper;
+import com.ruoyi.technology.pojo.TechnologyBom;
+import com.ruoyi.technology.pojo.TechnologyBomStructure;
+import com.ruoyi.technology.pojo.TechnologyRouting;
+import com.ruoyi.technology.pojo.TechnologyRoutingOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+@Service
+@RequiredArgsConstructor
+public class DataCheckServiceImpl implements DataCheckService {
+
+ private final ProductMapper productMapper;
+ private final ProductModelMapper productModelMapper;
+ private final CustomerMapper customerMapper;
+ private final SupplierManageMapper supplierManageMapper;
+ private final ApprovalTemplateMapper approvalTemplateMapper;
+ private final QualityTestStandardMapper qualityTestStandardMapper;
+ private final QualityTestStandardBindingMapper qualityTestStandardBindingMapper;
+ private final TechnologyRoutingMapper technologyRoutingMapper;
+ private final TechnologyRoutingOperationMapper technologyRoutingOperationMapper;
+ private final TechnologyOperationMapper technologyOperationMapper;
+ private final TechnologyBomMapper technologyBomMapper;
+ private final TechnologyBomStructureMapper technologyBomStructureMapper;
+ private final SysUserMapper sysUserMapper;
+
+ @Override
+ public DataCheckResult check(DataCheckRequest request) {
+ List<String> modules = request.getModules();
+ if (modules == null) {
+ modules = List.of();
+ }
+
+ Map<String, CheckItem> itemMap = new LinkedHashMap<>();
+
+ if (!modules.isEmpty()) {
+ addProductCheck(itemMap);
+ addUserChecks(itemMap);
+ }
+
+ for (String module : modules) {
+ switch (module) {
+ case "sales" -> addSalesChecks(itemMap);
+ case "purchase" -> addPurchaseChecks(itemMap);
+ case "quality" -> addQualityChecks(itemMap);
+ case "production" -> addProductionChecks(itemMap);
+ }
+ }
+
+ List<CheckItem> items = new ArrayList<>(itemMap.values());
+
+ DataCheckResult result = new DataCheckResult();
+ result.setItems(items);
+ result.setTotalItems(items.size());
+ result.setPassedItems((int) items.stream().filter(CheckItem::isPassed).count());
+ return result;
+ }
+
+ private void addProductCheck(Map<String, CheckItem> itemMap) {
+ String key = "common:浜у搧鏁版嵁";
+ if (itemMap.containsKey(key)) {
+ return;
+ }
+ long count = productMapper.selectCount(null);
+ itemMap.put(key, buildItem("common", "浜у搧鏁版嵁", 1, (int) count,
+ "缂哄皯浜у搧鏁版嵁锛岃鍏堝湪銆愬熀纭�鏁版嵁-浜у搧绠$悊銆戜腑娣诲姞鑷冲皯1鏉′骇鍝�"));
+ }
+
+ private void addUserChecks(Map<String, CheckItem> itemMap) {
+ // 1. 绯荤粺鐢ㄦ埛
+ String userKey = "common:绯荤粺鐢ㄦ埛";
+ if (!itemMap.containsKey(userKey)) {
+ List<SysUser> users = sysUserMapper.selectUserListWithDetail();
+ itemMap.put(userKey, buildItem("common", "绯荤粺鐢ㄦ埛", 1, (int) users.size(),
+ "缂哄皯绯荤粺鐢ㄦ埛锛岃鍏堝湪銆愮郴缁熺鐞�-鐢ㄦ埛绠$悊銆戜腑娣诲姞鐢ㄦ埛"));
+ }
+
+ // 2. 鏈夎鑹茬殑鐢ㄦ埛
+ String userWithRoleKey = "common:鐢ㄦ埛瑙掕壊閰嶇疆";
+ if (!itemMap.containsKey(userWithRoleKey)) {
+ List<SysUser> users = sysUserMapper.selectUserListWithDetail();
+ long withRole = users.stream().filter(u -> u.getRoleNames() != null && !u.getRoleNames().isBlank()).count();
+ itemMap.put(userWithRoleKey, buildItem("common", "鐢ㄦ埛瑙掕壊閰嶇疆", 1, (int) withRole,
+ "娌℃湁鐢ㄦ埛鍒嗛厤瑙掕壊锛岃鍏堝湪銆愮郴缁熺鐞�-鐢ㄦ埛绠$悊銆戜腑涓虹敤鎴峰垎閰嶈鑹�"));
+ }
+
+ // 3. 鏈夐儴闂ㄧ殑鐢ㄦ埛
+ String userWithDeptKey = "common:鐢ㄦ埛閮ㄩ棬閰嶇疆";
+ if (!itemMap.containsKey(userWithDeptKey)) {
+ List<SysUser> users = sysUserMapper.selectUserListWithDetail();
+ long withDept = users.stream().filter(u -> u.getDeptNames() != null && !u.getDeptNames().isBlank()).count();
+ itemMap.put(userWithDeptKey, buildItem("common", "鐢ㄦ埛閮ㄩ棬閰嶇疆", 1, (int) withDept,
+ "娌℃湁鐢ㄦ埛鍒嗛厤閮ㄩ棬锛岃鍏堝湪銆愮郴缁熺鐞�-鐢ㄦ埛绠$悊銆戜腑涓虹敤鎴峰垎閰嶉儴闂�"));
+ }
+ }
+
+ private void addSalesChecks(Map<String, CheckItem> itemMap) {
+ String customerKey = "sales:瀹㈡埛鏁版嵁";
+ if (!itemMap.containsKey(customerKey)) {
+ long count = customerMapper.selectCount(null);
+ itemMap.put(customerKey, buildItem("sales", "瀹㈡埛鏁版嵁", 1, (int) count,
+ "缂哄皯瀹㈡埛鏁版嵁锛岃鍏堝湪銆愬熀纭�鏁版嵁-瀹㈡埛绠$悊銆戜腑娣诲姞鑷冲皯1鏉″鎴�"));
+ }
+
+ String quotationKey = "sales:鎶ヤ环瀹℃壒妯℃澘";
+ if (!itemMap.containsKey(quotationKey)) {
+ long count = approvalTemplateMapper.selectCount(
+ new LambdaQueryWrapper<ApprovalTemplate>()
+ .eq(ApprovalTemplate::getBusinessType, TypeEnums.QUOTATION_APPROVAL.getCode()));
+ itemMap.put(quotationKey, buildItem("sales", "鎶ヤ环瀹℃壒妯℃澘", 1, (int) count,
+ "缂哄皯鎶ヤ环瀹℃壒妯℃澘锛岃鍏堝湪銆愮郴缁熺鐞�-瀹℃壒妯℃澘銆戜腑鍒涘缓鎶ヤ环瀹℃壒妯℃澘"));
+ }
+
+ String shippingKey = "sales:鍙戣揣瀹℃壒妯℃澘";
+ if (!itemMap.containsKey(shippingKey)) {
+ long count = approvalTemplateMapper.selectCount(
+ new LambdaQueryWrapper<ApprovalTemplate>()
+ .eq(ApprovalTemplate::getBusinessType, TypeEnums.SHIPPING_APPROVAL.getCode()));
+ itemMap.put(shippingKey, buildItem("sales", "鍙戣揣瀹℃壒妯℃澘", 1, (int) count,
+ "缂哄皯鍙戣揣瀹℃壒妯℃澘锛岃鍏堝湪銆愮郴缁熺鐞�-瀹℃壒妯℃澘銆戜腑鍒涘缓鍙戣揣瀹℃壒妯℃澘"));
+ }
+ }
+
+ private void addPurchaseChecks(Map<String, CheckItem> itemMap) {
+ String supplierKey = "purchase:渚涘簲鍟嗘暟鎹�";
+ if (!itemMap.containsKey(supplierKey)) {
+ long count = supplierManageMapper.selectCount(null);
+ itemMap.put(supplierKey, buildItem("purchase", "渚涘簲鍟嗘暟鎹�", 1, (int) count,
+ "缂哄皯渚涘簲鍟嗘暟鎹紝璇峰厛鍦ㄣ�愬熀纭�鏁版嵁-渚涘簲鍟嗙鐞嗐�戜腑娣诲姞鑷冲皯1鏉′緵搴斿晢"));
+ }
+
+ String tplKey = "purchase:閲囪喘瀹℃壒妯℃澘";
+ if (!itemMap.containsKey(tplKey)) {
+ long count = approvalTemplateMapper.selectCount(
+ new LambdaQueryWrapper<ApprovalTemplate>()
+ .eq(ApprovalTemplate::getBusinessType, TypeEnums.PURCHASE_APPROVAL.getCode()));
+ itemMap.put(tplKey, buildItem("purchase", "閲囪喘瀹℃壒妯℃澘", 1, (int) count,
+ "缂哄皯閲囪喘瀹℃壒妯℃澘锛岃鍏堝湪銆愮郴缁熺鐞�-瀹℃壒妯℃澘銆戜腑鍒涘缓閲囪喘瀹℃壒妯℃澘"));
+ }
+ }
+
+ private void addQualityChecks(Map<String, CheckItem> itemMap) {
+ String standardKey = "quality:妫�娴嬫爣鍑�";
+ if (!itemMap.containsKey(standardKey)) {
+ long count = qualityTestStandardMapper.selectCount(null);
+ itemMap.put(standardKey, buildItem("quality", "妫�娴嬫爣鍑�", 1, (int) count,
+ "缂哄皯妫�娴嬫爣鍑嗭紝璇峰厛鍦ㄣ�愯川閲忕鐞�-妫�娴嬫爣鍑嗐�戜腑鍒涘缓妫�娴嬫爣鍑�"));
+ }
+
+ String bindingKey = "quality:鎸囨爣缁戝畾";
+ if (!itemMap.containsKey(bindingKey)) {
+ long count = qualityTestStandardBindingMapper.selectCount(null);
+ itemMap.put(bindingKey, buildItem("quality", "鎸囨爣缁戝畾", 1, (int) count,
+ "缂哄皯鎸囨爣缁戝畾锛岃鍏堝湪銆愯川閲忕鐞�-妫�娴嬫爣鍑嗙粦瀹氥�戜腑灏嗘娴嬫爣鍑嗕笌浜у搧缁戝畾"));
+ }
+ }
+
+ private void addProductionChecks(Map<String, CheckItem> itemMap) {
+ // 1. 浜у搧瑙勬牸
+ String modelKey = "production:浜у搧瑙勬牸";
+ if (!itemMap.containsKey(modelKey)) {
+ long count = productModelMapper.selectCount(null);
+ itemMap.put(modelKey, buildItem("production", "浜у搧瑙勬牸", 1, (int) count,
+ "缂哄皯浜у搧瑙勬牸锛岃鍏堝湪銆愬熀纭�鏁版嵁-浜у搧绠$悊銆戜腑涓轰骇鍝佹坊鍔犺鏍煎瀷鍙�"));
+ }
+
+ // 2. 宸ュ簭
+ String operationKey = "production:宸ュ簭";
+ if (!itemMap.containsKey(operationKey)) {
+ long count = technologyOperationMapper.selectCount(null);
+ itemMap.put(operationKey, buildItem("production", "宸ュ簭", 1, (int) count,
+ "缂哄皯宸ュ簭锛岃鍏堝湪銆愬伐鑹鸿璁�-宸ュ簭绠$悊銆戜腑鍒涘缓宸ュ簭"));
+ }
+
+ // 3. BOM
+ String bomKey = "production:BOM";
+ if (!itemMap.containsKey(bomKey)) {
+ long count = technologyBomMapper.selectCount(null);
+ itemMap.put(bomKey, buildItem("production", "BOM", 1, (int) count,
+ "缂哄皯BOM锛岃鍏堝湪銆愬伐鑹鸿璁�-BOM绠$悊銆戜腑鍒涘缓BOM"));
+ }
+
+ // 4. BOM浜у搧缁撴瀯
+ String bomStructureKey = "production:BOM浜у搧缁撴瀯";
+ if (!itemMap.containsKey(bomStructureKey)) {
+ long count = technologyBomStructureMapper.selectCount(null);
+ itemMap.put(bomStructureKey, buildItem("production", "BOM浜у搧缁撴瀯", 1, (int) count,
+ "缂哄皯BOM浜у搧缁撴瀯锛岃鍏堝湪銆愬伐鑹鸿璁�-BOM绠$悊銆戜腑涓築OM娣诲姞浜у搧缁撴瀯鑺傜偣"));
+ }
+
+ // 5. 宸ヨ壓璺嚎
+ String routingKey = "production:宸ヨ壓璺嚎";
+ if (!itemMap.containsKey(routingKey)) {
+ long count = technologyRoutingMapper.selectCount(null);
+ itemMap.put(routingKey, buildItem("production", "宸ヨ壓璺嚎", 1, (int) count,
+ "缂哄皯宸ヨ壓璺嚎锛岃鍏堝湪銆愬伐鑹鸿璁�-宸ヨ壓璺嚎銆戜腑鍒涘缓宸ヨ壓璺嚎"));
+ }
+
+ // 6. 宸ヨ壓璺嚎宸ュ簭
+ String routingOpKey = "production:宸ヨ壓璺嚎宸ュ簭";
+ if (!itemMap.containsKey(routingOpKey)) {
+ long count = technologyRoutingOperationMapper.selectCount(null);
+ itemMap.put(routingOpKey, buildItem("production", "宸ヨ壓璺嚎宸ュ簭", 1, (int) count,
+ "缂哄皯宸ヨ壓璺嚎宸ュ簭锛岃鍏堝湪銆愬伐鑹鸿璁�-宸ヨ壓璺嚎銆戜腑涓哄伐鑹鸿矾绾挎坊鍔犲伐搴�"));
+ }
+
+ // 7. 鍏宠仈鎬ф娴嬶細鏈変骇鍝佽鏍间絾鏃犲伐鑹鸿矾绾跨殑
+ String linkageKey = "production:浜у搧-宸ヨ壓璺嚎鍏宠仈";
+ if (!itemMap.containsKey(linkageKey)) {
+ long modelCount = productModelMapper.selectCount(null);
+ long routedCount = technologyRoutingMapper.selectCount(
+ new LambdaQueryWrapper<TechnologyRouting>()
+ .isNotNull(TechnologyRouting::getProductModelId)
+ .gt(TechnologyRouting::getProductModelId, 0));
+ itemMap.put(linkageKey, buildItem("production", "浜у搧-宸ヨ壓璺嚎鍏宠仈",
+ (int) Math.min(modelCount, 1), (int) routedCount,
+ "閮ㄥ垎浜у搧瑙勬牸鏈叧鑱斿伐鑹鸿矾绾匡紝璇峰厛鍦ㄣ�愬伐鑹鸿璁�-宸ヨ壓璺嚎銆戜腑涓轰骇鍝佽鏍煎垱寤哄伐鑹鸿矾绾�"));
+ }
+
+ // 8. 鍏宠仈鎬ф娴嬶細鏈夊伐鑹鸿矾绾夸絾鏃犲伐搴忕殑
+ String routingOpLinkKey = "production:宸ヨ壓璺嚎-宸ュ簭鍏宠仈";
+ if (!itemMap.containsKey(routingOpLinkKey)) {
+ long routingCount = technologyRoutingMapper.selectCount(null);
+ long routedOpCount = technologyRoutingOperationMapper.selectCount(
+ new LambdaQueryWrapper<TechnologyRoutingOperation>()
+ .gt(TechnologyRoutingOperation::getTechnologyRoutingId, 0));
+ itemMap.put(routingOpLinkKey, buildItem("production", "宸ヨ壓璺嚎-宸ュ簭鍏宠仈",
+ (int) Math.min(routingCount, 1), (int) routedOpCount,
+ "閮ㄥ垎宸ヨ壓璺嚎鏈坊鍔犲伐搴忥紝璇峰厛鍦ㄣ�愬伐鑹鸿璁�-宸ヨ壓璺嚎銆戜腑涓哄伐鑹鸿矾绾挎坊鍔犲伐搴�"));
+ }
+
+ // 9. 鍏宠仈鎬ф娴嬶細鏈塀OM浣嗘棤浜у搧缁撴瀯鐨�
+ String bomStructureLinkKey = "production:BOM-浜у搧缁撴瀯鍏宠仈";
+ if (!itemMap.containsKey(bomStructureLinkKey)) {
+ long bomCount = technologyBomMapper.selectCount(null);
+ long structureCount = technologyBomStructureMapper.selectCount(
+ new LambdaQueryWrapper<TechnologyBomStructure>()
+ .gt(TechnologyBomStructure::getBomId, 0));
+ itemMap.put(bomStructureLinkKey, buildItem("production", "BOM-浜у搧缁撴瀯鍏宠仈",
+ (int) Math.min(bomCount, 1), (int) structureCount,
+ "閮ㄥ垎BOM鏈坊鍔犱骇鍝佺粨鏋勶紝璇峰厛鍦ㄣ�愬伐鑹鸿璁�-BOM绠$悊銆戜腑涓築OM娣诲姞浜у搧缁撴瀯鑺傜偣"));
+ }
+ }
+
+ private CheckItem buildItem(String module, String itemName, int minRequired, int currentCount, String failMessage) {
+ CheckItem item = new CheckItem();
+ item.setModule(module);
+ item.setItemName(itemName);
+ item.setMinRequired(minRequired);
+ item.setCurrentCount(currentCount);
+ item.setPassed(currentCount >= minRequired);
+ item.setMessage(item.isPassed() ? "閫氳繃" : failMessage);
+ return item;
+ }
+}
--
Gitblit v1.9.3