yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/business/CrmBusinessController.java
@@ -118,11 +118,11 @@ // æ¼æ¥äº§å项 List<CrmBusinessProductDO> businessProducts = businessService.getBusinessProductListByBusinessId(businessVO.getId()); Map<Long, MdmItemRespDTO> itemMap = mdmItemApi.getItemMap( convertSet(businessProducts, CrmBusinessProductDO::getProductId)); convertSet(businessProducts, CrmBusinessProductDO::getItemId)); businessVO.setProducts(BeanUtils.toBean(businessProducts, CrmBusinessRespVO.Product.class, businessProductVO -> MapUtils.findAndThen(itemMap, businessProductVO.getProductId(), item -> businessProductVO.setProductName(item.getName()) .setProductNo(item.getCode()).setProductUnit(item.getUnitMeasureId() != null ? item.getUnitMeasureId().intValue() : null)))); MapUtils.findAndThen(itemMap, businessProductVO.getItemId(), item -> businessProductVO.setItemName(item.getName()) .setItemCode(item.getCode()).setItemUnitId(item.getUnitMeasureId())))); return businessVO; } yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/business/vo/business/CrmBusinessRespVO.java
@@ -124,22 +124,22 @@ @Schema(description = "ç¼å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "888") private Long id; @Schema(description = "产åç¼å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "20529") private Long productId; @Schema(description = "产ååç§°", requiredMode = Schema.RequiredMode.REQUIRED, example = "æå") private String productName; @Schema(description = "äº§åæ¡ç ", requiredMode = Schema.RequiredMode.REQUIRED, example = "20529") private String productNo; @Schema(description = "产ååä½", requiredMode = Schema.RequiredMode.REQUIRED, example = "æå") private Integer productUnit; @Schema(description = "MDM ç©æç¼å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "20529") private Long itemId; @Schema(description = "ç©æåç§°", requiredMode = Schema.RequiredMode.REQUIRED, example = "æå") private String itemName; @Schema(description = "ç©æç¼ç ", requiredMode = Schema.RequiredMode.REQUIRED, example = "20529") private String itemCode; @Schema(description = "计éåä½ç¼å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") private Long itemUnitId; @Schema(description = "产ååä»·", requiredMode = Schema.RequiredMode.REQUIRED, example = "123.00") private BigDecimal productPrice; @Schema(description = "ç©æåä»·", requiredMode = Schema.RequiredMode.REQUIRED, example = "123.00") private BigDecimal itemPrice; @Schema(description = "åæºä»·æ ¼", requiredMode = Schema.RequiredMode.REQUIRED, example = "123.00") private BigDecimal businessPrice; @Schema(description = "äº§åæ°é", requiredMode = Schema.RequiredMode.REQUIRED, example = "8911") @Schema(description = "æ°é", requiredMode = Schema.RequiredMode.REQUIRED, example = "8911") private BigDecimal count; @Schema(description = "æ»è®¡ä»·æ ¼", requiredMode = Schema.RequiredMode.REQUIRED, example = "123.00") yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/business/vo/business/CrmBusinessSaveReqVO.java
@@ -74,21 +74,25 @@ @AllArgsConstructor public static class BusinessProduct { @Schema(description = "产åç¼å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "20529") @NotNull(message = "产åç¼å·ä¸è½ä¸ºç©º") private Long productId; @Schema(description = "MDM ç©æç¼å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "20529") @NotNull(message = "ç©æç¼å·ä¸è½ä¸ºç©º") private Long itemId; @Schema(description = "产ååä»·", requiredMode = Schema.RequiredMode.REQUIRED, example = "123.00") @NotNull(message = "产ååä»·ä¸è½ä¸ºç©º") private BigDecimal productPrice; @Schema(description = "计éåä½ç¼å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") @NotNull(message = "计éåä½ä¸è½ä¸ºç©º") private Long itemUnitId; @Schema(description = "ç©æåä»·", requiredMode = Schema.RequiredMode.REQUIRED, example = "123.00") @NotNull(message = "ç©æåä»·ä¸è½ä¸ºç©º") private BigDecimal itemPrice; @Schema(description = "åæºä»·æ ¼", requiredMode = Schema.RequiredMode.REQUIRED, example = "123.00") @NotNull(message = "åæºä»·æ ¼ä¸è½ä¸ºç©º") private BigDecimal businessPrice; @Schema(description = "äº§åæ°é", requiredMode = Schema.RequiredMode.REQUIRED, example = "8911") @NotNull(message = "äº§åæ°éä¸è½ä¸ºç©º") private Integer count; @Schema(description = "æ°é", requiredMode = Schema.RequiredMode.REQUIRED, example = "8911") @NotNull(message = "æ°éä¸è½ä¸ºç©º") private BigDecimal count; } yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/dal/dataobject/business/CrmBusinessProductDO.java
@@ -1,7 +1,6 @@ package cn.iocoder.yudao.module.crm.dal.dataobject.business; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; import cn.iocoder.yudao.module.crm.dal.dataobject.product.CrmProductDO; import com.baomidou.mybatisplus.annotation.KeySequence; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; @@ -38,17 +37,21 @@ */ private Long businessId; /** * 产åç¼å· * MDM ç©æç¼å· * * å ³è {@link CrmProductDO#getId()} * å ³è MdmItemRespDTO.id */ private Long productId; private Long itemId; /** * 产ååä»·ï¼åä½ï¼å * 计éåä½ç¼å· * * åä½ {@link CrmProductDO#getPrice()} * å ³è MdmUnitMeasureRespDTO.id */ private BigDecimal productPrice; private Long itemUnitId; /** * ç©æåä»·ï¼åä½ï¼å ï¼åä½ï¼ */ private BigDecimal itemPrice; /** * åæºä»·æ ¼, åä½ï¼å */ yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/business/CrmBusinessServiceImpl.java
@@ -217,7 +217,7 @@ private List<CrmBusinessProductDO> validateBusinessProducts(List<CrmBusinessSaveReqVO.BusinessProduct> list) { // 1. æ ¡éªç©æåå¨ Set<Long> itemIds = convertSet(list, CrmBusinessSaveReqVO.BusinessProduct::getProductId); Set<Long> itemIds = convertSet(list, CrmBusinessSaveReqVO.BusinessProduct::getItemId); Map<Long, MdmItemRespDTO> itemMap = mdmItemApi.getItemMap(itemIds); for (Long itemId : itemIds) { if (itemMap.get(itemId) == null) { yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/api/wms/WmsStockApiImpl.java
@@ -2,6 +2,11 @@ import cn.hutool.core.collection.CollUtil; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.module.mes.api.wms.dto.WmsPurchaseInboundReqDTO; import cn.iocoder.yudao.module.mes.api.wms.dto.WmsSalesOutboundReqDTO; import cn.iocoder.yudao.module.mes.api.wms.dto.WmsStockDetailRespDTO; import cn.iocoder.yudao.module.mes.api.wms.dto.WmsStockQueryReqDTO; import cn.iocoder.yudao.module.mes.api.wms.stock.WmsStockApi; import cn.iocoder.yudao.module.mes.controller.admin.wm.materialstock.vo.MesWmMaterialStockListReqVO; import cn.iocoder.yudao.module.mes.dal.dataobject.md.item.MesMdItemDO; import cn.iocoder.yudao.module.mes.dal.dataobject.wm.materialstock.MesWmMaterialStockDO; @@ -14,11 +19,6 @@ import cn.iocoder.yudao.module.mes.service.wm.transaction.MesWmTransactionService; import cn.iocoder.yudao.module.mes.service.wm.transaction.dto.MesWmTransactionSaveReqDTO; import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseService; import cn.iocoder.yudao.module.wms.api.dto.WmsPurchaseInboundReqDTO; import cn.iocoder.yudao.module.wms.api.dto.WmsSalesOutboundReqDTO; import cn.iocoder.yudao.module.wms.api.dto.WmsStockDetailRespDTO; import cn.iocoder.yudao.module.wms.api.dto.WmsStockQueryReqDTO; import cn.iocoder.yudao.module.wms.api.stock.WmsStockApi; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/api/wms/WmsTransactionApiImpl.java
@@ -2,10 +2,10 @@ import cn.hutool.core.collection.CollUtil; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.module.mes.api.wms.dto.WmsTransactionCreateReqDTO; import cn.iocoder.yudao.module.mes.api.wms.transaction.WmsTransactionApi; import cn.iocoder.yudao.module.mes.service.wm.transaction.MesWmTransactionService; import cn.iocoder.yudao.module.mes.service.wm.transaction.dto.MesWmTransactionSaveReqDTO; import cn.iocoder.yudao.module.wms.api.transaction.WmsTransactionApi; import cn.iocoder.yudao.module.wms.api.transaction.WmsTransactionCreateReqDTO; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/api/wms/dto/WmsPurchaseInboundReqDTO.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,85 @@ package cn.iocoder.yudao.module.mes.api.wms.dto; import lombok.Data; import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.List; /** * WMS éè´å ¥åºè¯·æ± DTO */ @Data public class WmsPurchaseInboundReqDTO { /** * ä¸å¡åæ®ID */ private Long bizId; /** * ä¸å¡åæ®ç¼ç */ private String bizCode; /** * ä¾åºåID */ private Long vendorId; /** * å ¥åºæ¶é´ */ private LocalDateTime receiptTime; /** * ç©ææç»å表 */ private List<Item> items; @Data public static class Item { /** * ä¸å¡è¡ID */ private Long bizLineId; /** * ç©æID */ private Long itemId; /** * ä»åºID */ private Long warehouseId; /** * åºä½ID */ private Long locationId; /** * åºåID */ private Long areaId; /** * æ¹æ¬¡ID */ private Long batchId; /** * æ¹æ¬¡ç¼ç */ private String batchCode; /** * æ°é */ private BigDecimal quantity; } } yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/api/wms/dto/WmsSalesOutboundReqDTO.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,80 @@ package cn.iocoder.yudao.module.mes.api.wms.dto; import lombok.Data; import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.List; /** * WMS éå®åºåºè¯·æ± DTO */ @Data public class WmsSalesOutboundReqDTO { /** * ä¸å¡åæ®ID */ private Long bizId; /** * ä¸å¡åæ®ç¼ç */ private String bizCode; /** * åºåºæ¶é´ */ private LocalDateTime outboundTime; /** * ç©ææç»å表 */ private List<Item> items; @Data public static class Item { /** * ä¸å¡è¡ID */ private Long bizLineId; /** * ç©æID */ private Long itemId; /** * ä»åºID */ private Long warehouseId; /** * åºä½ID */ private Long locationId; /** * åºåID */ private Long areaId; /** * æ¹æ¬¡ID */ private Long batchId; /** * æ¹æ¬¡ç¼ç */ private String batchCode; /** * æ°é */ private BigDecimal quantity; } } yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/api/wms/dto/WmsStockDetailRespDTO.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,79 @@ package cn.iocoder.yudao.module.mes.api.wms.dto; import lombok.Data; import java.math.BigDecimal; import java.time.LocalDateTime; /** * WMS åºåæç»ååº DTO */ @Data public class WmsStockDetailRespDTO { /** * ä¸»é® */ private Long id; /** * ç©æID */ private Long itemId; /** * ç©æç¼ç */ private String itemCode; /** * ç©æåç§° */ private String itemName; /** * ä»åºID */ private Long warehouseId; /** * ä»åºåç§° */ private String warehouseName; /** * åºä½ID */ private Long locationId; /** * åºåID */ private Long areaId; /** * æ¹æ¬¡ID */ private Long batchId; /** * æ¹æ¬¡ç¼ç */ private String batchCode; /** * ä¾åºåID */ private Long vendorId; /** * æ°é */ private BigDecimal quantity; /** * å建æ¶é´ */ private LocalDateTime createTime; } yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/api/wms/dto/WmsStockQueryReqDTO.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,41 @@ package cn.iocoder.yudao.module.mes.api.wms.dto; import lombok.Data; /** * WMS åºåæ¥è¯¢è¯·æ± DTO */ @Data public class WmsStockQueryReqDTO { /** * ç©æID */ private Long itemId; /** * ä»åºID */ private Long warehouseId; /** * åºä½ID */ private Long locationId; /** * åºåID */ private Long areaId; /** * æ¹æ¬¡ID */ private Long batchId; /** * ä¾åºåID */ private Long vendorId; } yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/api/wms/dto/WmsTransactionCreateReqDTO.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,88 @@ package cn.iocoder.yudao.module.mes.api.wms.dto; import lombok.Data; import java.math.BigDecimal; /** * WMS åºåäºå¡åå»ºè¯·æ± DTO */ @Data public class WmsTransactionCreateReqDTO { /** * äºå¡ç±»åï¼IN/OUTï¼ */ private String type; /** * ä¸å¡ç±»å */ private String bizType; /** * ä¸å¡åæ®ID */ private Long bizId; /** * ä¸å¡åæ®ç¼ç */ private String bizCode; /** * ä¸å¡è¡ID */ private Long bizLineId; /** * ç©æID */ private Long itemId; /** * ä»åºID */ private Long warehouseId; /** * åºä½ID */ private Long locationId; /** * åºåID */ private Long areaId; /** * æ¹æ¬¡ID */ private Long batchId; /** * æ¹æ¬¡ç¼ç */ private String batchCode; /** * ä¾åºåID */ private Long vendorId; /** * æ°éï¼æ£æ°å ¥åºï¼è´æ°åºåºï¼ */ private BigDecimal quantity; /** * å ¥åº/åºåºæ¶é´ */ private java.time.LocalDateTime receiptTime; /** * æ¯å¦å·²å®¡æ ¸ */ private Boolean checkFlag; } yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/api/wms/stock/WmsStockApi.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,73 @@ package cn.iocoder.yudao.module.mes.api.wms.stock; import cn.iocoder.yudao.module.mes.api.wms.dto.WmsPurchaseInboundReqDTO; import cn.iocoder.yudao.module.mes.api.wms.dto.WmsSalesOutboundReqDTO; import cn.iocoder.yudao.module.mes.api.wms.dto.WmsStockDetailRespDTO; import cn.iocoder.yudao.module.mes.api.wms.dto.WmsStockQueryReqDTO; import java.math.BigDecimal; import java.util.List; /** * WMS åºå API æ¥å£ */ public interface WmsStockApi { /** * éè´å ¥åº * * @param reqDTO å ¥åºè¯·æ± * @return äºå¡ID */ Long purchaseInbound(WmsPurchaseInboundReqDTO reqDTO); /** * éè´éè´§åºåº * * @param reqDTO åºåºè¯·æ± * @return äºå¡ID */ Long purchaseReturnOutbound(WmsPurchaseInboundReqDTO reqDTO); /** * éå®åºåº * * @param reqDTO åºåºè¯·æ± * @return äºå¡ID */ Long salesOutbound(WmsSalesOutboundReqDTO reqDTO); /** * éå®éè´§å ¥åº * * @param reqDTO å ¥åºè¯·æ± * @return äºå¡ID */ Long salesReturnInbound(WmsSalesOutboundReqDTO reqDTO); /** * è·ååºåæ°é * * @param itemId ç©æID * @param warehouseId ä»åºID * @return åºåæ°é */ BigDecimal getStockQuantity(Long itemId, Long warehouseId); /** * è·ååºåæç» * * @param reqDTO æ¥è¯¢è¯·æ± * @return åºåæç» */ WmsStockDetailRespDTO getStockDetail(WmsStockQueryReqDTO reqDTO); /** * è·ååºåæç»å表 * * @param reqDTO æ¥è¯¢è¯·æ± * @return åºåæç»å表 */ List<WmsStockDetailRespDTO> getStockDetailList(WmsStockQueryReqDTO reqDTO); } yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/api/wms/transaction/WmsTransactionApi.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,27 @@ package cn.iocoder.yudao.module.mes.api.wms.transaction; import cn.iocoder.yudao.module.mes.api.wms.dto.WmsTransactionCreateReqDTO; import java.util.List; /** * WMS åºåäºå¡ API æ¥å£ */ public interface WmsTransactionApi { /** * å建åºåäºå¡ * * @param reqDTO äºå¡è¯·æ± * @return äºå¡ID */ Long createTransaction(WmsTransactionCreateReqDTO reqDTO); /** * æ¹éå建åºåäºå¡ * * @param reqDTOs äºå¡è¯·æ±å表 */ void createTransactionBatch(List<WmsTransactionCreateReqDTO> reqDTOs); } yudao-server/src/main/resources/application-test.yaml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,298 @@ server: port: 48080 --- #################### æ°æ®åºç¸å ³é ç½® #################### spring: autoconfigure: # noinspection SpringBootApplicationYaml exclude: - org.springframework.boot.autoconfigure.quartz.QuartzAutoConfiguration # é»è®¤ local ç¯å¢ï¼ä¸å¼å¯ Quartz çèªå¨é ç½® - org.springframework.ai.vectorstore.qdrant.autoconfigure.QdrantVectorStoreAutoConfiguration # ç¦ç¨ AI 模åç Qdrantï¼æå¨å建 - org.springframework.ai.vectorstore.redis.autoconfigure.RedisVectorStoreAutoConfiguration # ç¦ç¨ AI 模åç Redisï¼æå¨å建 - org.springframework.ai.vectorstore.milvus.autoconfigure.MilvusVectorStoreAutoConfiguration # ç¦ç¨ AI 模åç Milvusï¼æå¨å建 - org.dromara.trans.config.TransServiceConfig # TODO èè¿ï¼easy-trans å ¼å®¹ Spring Boot 4 åç§»é¤ï¼TransServiceConfig å¼ç¨äºå·²ç§»é¤ç RestTemplateBuilderï¼ # TODO èè¿ï¼spring-ai-alibaba 2.0.0-M1.1 ç DashScope èªå¨é ç½®æä¸å ¼å®¹ Spring AI 2.0.0 - com.alibaba.cloud.ai.autoconfigure.dashscope.DashScopeChatAutoConfiguration - com.alibaba.cloud.ai.autoconfigure.dashscope.DashScopeAgentAutoConfiguration - com.alibaba.cloud.ai.autoconfigure.dashscope.DashScopeImageAutoConfiguration - com.alibaba.cloud.ai.autoconfigure.dashscope.DashScopeVideoAutoConfiguration - com.alibaba.cloud.ai.autoconfigure.dashscope.DashScopeAudioSpeechAutoConfiguration - com.alibaba.cloud.ai.autoconfigure.dashscope.DashScopeAudioTranscriptionAutoConfiguration - com.alibaba.cloud.ai.autoconfigure.dashscope.DashScopeRerankAutoConfiguration - com.alibaba.cloud.ai.autoconfigure.dashscope.DashScopeEmbeddingAutoConfiguration - com.alibaba.cloud.ai.autoconfigure.dashscope.DashScopeMultimodalEmbeddingAutoConfiguration - com.alibaba.cloud.ai.autoconfigure.dashscope.DashScopeAsyncToolCallingManagerAutoConfiguration # æ°æ®æºé 置项 datasource: druid: # Druid ãçæ§ãç¸å ³çå ¨å±é ç½® web-stat-filter: enabled: true stat-view-servlet: enabled: true allow: # 设置ç½ååï¼ä¸å¡«åå 许ææè®¿é® url-pattern: /druid/* login-username: # æ§å¶å°ç®¡çç¨æ·ååå¯ç login-password: filter: stat: enabled: true log-slow-sql: true # æ ¢ SQL è®°å½ slow-sql-millis: 100 merge-sql: true wall: config: multi-statement-allow: true dynamic: # 夿°æ®æºé ç½® druid: # Druid ãè¿æ¥æ± ãç¸å ³çå ¨å±é ç½® initial-size: 1 # åå§è¿æ¥æ° min-idle: 1 # æå°è¿æ¥æ± æ°é max-active: 20 # æå¤§è¿æ¥æ± æ°é max-wait: 60000 # é ç½®è·åè¿æ¥çå¾ è¶ æ¶çæ¶é´ï¼åä½ï¼æ¯«ç§ï¼1 åéï¼ time-between-eviction-runs-millis: 60000 # é ç½®é´éå¤ä¹ æè¿è¡ä¸æ¬¡æ£æµï¼æ£æµéè¦å ³éç空é²è¿æ¥ï¼åä½ï¼æ¯«ç§ï¼1 åéï¼ min-evictable-idle-time-millis: 600000 # é ç½®ä¸ä¸ªè¿æ¥å¨æ± 䏿å°çåçæ¶é´ï¼åä½ï¼æ¯«ç§ï¼10 åéï¼ max-evictable-idle-time-millis: 1800000 # é ç½®ä¸ä¸ªè¿æ¥å¨æ± 䏿大çåçæ¶é´ï¼åä½ï¼æ¯«ç§ï¼30 åéï¼ validation-query: SELECT 1 FROM DUAL # é ç½®æ£æµè¿æ¥æ¯å¦ææ test-while-idle: true test-on-borrow: false test-on-return: false pool-prepared-statements: true # æ¯å¦å¼å¯ PreparedStatement ç¼å max-pool-prepared-statement-per-connection-size: 20 # æ¯ä¸ªè¿æ¥ç¼åç PreparedStatement æ°é primary: master datasource: master: url: jdbc:mysql://172.17.0.1:11101/ruoyi-vue-pro?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X è¿æ¥çç¤ºä¾ # url: jdbc:mysql://127.0.0.1:3306/ruoyi-vue-pro?useSSL=true&allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true # MySQL Connector/J 5.X è¿æ¥çç¤ºä¾ # url: jdbc:postgresql://127.0.0.1:5432/ruoyi-vue-pro # PostgreSQL è¿æ¥çç¤ºä¾ # url: jdbc:oracle:thin:@127.0.0.1:1521:xe # Oracle è¿æ¥çç¤ºä¾ # url: jdbc:sqlserver://127.0.0.1:1433;DatabaseName=ruoyi-vue-pro;SelectMethod=cursor;encrypt=false;rewriteBatchedStatements=true;useUnicode=true;characterEncoding=utf-8 # SQLServer è¿æ¥çç¤ºä¾ # url: jdbc:dm://127.0.0.1:5236?schema=RUOYI_VUE_PRO # DM è¿æ¥çç¤ºä¾ # url: jdbc:kingbase8://127.0.0.1:54321/test # 人大éä» KingbaseES è¿æ¥çç¤ºä¾ # url: jdbc:postgresql://127.0.0.1:5432/postgres # OpenGauss è¿æ¥çç¤ºä¾ # url: jdbc:postgresql://127.0.0.1:5866/ruoyi-vue-pro # çé« HighGo è¿æ¥çç¤ºä¾ username: root password: xd@123456.. # username: sa # SQL Server è¿æ¥çç¤ºä¾ # password: Yudao@2024 # SQL Server è¿æ¥çç¤ºä¾ # username: SYSDBA # DM è¿æ¥çç¤ºä¾ # password: SYSDBA001 # DM è¿æ¥çç¤ºä¾ # username: root # OpenGauss è¿æ¥çç¤ºä¾ # password: Yudao@2024 # OpenGauss è¿æ¥çç¤ºä¾ # username: root # çé« HighGo è¿æ¥çç¤ºä¾ # password: 123456 # çé« HighGo è¿æ¥çç¤ºä¾ slave: # 模æä»åºï¼å¯æ ¹æ®èªå·±éè¦ä¿®æ¹ lazy: true # å¼å¯æå è½½ï¼ä¿è¯å¯å¨é度 url: jdbc:mysql://172.17.0.1:11101/ruoyi-vue-pro?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&rewriteBatchedStatements=true&nullCatalogMeansCurrent=true username: root password: xd@123456 # tdengine: # IoT æ°æ®åºï¼éè¦ IoT ç©èç½åå¼å¯å¢ï¼ï¼ # lazy: true # å¼å¯æå è½½ï¼ä¿è¯å¯å¨é度 # url: jdbc:TAOS-WS://127.0.0.1:6041/ruoyi_vue_pro?varcharAsString=true&enableAutoReconnect=true # åè§ï¼https://t.zsxq.com/qaX9cï¼å¼å¯ TDengine WebSocket èªå¨éè¿ # driver-class-name: com.taosdata.jdbc.ws.WebSocketDriver # username: root # password: taosdata # druid: # validation-query: SELECT SERVER_STATUS() # TDengine æ°æ®æºçæææ§æ£æ¥ SQL # Redis é ç½®ãRedisson é»è®¤çé 置足å¤ä½¿ç¨ï¼ä¸è¬ä¸éè¦è¿è¡è°ä¼ data: redis: host: 172.17.0.1 # å°å port: 11102 # ç«¯å£ database: 0 # æ°æ®åºç´¢å¼ # password: dev # å¯ç ï¼å»ºè®®ç产ç¯å¢å¼å¯ --- #################### 宿¶ä»»å¡ç¸å ³é ç½® #################### # Quartz é 置项ï¼å¯¹åº QuartzProperties é 置类 spring: quartz: auto-startup: true # æ¬å°å¼åç¯å¢ï¼å°½éä¸è¦å¼å¯ Job scheduler-name: schedulerName # Scheduler ååãé»è®¤ä¸º schedulerName job-store-type: jdbc # Job åå¨å¨ç±»åãé»è®¤ä¸º memory 表示å åï¼å¯é jdbc ä½¿ç¨æ°æ®åºã wait-for-jobs-to-complete-on-shutdown: true # åºç¨å ³éæ¶ï¼æ¯å¦çå¾ å®æ¶ä»»å¡æ§è¡å®æãé»è®¤ä¸º false ï¼å»ºè®®è®¾ç½®ä¸º true properties: # æ·»å Quartz Scheduler éå 屿§ï¼æ´å¤å¯ä»¥ç http://www.quartz-scheduler.org/documentation/2.4.0-SNAPSHOT/configuration.html ææ¡£ org: quartz: # Scheduler ç¸å ³é ç½® scheduler: instanceName: schedulerName instanceId: AUTO # èªå¨çæ instance ID # JobStore ç¸å ³é ç½® jobStore: # JobStore å®ç°ç±»ãå¯è§å客ï¼https://blog.csdn.net/weixin_42458219/article/details/122247162 class: org.springframework.scheduling.quartz.LocalDataSourceJobStore isClustered: true # æ¯éç¾¤æ¨¡å¼ clusterCheckinInterval: 15000 # éç¾¤æ£æ¥é¢çï¼åä½ï¼æ¯«ç§ãé»è®¤ä¸º 15000ï¼å³ 15 ç§ misfireThreshold: 60000 # misfire éå¼ï¼åä½ï¼æ¯«ç§ã # çº¿ç¨æ± ç¸å ³é ç½® threadPool: threadCount: 25 # çº¿ç¨æ± 大å°ãé»è®¤ä¸º 10 ã threadPriority: 5 # 线ç¨ä¼å 级 class: org.quartz.simpl.SimpleThreadPool # çº¿ç¨æ± ç±»å jdbc: # ä½¿ç¨ JDBC ç JobStore çæ¶åï¼JDBC çé ç½® initialize-schema: NEVER # æ¯å¦èªå¨ä½¿ç¨ SQL åå§å Quartz è¡¨ç»æãè¿é设置æ never ï¼æä»¬æå¨åå»ºè¡¨ç»æã --- #################### æ¶æ¯éåç¸å ³ #################### # rocketmq é 置项ï¼å¯¹åº RocketMQProperties é 置类 rocketmq: name-server: 127.0.0.1:9876 # RocketMQ Namesrv spring: # RabbitMQ é 置项ï¼å¯¹åº RabbitProperties é 置类 rabbitmq: host: 127.0.0.1 # RabbitMQ æå¡çå°å port: 5672 # RabbitMQ æå¡çç«¯å£ username: rabbit # RabbitMQ æå¡çè´¦å· password: rabbit # RabbitMQ æå¡çå¯ç # Kafka é 置项ï¼å¯¹åº KafkaProperties é 置类 kafka: bootstrap-servers: 127.0.0.1:9092 # æå® Kafka Broker å°åï¼å¯ä»¥è®¾ç½®å¤ä¸ªï¼ä»¥éå·åé --- #################### æå¡ä¿éç¸å ³é ç½® #################### # Lock4j é 置项 lock4j: acquire-timeout: 3000 # è·ååå¸å¼éè¶ æ¶æ¶é´ï¼é»è®¤ä¸º 3000 æ¯«ç§ expire: 30000 # åå¸å¼éçè¶ æ¶æ¶é´ï¼é»è®¤ä¸º 30000 æ¯«ç§ --- #################### çæ§ç¸å ³é ç½® #################### # Actuator çæ§ç«¯ç¹çé 置项 management: endpoints: web: base-path: /actuator # Actuator æä¾ç API æ¥å£çæ ¹ç®å½ãé»è®¤ä¸º /actuator exposure: include: '*' # éè¦å¼æ¾ç端ç¹ãé»è®¤å¼åªæå¼ health å info 两个端ç¹ãéè¿è®¾ç½® * ï¼å¯ä»¥å¼æ¾ææç«¯ç¹ã # Spring Boot Admin é 置项 spring: boot: admin: # Spring Boot Admin Client 客æ·ç«¯çç¸å ³é ç½® client: url: http://127.0.0.1:${server.port}/${spring.boot.admin.context-path} # 设置 Spring Boot Admin Server å°å instance: service-host-type: IP # 注åå®ä¾æ¶ï¼ä¼å ä½¿ç¨ IP [IP, HOST_NAME, CANONICAL_HOST_NAME] username: admin password: admin # Spring Boot Admin Server æå¡ç«¯çç¸å ³é ç½® context-path: /admin # é ç½® Spring # å 许åµå ¥ iframe çååï¼æ¯æéé 符ï¼ï¼å®é é¨ç½²æ¶ï¼å¯ä»¥æ¹ä¸º "'self' [ä½ çå ¬ç½åå]" frame-ancestors: "'self' localhost localhost:48080 127.0.0.1 127.0.0.1:48080" # æ¥å¿æä»¶é ç½® logging: file: name: ${user.home}/logs/${spring.application.name}.log # æ¥å¿æä»¶åï¼å ¨è·¯å¾ level: # é ç½®èªå·±åç MyBatis Mapper æå°æ¥å¿ cn.iocoder.yudao.module.bpm.dal.mysql: debug cn.iocoder.yudao.module.infra.dal.mysql: debug cn.iocoder.yudao.module.infra.dal.mysql.logger.ApiErrorLogMapper: INFO # é ç½® ApiErrorLogMapper çæ¥å¿çº§å«ä¸º infoï¼é¿å å GlobalExceptionHandler éå¤æå° cn.iocoder.yudao.module.infra.dal.mysql.job.JobLogMapper: INFO # é ç½® JobLogMapper çæ¥å¿çº§å«ä¸º info cn.iocoder.yudao.module.infra.dal.mysql.file.FileConfigMapper: INFO # é ç½® FileConfigMapper çæ¥å¿çº§å«ä¸º info cn.iocoder.yudao.module.pay.dal.mysql: debug cn.iocoder.yudao.module.pay.dal.mysql.notify.PayNotifyTaskMapper: INFO # é ç½® PayNotifyTaskMapper çæ¥å¿çº§å«ä¸º info cn.iocoder.yudao.module.system.dal.mysql: debug cn.iocoder.yudao.module.system.dal.mysql.sms.SmsChannelMapper: INFO # é ç½® SmsChannelMapper çæ¥å¿çº§å«ä¸º info cn.iocoder.yudao.module.tool.dal.mysql: debug cn.iocoder.yudao.module.member.dal.mysql: debug cn.iocoder.yudao.module.trade.dal.mysql: debug cn.iocoder.yudao.module.promotion.dal.mysql: debug cn.iocoder.yudao.module.statistics.dal.mysql: debug cn.iocoder.yudao.module.crm.dal.mysql: debug cn.iocoder.yudao.module.erp.dal.mysql: debug cn.iocoder.yudao.module.mes.dal.mysql: debug cn.iocoder.yudao.module.wms.dal.mysql: debug cn.iocoder.yudao.module.iot.dal.mysql: debug cn.iocoder.yudao.module.iot.dal.tdengine: DEBUG cn.iocoder.yudao.module.iot.service.rule: debug cn.iocoder.yudao.module.ai.dal.mysql: debug cn.iocoder.yudao.module.im.dal.mysql: debug org.springframework.context.support.PostProcessorRegistrationDelegate: ERROR # TODO èè¿ï¼å ç¦ç¨ï¼Spring Boot 3.X åå¨é¨åé误ç WARN æç¤º debug: false --- #################### å¾®ä¿¡å ¬ä¼å·ãå°ç¨åºç¸å ³é ç½® #################### wx: mp: # å ¬ä¼å·é ç½®ï¼å¿ å¡«ï¼ï¼åè§ https://github.com/Wechat-Group/WxJava/blob/develop/spring-boot-starters/wx-java-mp-spring-boot-starter/README.md ææ¡£ # app-id: wx041349c6f39b268b # æµè¯å·ï¼çå¸å°§æä¾çï¼ # secret: 5abee519483bc9f8cb37ce280e814bd0 # app-id: wx5b23ba7a5589ecbb # æµè¯å·ï¼èªå·±çï¼ # secret: 2a7b3b20c537e52e74afd395eb85f61f app-id: wxf56b1542b9e85f8a # æµè¯å·ï¼Kongdy æä¾çï¼ secret: 496379dcef1ba869e9234de8d598cfd3 # åå¨é ç½®ï¼è§£å³ AccessToken çè·¨èç¹çå ±äº« config-storage: type: RedisTemplate # éç¨ RedisTemplate æä½ Redisï¼ä¼èªå¨ä» Spring ä¸è·å key-prefix: wx # Redis Key çåç¼ http-client-type: HttpComponents # éç¨ HttpComponentsï¼HttpClient 5ï¼è¯·æ±å¾®ä¿¡å ¬ä¼å·å¹³å° miniapp: # å°ç¨åºé ç½®ï¼å¿ å¡«ï¼ï¼åè§ https://github.com/Wechat-Group/WxJava/blob/develop/spring-boot-starters/wx-java-miniapp-spring-boot-starter/README.md ææ¡£ # appid: wx62056c0d5e8db250 # æµè¯å·ï¼çå¸å°§æä¾çï¼ # secret: 333ae72f41552af1e998fe1f54e1584a # appid: wx63c280fe3248a3e7 # wenhualiançæ¥å£æµè¯å· # secret: 6f270509224a7ae1296bbf1c8cb97aed appid: wxc4598c446f8a9cb3 # æµè¯å·ï¼Kongdy æä¾çï¼ secret: 4a1a04e07f6a4a0751b39c3064a92c8b # appid: wx66186af0759f47c9 # æµè¯å·ï¼puhui æä¾çï¼ # secret: 3218bcbd112cbc614c7264ceb20144ac config-storage: type: RedisTemplate # éç¨ RedisTemplate æä½ Redisï¼ä¼èªå¨ä» Spring ä¸è·å key-prefix: wa # Redis Key çåç¼ http-client-type: HttpComponents # éç¨ HttpComponentsï¼HttpClient 5ï¼è¯·æ±å¾®ä¿¡å°ç¨åºå¹³å° --- #################### èéç¸å ³é ç½® #################### # èéé 置项ï¼è®¾ç½®å½åé¡¹ç®ææèªå®ä¹çé ç½® yudao: captcha: enable: false # æ¬å°ç¯å¢ï¼ææ¶å ³éå¾çéªè¯ç ï¼æ¹ä¾¿ç»å½çæ¥å£çæµè¯ï¼ security: mock-enable: true pay: order-notify-url: https://yutou.mynatapp.cc/admin-api/pay/notify/order # æ¯ä»æ¸ éçãæ¯ä»ãåè°å°å refund-notify-url: https://yutou.mynatapp.cc/admin-api/pay/notify/refund # æ¯ä»æ¸ éçã鿬¾ãåè°å°å transfer-notify-url: https://yutou.mynatapp.cc/admin-api/pay/notify/transfer # æ¯ä»æ¸ éçã转账ãåè°å°å access-log: # è®¿é®æ¥å¿çé 置项 enable: false demo: false # å ³éæ¼ç¤ºæ¨¡å¼ wxa-code: env-version: develop # å°ç¨åºçæ¬: æ£å¼ç为 "release"ï¼ä½éªç为 "trial"ï¼å¼åç为 "develop" wxa-subscribe-message: miniprogram-state: developer # 跳转å°ç¨åºç±»åï¼å¼åç为 âdeveloperâï¼ä½éªç为 âtrialâä¸ºï¼æ£å¼ç为 âformalâ tencent-lbs-key: TVDBZ-TDILD-4ON4B-PFDZA-RNLKH-VVF6E # QQ å°å¾çå¯é¥ https://lbs.qq.com/service/staticV2/staticGuide/staticDoc justauth: enabled: true type: DINGTALK: # éé client-id: dingvrnreaje3yqvzhxg client-secret: i8E6iZyDvZj51JIb0tYsYfVQYOks9Cq1lgryEjFRqC79P3iJcrxEwT6Qk2QvLrLI ignore-check-redirect-uri: true WECHAT_ENTERPRISE: # ä¼ä¸å¾®ä¿¡ client-id: wwd411c69a39ad2e54 client-secret: 1wTb7hYxnpT2TUbIeHGXGo7T0odav1ic10mLdyyATOw agent-id: 1000004 ignore-check-redirect-uri: true # noinspection SpringBootApplicationYaml WECHAT_MINI_PROGRAM: # 微信å°ç¨åº client-id: ${wx.miniapp.appid} client-secret: ${wx.miniapp.secret} ignore-check-redirect-uri: true ignore-check-state: true # 微信å°ç¨åºï¼ä¸ä¼ä½¿ç¨å° stateï¼æä»¥ä¸è¿è¡æ ¡éª WECHAT_MP: # å¾®ä¿¡å ¬ä¼å· client-id: ${wx.mp.app-id} client-secret: ${wx.mp.secret} ignore-check-redirect-uri: true ALIPAY: # æ¯ä»å®å°ç¨åº client-id: xx client-secret: xx alipay-public-key: xx ignore-check-redirect-uri: true ignore-check-state: true cache: type: REDIS prefix: 'social_auth_state:' # ç¼ååç¼ï¼ç®ååªå¯¹ Redis ç¼åçæï¼é»è®¤ JUSTAUTH::STATE:: timeout: 24h # è¶ æ¶æ¶é¿ï¼ç®ååªå¯¹ Redis ç¼åçæï¼é»è®¤ 3 åé