| ¶Ô±ÈÐÂÎļþ |
| | |
| | | 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管çãä¸ä¸ºBOMæ·»å 产åç»æèç¹")); |
| | | } |
| | | |
| | | // 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. å
³èæ§æ£æµï¼æBOM使 产åç»æç |
| | | 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管çãä¸ä¸ºBOMæ·»å 产åç»æèç¹")); |
| | | } |
| | | } |
| | | |
| | | 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; |
| | | } |
| | | } |