| 9 天以前 | gongchunyi | ![]() |
| 7 天以前 | gongchunyi | ![]() |
| 7 天以前 | gongchunyi | ![]() |
| 8 天以前 | yuan | ![]() |
| 2026-09-28 | gongchunyi | ![]() |
| 2026-09-23 | gongchunyi | ![]() |
| 2026-09-23 | gongchunyi | ![]() |
| src/main/java/com/ruoyi/basic/service/impl/CustomerServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/ruoyi/basic/service/impl/SupplierServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/ruoyi/common/utils/AmountUtils.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/ruoyi/production/service/impl/ProductionOrderServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/ruoyi/production/service/impl/ProductionPlanServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/ruoyi/technology/service/impl/TechnologyRoutingServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/resources/application-gzdz.yml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/main/java/com/ruoyi/basic/service/impl/CustomerServiceImpl.java
@@ -398,12 +398,15 @@ } for (CustomerTransactionsVo vo : records) { BigDecimal outboundAmount = shippedAmountMap.getOrDefault(vo.getCustomerId(), BigDecimal.ZERO); vo.setShippedAmount(outboundAmount); BigDecimal contractAmounts = vo.getContractAmounts() == null ? BigDecimal.ZERO : vo.getContractAmounts(); BigDecimal unshippedAmount = contractAmounts.subtract(outboundAmount); BigDecimal contractAmounts = AmountUtils.scaleMoney(vo.getContractAmounts()); // å·²åºåºé颿åï¼2ä½å°æ°ï¼å¤çï¼é¿å æå«ç¨å价累计åºåºéé¢äº§ç误差导è´å ¨é¨åè´§å仿æªåºåºé¶å¤´ BigDecimal shippedAmount = AmountUtils.scaleMoney(outboundAmount); BigDecimal unshippedAmount = contractAmounts.subtract(shippedAmount); if (unshippedAmount.compareTo(BigDecimal.ZERO) < 0) { unshippedAmount = BigDecimal.ZERO; } vo.setContractAmounts(contractAmounts); vo.setShippedAmount(shippedAmount); vo.setUnshippedAmount(unshippedAmount); AmountUtils.normalizeCustomerTransaction(vo); } @@ -426,12 +429,15 @@ } for (CustomerTransactionsDetailsVo vo : records) { BigDecimal outboundAmount = shippedAmountMap.getOrDefault(vo.getSalesLedgerId(), BigDecimal.ZERO); vo.setShippedAmount(outboundAmount); BigDecimal contractAmount = vo.getContractAmount() == null ? BigDecimal.ZERO : vo.getContractAmount(); BigDecimal unshippedAmount = contractAmount.subtract(outboundAmount); BigDecimal contractAmount = AmountUtils.scaleMoney(vo.getContractAmount()); // å·²åºåºé颿åï¼2ä½å°æ°ï¼å¤çï¼é¿å æå«ç¨å价累计åºåºéé¢äº§ç误差导è´å ¨é¨åè´§å仿æªåºåºé¶å¤´ BigDecimal shippedAmount = AmountUtils.scaleMoney(outboundAmount); BigDecimal unshippedAmount = contractAmount.subtract(shippedAmount); if (unshippedAmount.compareTo(BigDecimal.ZERO) < 0) { unshippedAmount = BigDecimal.ZERO; } vo.setContractAmount(contractAmount); vo.setShippedAmount(shippedAmount); vo.setUnshippedAmount(unshippedAmount); AmountUtils.normalizeCustomerTransactionDetail(vo); } src/main/java/com/ruoyi/basic/service/impl/SupplierServiceImpl.java
@@ -226,11 +226,9 @@ List<StockInRecord> currentDirectRecords = directInboundRecords.stream().filter(s -> s.getRecordId().equals(ledgerId)).toList(); for (StockInRecord sir : currentDirectRecords) { List<SalesLedgerProduct> currentProducts = salesLedgerProducts.stream().filter(s -> s.getSalesLedgerId().equals(ledgerId)).toList(); for (SalesLedgerProduct slp : currentProducts) { if (sir.getStockInNum() != null && slp.getTaxInclusiveUnitPrice() != null) { shippedAmount = shippedAmount.add(sir.getStockInNum().multiply(slp.getTaxInclusiveUnitPrice())); } BigDecimal unitPrice = getPurchaseInboundUnitPrice(salesLedgerProducts, ledgerId, sir); if (sir.getStockInNum() != null && unitPrice != null) { shippedAmount = shippedAmount.add(sir.getStockInNum().multiply(unitPrice)); } } @@ -323,11 +321,9 @@ List<StockInRecord> currentDirectRecords = directInboundRecords.stream().filter(s -> s.getRecordId().equals(vo.getPurchaseLedgerId())).toList(); for (StockInRecord sir : currentDirectRecords) { List<SalesLedgerProduct> currentProducts = salesLedgerProducts.stream().filter(s -> s.getSalesLedgerId().equals(vo.getPurchaseLedgerId())).toList(); for (SalesLedgerProduct slp : currentProducts) { if (sir.getStockInNum() != null && slp.getTaxInclusiveUnitPrice() != null) { shippedAmount = shippedAmount.add(sir.getStockInNum().multiply(slp.getTaxInclusiveUnitPrice())); } BigDecimal unitPrice = getPurchaseInboundUnitPrice(salesLedgerProducts, vo.getPurchaseLedgerId(), sir); if (sir.getStockInNum() != null && unitPrice != null) { shippedAmount = shippedAmount.add(sir.getStockInNum().multiply(unitPrice)); } } @@ -373,4 +369,29 @@ .min(BigDecimal::compareTo) .orElse(null); } /** * ç´æ¥å ¥åºè®°å½ï¼7ï¼çå«ç¨åä»·ï¼æ¹æ¬¡å·æ ¼å¼ä¸ºâéè´ååå·-éè´äº§åè¡IDâï¼æå¯¹åºäº§åè¡åä»· */ private BigDecimal getPurchaseInboundUnitPrice(List<SalesLedgerProduct> allSlp, Long salesLedgerId, StockInRecord record) { String batchNo = record.getBatchNo(); int separatorIndex = batchNo == null ? -1 : batchNo.lastIndexOf('-'); if (separatorIndex > -1) { try { Long productId = Long.valueOf(batchNo.substring(separatorIndex + 1)); BigDecimal unitPrice = allSlp.stream() .filter(s -> s.getId().equals(productId)) .map(SalesLedgerProduct::getTaxInclusiveUnitPrice) .filter(java.util.Objects::nonNull) .findFirst() .orElse(null); if (unitPrice != null) { return unitPrice; } } catch (NumberFormatException ignored) { // æ¹æ¬¡å·ä¸ç¬¦åçº¦å®æ ¼å¼ï¼åéæäº§åè§æ ¼å¹é } } return getMinTaxInclusiveUnitPrice(allSlp, salesLedgerId, record.getProductModelId()); } } src/main/java/com/ruoyi/common/utils/AmountUtils.java
@@ -13,12 +13,15 @@ import java.util.List; /** * éé¢ç²¾åº¦å·¥å ·ï¼ç»ä¸ä¿ç 6 ä½å°æ° * éé¢ç²¾åº¦å·¥å ·ï¼é»è®¤ç»ä¸ä¿ç 6 ä½å°æ°ï¼éé¢ï¼å ï¼ä¿ç 2 ä½å°æ° */ public final class AmountUtils { public static final int AMOUNT_SCALE = 6; public static final RoundingMode AMOUNT_ROUNDING = RoundingMode.HALF_UP; /** éé¢ï¼å ï¼ä¿çå°æ°ä½æ°ï¼åï¼ */ public static final int MONEY_SCALE = 2; private AmountUtils() { } @@ -28,6 +31,17 @@ return BigDecimal.ZERO.setScale(AMOUNT_SCALE, AMOUNT_ROUNDING); } return value.setScale(AMOUNT_SCALE, AMOUNT_ROUNDING); } /** * éé¢ï¼å ï¼ç²¾åº¦å¤çï¼åèäºå ¥ä¿ç 2 ä½å°æ°ï¼ * é¿å æå«ç¨å价累计åºåºé颿¶äº§ç误差ï¼å ¨é¨åè´§å仿¾ç¤ºæªåºåºé¶å¤´ */ public static BigDecimal scaleMoney(BigDecimal value) { if (value == null) { return BigDecimal.ZERO.setScale(MONEY_SCALE, AMOUNT_ROUNDING); } return value.setScale(MONEY_SCALE, AMOUNT_ROUNDING); } public static BigDecimal calcTaxExclusiveTotalPrice(BigDecimal taxInclusiveTotalPrice, BigDecimal taxRate) { @@ -92,18 +106,18 @@ if (vo == null) { return; } vo.setContractAmounts(scaleAmount(vo.getContractAmounts())); vo.setShippedAmount(scaleAmount(vo.getShippedAmount())); vo.setUnshippedAmount(scaleAmount(vo.getUnshippedAmount())); vo.setContractAmounts(scaleMoney(vo.getContractAmounts())); vo.setShippedAmount(scaleMoney(vo.getShippedAmount())); vo.setUnshippedAmount(scaleMoney(vo.getUnshippedAmount())); } public static void normalizeCustomerTransactionDetail(CustomerTransactionsDetailsVo vo) { if (vo == null) { return; } vo.setContractAmount(scaleAmount(vo.getContractAmount())); vo.setShippedAmount(scaleAmount(vo.getShippedAmount())); vo.setUnshippedAmount(scaleAmount(vo.getUnshippedAmount())); vo.setContractAmount(scaleMoney(vo.getContractAmount())); vo.setShippedAmount(scaleMoney(vo.getShippedAmount())); vo.setUnshippedAmount(scaleMoney(vo.getUnshippedAmount())); } public static void normalizeProcurementBusinessSummary(ProcurementBusinessSummaryDto dto) { src/main/java/com/ruoyi/production/service/impl/ProductionOrderServiceImpl.java
@@ -845,8 +845,17 @@ // éåå¤çæ°æ®å¹¶ç»è£ ç»æ : workOrderPage.getRecords().stream() .filter(Objects::nonNull) .sorted(Comparator.comparing(ProductionOperationTaskVo::getId, Comparator.nullsLast(Comparator.naturalOrder()))) .toList(); if (!workOrderList.isEmpty()) { // å·¥åºè¿åº¦éè¦æå·¥èºè·¯çº¿å·¥åºé¡ºåºï¼drag_sort ååºï¼ä»å·¦å°å³å±ç¤ºï¼ä»»å¡ id ä» ä½ä¸ºå åºæåº Map<Long, Integer> routingOperationDragSortMap = loadRoutingOperationDragSortMap(workOrderList); Comparator<ProductionOperationTaskVo> workOrderComparator = Comparator .comparing((ProductionOperationTaskVo task) -> routingOperationDragSortMap.get(task.getProductionOrderRoutingOperationId()), Comparator.nullsLast(Comparator.<Integer>naturalOrder())) .thenComparing(ProductionOperationTaskVo::getId, Comparator.nullsLast(Comparator.<Long>naturalOrder())); workOrderList = workOrderList.stream().sorted(workOrderComparator).toList(); } if (workOrderList.isEmpty()) { detailVo.setWorkOrderList(Collections.emptyList()); return detailVo; @@ -995,6 +1004,23 @@ return detailVo; } /** * æ¥è¯¢å·¥å对åºå·¥èºè·¯çº¿å·¥åºçæå¨æåºï¼ç¨äºæå·¥åºå å顺åºå±ç¤ºå·¥åºè¿åº¦ */ private Map<Long, Integer> loadRoutingOperationDragSortMap(List<ProductionOperationTaskVo> workOrderList) { Set<Long> routingOperationIds = workOrderList.stream() .map(ProductionOperationTaskVo::getProductionOrderRoutingOperationId) .filter(Objects::nonNull) .collect(Collectors.toSet()); if (routingOperationIds.isEmpty()) { return Collections.emptyMap(); } return productionOrderRoutingOperationMapper.selectBatchIds(routingOperationIds).stream() .filter(Objects::nonNull) .filter(operation -> operation.getId() != null && operation.getDragSort() != null) .collect(Collectors.toMap(ProductionOrderRoutingOperation::getId, ProductionOrderRoutingOperation::getDragSort, (a, b) -> a)); } private Long resolveProductionOrderId(ProductionOrderDto dto) { // ä»å ¥åä¸è§£æç产订åIDå¹¶æ ¡éª if (dto == null) { src/main/java/com/ruoyi/production/service/impl/ProductionPlanServiceImpl.java
@@ -123,9 +123,9 @@ if (assignedQuantity == null || assignedQuantity.compareTo(BigDecimal.ZERO) <= 0) { throw new ServiceException("ä¸å失败ï¼ä¸åæ°éå¿ é¡»å¤§äº0"); } if (assignedQuantity.compareTo(totalRequiredQuantity) > 0) { throw new ServiceException("ä¸å失败ï¼ä¸åæ°éä¸è½å¤§äºè®¡åå©ä½éæ±æ»é"); } // if (assignedQuantity.compareTo(totalRequiredQuantity) > 0) { // throw new ServiceException("ä¸å失败ï¼ä¸åæ°éä¸è½å¤§äºè®¡åå©ä½éæ±æ»é"); // } // æè®¡å顺åºåæä¸åæ°éï¼æ¶éå®é åä¸ä¸åç计å ID BigDecimal remainingForOrderBind = assignedQuantity; src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
@@ -592,9 +592,9 @@ salesLedgerProduct.setApproveStatus(0); // æ¯å¦è´¨æ£å¤æ salesLedgerProduct.setIsChecked(salesLedgerProductImportDto.getIsChecked() == 1); if(salesLedgerProductImportDto.getIsChecked() == 1){ addQualityInspect(salesLedger, salesLedgerProduct); } //if(salesLedgerProductImportDto.getIsChecked() == 1){ // addQualityInspect(salesLedger, salesLedgerProduct); //} salesLedgerProductMapper.insert(salesLedgerProduct); } // éè´å®¡æ ¸ src/main/java/com/ruoyi/technology/service/impl/TechnologyRoutingServiceImpl.java
@@ -20,10 +20,14 @@ import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Comparator; import java.util.HashMap; import java.util.HashSet; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Set; import java.util.stream.Collectors; @Service @@ -123,32 +127,59 @@ if (technologyRouting.getBomId() == null) { return; } List<TechnologyBomStructure> bomStructures = technologyBomStructureMapper.selectList( Wrappers.<TechnologyBomStructure>lambdaQuery() .eq(TechnologyBomStructure::getBomId, technologyRouting.getBomId()) .isNotNull(TechnologyBomStructure::getOperationId) .orderByDesc(TechnologyBomStructure::getId) .orderByAsc(TechnologyBomStructure::getId) ); if (bomStructures.isEmpty()) { throw new ServiceException("bom产åç»æä¸ºç©ºï¼"); } // åä¸ä¸ª BOM ä¸å¯è½éå¤å¼ç¨ç¸åå·¥åºï¼æç §ä¸ä¸å±çç¶èç¹çäº§åæ¯å¦ç¸ååå·¥åºæ¯å¦ç¸å Map<Long, TechnologyBomStructure> structureById = new HashMap<>(); Map<Long, List<TechnologyBomStructure>> childrenByParentId = new LinkedHashMap<>(); List<TechnologyBomStructure> rootList = new ArrayList<>(); for (TechnologyBomStructure bomStructure : bomStructures) { if (bomStructure != null && bomStructure.getId() != null) { if (bomStructure == null) { continue; } if (bomStructure.getId() != null) { structureById.put(bomStructure.getId(), bomStructure); } if (bomStructure.getParentId() == null || bomStructure.getParentId() == 0L) { rootList.add(bomStructure); } else { childrenByParentId.computeIfAbsent(bomStructure.getParentId(), key -> new ArrayList<>()).add(bomStructure); } } Map<String, TechnologyBomStructure> uniqueOperationMap = new LinkedHashMap<>(); for (TechnologyBomStructure bomStructure : bomStructures) { Long outputProductModelId = resolveOutputProductModelId(bomStructure, structureById, technologyRouting.getProductModelId()); uniqueOperationMap.putIfAbsent(buildBomOperationDedupKey(bomStructure, outputProductModelId), bomStructure); // ååºéåBOM List<TechnologyBomStructure> orderedOperationNodes = new ArrayList<>(); Set<Long> visitingIds = new HashSet<>(); for (TechnologyBomStructure rootNode : rootList) { collectOperationNodePostOrder(rootNode, childrenByParentId, orderedOperationNodes, visitingIds); } if (orderedOperationNodes.isEmpty()) { throw new ServiceException("bom产åç»ææªé ç½®æ¶èå·¥åºï¼"); } // åä¸å±çº§ï¼åä¸ç¶èç¹ï¼å ç¸åå·¥åºå并为ä¸éå·¥åºï¼ä¾å¦åå±çå¤ä¸ªåæ¥ä»¶åå¹¶æä¸éåæ¥ï¼ // åå¹¶åçä½ç½®åè¯¥å·¥åºæå䏿¬¡åºç°çä½ç½®ï¼ç¡®ä¿å ¶å ¨é¨è¾å ¥ç©æçå·¥åºé½å¨å®ä¹å Map<String, Integer> lastPositionByKey = new HashMap<>(); Map<String, TechnologyBomStructure> operationNodeByKey = new LinkedHashMap<>(); for (int i = 0; i < orderedOperationNodes.size(); i++) { TechnologyBomStructure bomStructure = orderedOperationNodes.get(i); String dedupKey = buildBomOperationDedupKey(bomStructure); lastPositionByKey.put(dedupKey, i); operationNodeByKey.putIfAbsent(dedupKey, bomStructure); } List<String> sortedDedupKeys = new ArrayList<>(operationNodeByKey.keySet()); sortedDedupKeys.sort(Comparator.comparingInt(lastPositionByKey::get)); int dragSort = 1; for (TechnologyBomStructure bomStructure : uniqueOperationMap.values()) { for (String dedupKey : sortedDedupKeys) { TechnologyBomStructure bomStructure = operationNodeByKey.get(dedupKey); TechnologyRoutingOperation routingOperation = new TechnologyRoutingOperation(); routingOperation.setTechnologyRoutingId(technologyRouting.getId()); routingOperation.setProductModelId(resolveOutputProductModelId(bomStructure, structureById, technologyRouting.getProductModelId())); @@ -163,42 +194,61 @@ } } private String buildBomOperationDedupKey(TechnologyBomStructure bomStructure, Long outputProductModelId) { Long operationId = bomStructure == null ? null : bomStructure.getOperationId(); Long parentId = bomStructure == null ? null : bomStructure.getParentId(); return operationId + "#" + outputProductModelId + "#" + parentId; /** * ååºéå BOM */ private void collectOperationNodePostOrder(TechnologyBomStructure node, Map<Long, List<TechnologyBomStructure>> childrenByParentId, List<TechnologyBomStructure> orderedOperationNodes, Set<Long> visitingIds) { if (node == null || node.getId() == null) { return; } if (!visitingIds.add(node.getId())) { return; } List<TechnologyBomStructure> children = childrenByParentId.get(node.getId()); if (children != null && !children.isEmpty()) { for (TechnologyBomStructure child : children) { collectOperationNodePostOrder(child, childrenByParentId, orderedOperationNodes, visitingIds); } } visitingIds.remove(node.getId()); if (node.getOperationId() != null) { orderedOperationNodes.add(node); } } /** * å»éé®ï¼åä¸ç¶èç¹ + ç¸åå·¥åºï¼åªå¨åä¸å±çº§å åå¹¶ï¼ä¸åå±çº§ãä¸å忝çç¸åå·¥åºä¸ä¼åå¹¶ï¼ã */ private String buildBomOperationDedupKey(TechnologyBomStructure bomStructure) { Long operationId = bomStructure == null ? null : bomStructure.getOperationId(); Long parentId = bomStructure == null ? null : bomStructure.getParentId(); return operationId + "#" + (parentId == null ? "root" : String.valueOf(parentId)); } /** * å·¥åºäº§åºäº§å = ç¶èç¹ç产åï¼æ¬è¡ç©æç±ç¶èç¹å±çº§çæ¶èå·¥åºæ¶èï¼äº§åºçæ¯ä¸ä¸å±äº§åï¼ * è䏿¯æ¬è¡ç©æèªèº«ï¼ï¼ä» å½ç¶èç¹ç¼ºå¤±æç¶èç¹æ²¡æäº§åæ¶ï¼æåéå°æ¬èç¹èªèº«äº§åãååéå°å·¥èºè·¯çº¿äº§åã */ private Long resolveOutputProductModelId(TechnologyBomStructure bomStructure, Map<Long, TechnologyBomStructure> structureById, Long routingProductModelId) { if (bomStructure == null) { return routingProductModelId; } if (hasChildren(bomStructure, structureById)) { return bomStructure.getProductModelId() != null ? bomStructure.getProductModelId() : routingProductModelId; } Long parentId = bomStructure.getParentId(); if (parentId == null) { return routingProductModelId != null ? routingProductModelId : bomStructure.getProductModelId(); if (parentId != null && parentId != 0L && structureById != null) { TechnologyBomStructure parent = structureById.get(parentId); if (parent != null && parent.getProductModelId() != null) { return parent.getProductModelId(); } } TechnologyBomStructure parent = structureById.get(parentId); if (parent != null && parent.getProductModelId() != null) { return parent.getProductModelId(); if (bomStructure.getProductModelId() != null) { return bomStructure.getProductModelId(); } return routingProductModelId != null ? routingProductModelId : bomStructure.getProductModelId(); } private boolean hasChildren(TechnologyBomStructure bomStructure, Map<Long, TechnologyBomStructure> structureById) { if (bomStructure == null || bomStructure.getId() == null || structureById == null) { return false; } return structureById.values().stream() .anyMatch(child -> child != null && java.util.Objects.equals(child.getParentId(), bomStructure.getId())); return routingProductModelId; } private void syncRoutingOperationParams(Long technologyRoutingOperationId, Long technologyOperationId) { src/main/resources/application-gzdz.yml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,269 @@ # 项ç®ç¸å ³é ç½® ruoyi: # åç§° name: RuoYi # çæ¬ version: 3.8.9 # çæå¹´ä»½ copyrightYear: 2025 # æä»¶è·¯å¾ 示ä¾ï¼ Windowsé ç½®D:/ruoyi/uploadPathï¼Linuxé ç½® /home/ruoyi/uploadPathï¼ profile: /data/javaWork/product-inventory-management/file # è·åipå°åå¼å ³ addressEnabled: false # éªè¯ç ç±»å math æ°åè®¡ç® char å符éªè¯ captchaType: math # åå审æ¹ç¼å·åç¼(é ç½®æä»¶åç¼å½å) approvalNumberPrefix: NEW # ä¸ªæ¨ Unipush é ç½® getui: appId: PfjyAAE0FK64FaO1w2CMb1 appKey: zTMb831OEL6J4GK1uE3Ob4 masterSecret: K1GFtsv42v61tXGnF7SGE5 domain: https://restapi.getui.cn/v2/ # 离线æ¨é使ç¨çå å/ç»ä»¶å intentComponent: uni.app.UNI099A590/io.dcloud.PandoraEntry # å¼åç¯å¢é ç½® server: # æå¡å¨çHTTP端å£ï¼é»è®¤ä¸º8080 port: 9002 servlet: # åºç¨ç访é®è·¯å¾ context-path: / tomcat: # tomcatçURIç¼ç uri-encoding: UTF-8 # è¿æ¥æ°æ»¡åçæéæ°ï¼é»è®¤ä¸º100 accept-count: 1000 max-swallow-size: -1 # -1 表示ä¸éå¶ max-http-form-post-size: -1 # POST 请æ±ä½ä¸éå¶ connection-timeout: 60000 # è¿æ¥è¶ æ¶æ¶é´(毫ç§) threads: # tomcatæå¤§çº¿ç¨æ°ï¼é»è®¤ä¸º200 max: 800 # Tomcatå¯å¨åå§åççº¿ç¨æ°ï¼é»è®¤å¼10 min-spare: 100 # æ¥å¿é ç½® logging: level: com.ruoyi: warn org.springframework: warn minio: endpoint: http://114.132.189.42/ port: 7019 secure: false accessKey: admin secretKey: 12345678 preview-expiry: 24 # é¢è§å°åé»è®¤24å°æ¶ default-bucket: uploadPath # ç¨æ·é ç½® user: password: # å¯ç æå¤§éè¯¯æ¬¡æ° maxRetryCount: 5 # å¯ç é宿¶é´ï¼é»è®¤10åéï¼ lockTime: 10 # Springé ç½® spring: datasource: type: com.alibaba.druid.pool.DruidDataSource driverClassName: com.mysql.cj.jdbc.Driver druid: # ä¸»åºæ°æ®æº master: url: jdbc:mysql://36.134.158.166:83/product-inventory-management-gzdz?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 username: root password: gzdz@123456.. # ä»åºæ°æ®æº slave: # 仿°æ®æºå¼å ³/é»è®¤å ³é enabled: false url: username: password: # åå§è¿æ¥æ° initialSize: 5 # æå°è¿æ¥æ± æ°é minIdle: 10 # æå¤§è¿æ¥æ± æ°é maxActive: 20 # é ç½®è·åè¿æ¥çå¾ è¶ æ¶çæ¶é´ maxWait: 60000 # é ç½®è¿æ¥è¶ æ¶æ¶é´ connectTimeout: 30000 # é ç½®ç½ç»è¶ æ¶æ¶é´ socketTimeout: 60000 # é ç½®é´éå¤ä¹ æè¿è¡ä¸æ¬¡æ£æµï¼æ£æµéè¦å ³éç空é²è¿æ¥ï¼å使¯æ¯«ç§ timeBetweenEvictionRunsMillis: 60000 # é ç½®ä¸ä¸ªè¿æ¥å¨æ± 䏿å°çåçæ¶é´ï¼å使¯æ¯«ç§ minEvictableIdleTimeMillis: 300000 # é ç½®ä¸ä¸ªè¿æ¥å¨æ± 䏿大çåçæ¶é´ï¼å使¯æ¯«ç§ maxEvictableIdleTimeMillis: 900000 # é ç½®æ£æµè¿æ¥æ¯å¦ææ validationQuery: SELECT 1 FROM DUAL testWhileIdle: true testOnBorrow: false testOnReturn: false webStatFilter: enabled: true statViewServlet: enabled: true # 设置ç½ååï¼ä¸å¡«åå 许ææè®¿é® allow: url-pattern: /druid/* # æ§å¶å°ç®¡çç¨æ·ååå¯ç login-username: ruoyi login-password: 123456 filter: stat: enabled: true # æ ¢SQLè®°å½ log-slow-sql: true slow-sql-millis: 1000 merge-sql: true wall: config: multi-statement-allow: true # èµæºä¿¡æ¯ messages: # å½é åèµæºæä»¶è·¯å¾ basename: i18n/messages # æä»¶ä¸ä¼ servlet: multipart: # å个æä»¶å¤§å° max-file-size: 1GB # 设置æ»ä¸ä¼ çæä»¶å¤§å° max-request-size: 2GB # æå¡æ¨¡å devtools: restart: # çé¨ç½²å¼å ³ enabled: false data: # redis é ç½® redis: # å°å # host: localhost host: 172.17.0.1 # 端å£ï¼é»è®¤ä¸º6379 port: 6379 # æ°æ®åºç´¢å¼ database: 0 # å¯ç # password: root2022! password: # è¿æ¥è¶ æ¶æ¶é´ timeout: 10s lettuce: pool: # è¿æ¥æ± ä¸çæå°ç©ºé²è¿æ¥ min-idle: 0 # è¿æ¥æ± ä¸çæå¤§ç©ºé²è¿æ¥ max-idle: 8 # è¿æ¥æ± çæå¤§æ°æ®åºè¿æ¥æ° max-active: 8 # #è¿æ¥æ± æå¤§é»å¡çå¾ æ¶é´ï¼ä½¿ç¨è´å¼è¡¨ç¤ºæ²¡æéå¶ï¼ max-wait: -1ms # Quartz宿¶ä»»å¡é ç½®ï¼æ°å¢é¨åï¼ quartz: job-store-type: jdbc # ä½¿ç¨æ°æ®åºåå¨ jdbc: initialize-schema: never # 馿¬¡è¿è¡æ¶èªå¨åå»ºè¡¨ç»æï¼æååæ¹ä¸ºnever schema: classpath:org/quartz/impl/jdbcjobstore/tables_mysql_innodb.sql # MySQLè¡¨ç»æèæ¬ properties: org: quartz: scheduler: instanceName: RuoYiScheduler instanceId: AUTO jobStore: class: org.quartz.impl.jdbcjobstore.JobStoreTX driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate # MySQLéé tablePrefix: qrtz_ # 表ååç¼ï¼ä¸èæ¬ä¸è´ isClustered: false # åèç¹æ¨¡å¼ï¼éç¾¤éæ¹ä¸ºtrueï¼ clusterCheckinInterval: 10000 txIsolationLevelSerializable: true threadPool: class: org.quartz.simpl.SimpleThreadPool threadCount: 10 # çº¿ç¨æ± å¤§å° threadPriority: 5 makeThreadsDaemons: true updateCheck: false # å ³éçæ¬æ£æ¥ # tokené ç½® token: # 令çèªå®ä¹æ è¯ header: Authorization # 令çå¯é¥ secret: xpAVjhCjQDaDB7mjPAzMDSbQWXNu2zYkTdDNUsPMS5Xx8QMmQVYN7n74eZrYJxDJ # ä»¤çæææï¼é»è®¤30åéï¼ expireTime: 450 # MyBatis Plusé ç½® mybatis-plus: # æç´¢æå®å å«å æ ¹æ®èªå·±çé¡¹ç®æ¥ typeAliasesPackage: com.ruoyi.**.pojo # é ç½®mapperçæ«æï¼æ¾å°ææçmapper.xmlæ å°æä»¶ mapperLocations: classpath*:mapper/**/*Mapper.xml # å è½½å ¨å±çé ç½®æä»¶ configLocation: classpath:mybatis/mybatis-config.xml global-config: enable-sql-runner: true db-config: id-type: auto # PageHelperå页æä»¶ pagehelper: helperDialect: mysql supportMethodsArguments: true params: count=countSql # Swaggeré ç½® swagger: # æ¯å¦å¼å¯swagger enabled: true # 请æ±åç¼ pathMapping: /dev-api # 鲿¢XSSæ»å» xss: # è¿æ»¤å¼å ³ enabled: true # æé¤é¾æ¥ï¼å¤ä¸ªç¨éå·åéï¼ excludes: /system/notice # å¹é 龿¥ urlPatterns: /system/*,/monitor/*,/tool/* # 代ç çæ gen: # ä½è author: ruoyi # é»è®¤çæå è·¯å¾ system éæ¹æèªå·±ç模ååç§° å¦ system monitor tool packageName: com.ruoyi.project.system # èªå¨å»é¤è¡¨åç¼ï¼é»è®¤æ¯true autoRemovePre: false # 表åç¼ï¼çæç±»åä¸ä¼å å«è¡¨åç¼ï¼å¤ä¸ªç¨éå·åéï¼ tablePrefix: sys_ # æ¯å¦å è®¸çææä»¶è¦çå°æ¬å°ï¼èªå®ä¹è·¯å¾ï¼ï¼é»è®¤ä¸å 许 allowOverwrite: false # æä»¶ä¸ä¼ é ç½® file: temp-dir: /data/javaWork/product-inventory-management/file/temp/uploads # 临æ¶ç®å½ åæå é¤ upload-dir: /data/javaWork/product-inventory-management/file/prod/uploads # æ£å¼ç®å½ åæå é¤ path: /data/javaWork/product-inventory-management/file/path/uploads # ä¸ä¼ ç®å½ urlPrefix: /prod-api/common # 龿¥åç¼ domain: http://36.134.158.166:81 # åååç¼ expired: 120 # è¿ææ¶é´(åä½:åé) useLimit: 10 # ä½¿ç¨æ¬¡æ° compress: true # æ¯å¦å缩 needCompressSize: 10MB # å缩éå¼ compressQuality: 0.5 # å缩质é(0.0-1.0) knowledge: one: D:\æ°ç大ç½ç´ ä¼ä¸äº§åä½ç³»è¯´æææ¡£.md