diff --git a/platform-boot-started-costManagement/src/main/java/tech/abc/platform/costManagement/mapper/CostItemDetailMapper.xml b/platform-boot-started-costManagement/src/main/java/tech/abc/platform/costManagement/mapper/CostItemDetailMapper.xml index 1a2de65..734c741 100644 --- a/platform-boot-started-costManagement/src/main/java/tech/abc/platform/costManagement/mapper/CostItemDetailMapper.xml +++ b/platform-boot-started-costManagement/src/main/java/tech/abc/platform/costManagement/mapper/CostItemDetailMapper.xml @@ -86,7 +86,7 @@ SELECT - ,'供应商产品库' as productType,(select description from pmg_supplier_product_model where id=model_id )as ModelDescription + ,'供应商产品库' as productType,(select description from pmg_supplier_product_model where id=model_id )as productSpecifications FROM pmg_supplier_products @@ -96,7 +96,7 @@ SELECT - ,'公司产品库' as productType,(select description from pmg_company_product_model where id=model_id )as ModelDescription + ,'公司产品库' as productType,(select description from pmg_company_product_model where id=model_id )as productSpecifications FROM pmg_company_products @@ -106,7 +106,7 @@ SELECT - ,'个人产品库' as productType,(select description from pmg_person_product_model where id=model_id )as ModelDescription + ,'个人产品库' as productType,(select description from pmg_person_product_model where id=model_id )as productSpecifications FROM pmg_person_products diff --git a/platform-boot-started-productManagement/pom.xml b/platform-boot-started-productManagement/pom.xml index a96b691..dbac8c0 100644 --- a/platform-boot-started-productManagement/pom.xml +++ b/platform-boot-started-productManagement/pom.xml @@ -19,7 +19,10 @@ tech.abc platform-common - + + tech.abc + platform-boot-starter-elasticsearch + diff --git a/platform-boot-started-productManagement/src/main/java/tech/abc/platform/productManagement/controller/CompanyProductsController.java b/platform-boot-started-productManagement/src/main/java/tech/abc/platform/productManagement/controller/CompanyProductsController.java index 717880e..a782cce 100644 --- a/platform-boot-started-productManagement/src/main/java/tech/abc/platform/productManagement/controller/CompanyProductsController.java +++ b/platform-boot-started-productManagement/src/main/java/tech/abc/platform/productManagement/controller/CompanyProductsController.java @@ -197,7 +197,7 @@ public class CompanyProductsController extends BaseController { CompanyProductsVO vo = convert2VO(x); if(StringUtils.isNotEmpty(vo.getModelId())){ String description = companyProductModelService.getById(vo.getModelId()).getDescription(); - vo.setModelDescription(description); + vo.setProductSpecifications(description); } voList.add(vo); }); diff --git a/platform-boot-started-productManagement/src/main/java/tech/abc/platform/productManagement/controller/PersonProductsController.java b/platform-boot-started-productManagement/src/main/java/tech/abc/platform/productManagement/controller/PersonProductsController.java index e84840f..43c06be 100644 --- a/platform-boot-started-productManagement/src/main/java/tech/abc/platform/productManagement/controller/PersonProductsController.java +++ b/platform-boot-started-productManagement/src/main/java/tech/abc/platform/productManagement/controller/PersonProductsController.java @@ -199,7 +199,7 @@ public class PersonProductsController extends BaseController { //获取型号描述信息 if(StringUtils.isNotEmpty(modelId)){ String description = personProductModelService.getById(modelId).getDescription(); - vo.setModelDescription(description); + vo.setProductSpecifications(description); } voList.add(vo); }); diff --git a/platform-boot-started-productManagement/src/main/java/tech/abc/platform/productManagement/controller/SupplierProductsController.java b/platform-boot-started-productManagement/src/main/java/tech/abc/platform/productManagement/controller/SupplierProductsController.java index ffcae02..6008e5e 100644 --- a/platform-boot-started-productManagement/src/main/java/tech/abc/platform/productManagement/controller/SupplierProductsController.java +++ b/platform-boot-started-productManagement/src/main/java/tech/abc/platform/productManagement/controller/SupplierProductsController.java @@ -199,7 +199,7 @@ public class SupplierProductsController extends BaseController { //获取型号描述信息 if(StringUtils.isNotEmpty(modelId)){ String description = supplierProductModelService.getById(modelId).getDescription(); - vo.setModelDescription(description); + vo.setProductSpecifications(description); } voList.add(vo); diff --git a/platform-boot-started-productManagement/src/main/java/tech/abc/platform/productManagement/entity/CompanyProductModel.java b/platform-boot-started-productManagement/src/main/java/tech/abc/platform/productManagement/entity/CompanyProductModel.java index 3e2cf6d..66dec22 100644 --- a/platform-boot-started-productManagement/src/main/java/tech/abc/platform/productManagement/entity/CompanyProductModel.java +++ b/platform-boot-started-productManagement/src/main/java/tech/abc/platform/productManagement/entity/CompanyProductModel.java @@ -21,7 +21,7 @@ import lombok.experimental.Accessors; public class CompanyProductModel extends BaseEntity { /** - * 产品描述 + * 产品规格 */ @TableField("description") private String description; diff --git a/platform-boot-started-productManagement/src/main/java/tech/abc/platform/productManagement/entity/CompanyProducts.java b/platform-boot-started-productManagement/src/main/java/tech/abc/platform/productManagement/entity/CompanyProducts.java index 438a461..7f6615b 100644 --- a/platform-boot-started-productManagement/src/main/java/tech/abc/platform/productManagement/entity/CompanyProducts.java +++ b/platform-boot-started-productManagement/src/main/java/tech/abc/platform/productManagement/entity/CompanyProducts.java @@ -26,12 +26,16 @@ public class CompanyProducts extends BaseEntity { */ @TableField("supplier_information_id") private String supplierInformationId; - /** * 公司产品型号id */ @TableField("model_id") private String modelId; + /** + * 公司产品规格 + */ + @TableField("product_specifications") + private String productSpecifications; /** * 供应商产品id */ @@ -67,6 +71,38 @@ public class CompanyProducts extends BaseEntity { */ @TableField("remarks") private String remarks; + /** + * 产品图片 + */ + @TableField("image") + private String image; + /** + * 产品品牌 + */ + @TableField("brand") + private String brand; + + /** + * 产品单位*/ + @TableField("unit") + private String unit; + + /** + * 除税价格 + */ + @TableField("ex_tax_price") + private BigDecimal exTaxPrice; + + /** + * 税率 + */ + @TableField("taxrate") + private BigDecimal taxrate; + /** + * 分类id + */ + @TableField("category_id") + private String categoryId; /********非库表存储属性*****/ } diff --git a/platform-boot-started-productManagement/src/main/java/tech/abc/platform/productManagement/entity/PersonProducts.java b/platform-boot-started-productManagement/src/main/java/tech/abc/platform/productManagement/entity/PersonProducts.java index 11e9539..97c51ed 100644 --- a/platform-boot-started-productManagement/src/main/java/tech/abc/platform/productManagement/entity/PersonProducts.java +++ b/platform-boot-started-productManagement/src/main/java/tech/abc/platform/productManagement/entity/PersonProducts.java @@ -20,12 +20,16 @@ import lombok.experimental.Accessors; @Accessors(chain = true) @TableName("pmg_person_products") public class PersonProducts extends BaseEntity { - /** * 个人产品型号id */ @TableField("model_id") private String modelId; + /** + * 个人产品规格 + */ + @TableField("product_specifications") + private String productSpecifications; /** * 供应商id @@ -68,6 +72,38 @@ public class PersonProducts extends BaseEntity { */ @TableField("supplier_products_id") private String supplierProductsId; + /** + * 产品图片 + */ + @TableField("image") + private String image; + /** + * 产品品牌 + */ + @TableField("brand") + private String brand; + + /** + * 产品单位*/ + @TableField("unit") + private String unit; + + /** + * 除税价格 + */ + @TableField("ex_tax_price") + private BigDecimal exTaxPrice; + + /** + * 税率 + */ + @TableField("taxrate") + private BigDecimal taxrate; + /** + * 分类id + */ + @TableField("category_id") + private String categoryId; /********非库表存储属性*****/ } diff --git a/platform-boot-started-productManagement/src/main/java/tech/abc/platform/productManagement/entity/SupplierProducts.java b/platform-boot-started-productManagement/src/main/java/tech/abc/platform/productManagement/entity/SupplierProducts.java index 92de3ae..1e1409a 100644 --- a/platform-boot-started-productManagement/src/main/java/tech/abc/platform/productManagement/entity/SupplierProducts.java +++ b/platform-boot-started-productManagement/src/main/java/tech/abc/platform/productManagement/entity/SupplierProducts.java @@ -33,6 +33,12 @@ public class SupplierProducts extends BaseEntity { @TableField("model_id") private String modelId; + /** + * 个人产品规格 + */ + @TableField("product_specifications") + private String productSpecifications; + /** * 产品名称 */ @@ -62,6 +68,38 @@ public class SupplierProducts extends BaseEntity { */ @TableField("remarks") private String remarks; + /** + * 产品图片 + */ + @TableField("image") + private String image; + /** + * 产品品牌 + */ + @TableField("brand") + private String brand; + + /** + * 产品单位*/ + @TableField("unit") + private String unit; + + /** + * 除税价格 + */ + @TableField("ex_tax_price") + private BigDecimal exTaxPrice; + + /** + * 税率 + */ + @TableField("taxrate") + private BigDecimal taxrate; + /** + * 分类id + */ + @TableField("category_id") + private String categoryId; /********非库表存储属性*****/ } diff --git a/platform-boot-started-productManagement/src/main/java/tech/abc/platform/productManagement/service/impl/SupplierProductsServiceImpl.java b/platform-boot-started-productManagement/src/main/java/tech/abc/platform/productManagement/service/impl/SupplierProductsServiceImpl.java index 54bb54c..5cf7800 100644 --- a/platform-boot-started-productManagement/src/main/java/tech/abc/platform/productManagement/service/impl/SupplierProductsServiceImpl.java +++ b/platform-boot-started-productManagement/src/main/java/tech/abc/platform/productManagement/service/impl/SupplierProductsServiceImpl.java @@ -58,17 +58,6 @@ public class SupplierProductsServiceImpl extends BaseServiceImpl modelUpdateWrapper = new LambdaUpdateWrapper<>(); // 临时数据标记 - modelUpdateWrapper.eq(SupplierProductModel::getId, modelId); - supplierProductModelMapper.delete(modelUpdateWrapper); - // 更新型号规格参数的is_temporary标记为临时数据 - LambdaUpdateWrapper detailsUpdateWrapper = new LambdaUpdateWrapper<>(); - detailsUpdateWrapper.eq(SupplierProductModelDetails::getModelId, modelId); - supplierProductModelDetailsMapper.delete(detailsUpdateWrapper); - } } @Override public void beforeAdd(SupplierProducts entity) { diff --git a/platform-boot-started-productManagement/src/main/java/tech/abc/platform/productManagement/vo/CompanyProductModelVO.java b/platform-boot-started-productManagement/src/main/java/tech/abc/platform/productManagement/vo/CompanyProductModelVO.java index a79c862..1701e8a 100644 --- a/platform-boot-started-productManagement/src/main/java/tech/abc/platform/productManagement/vo/CompanyProductModelVO.java +++ b/platform-boot-started-productManagement/src/main/java/tech/abc/platform/productManagement/vo/CompanyProductModelVO.java @@ -20,9 +20,9 @@ import lombok.experimental.Accessors; @Accessors(chain = true) public class CompanyProductModelVO extends BaseVO { /** - * 产品描述 + * 产品规格 */ - @NotBlank(message = "【产品描述】不能为空") + @NotBlank(message = "【产品规格】不能为空") private String description; /** diff --git a/platform-boot-started-productManagement/src/main/java/tech/abc/platform/productManagement/vo/CompanyProductsVO.java b/platform-boot-started-productManagement/src/main/java/tech/abc/platform/productManagement/vo/CompanyProductsVO.java index 72cdc9d..ec91a7c 100644 --- a/platform-boot-started-productManagement/src/main/java/tech/abc/platform/productManagement/vo/CompanyProductsVO.java +++ b/platform-boot-started-productManagement/src/main/java/tech/abc/platform/productManagement/vo/CompanyProductsVO.java @@ -1,9 +1,11 @@ package tech.abc.platform.productManagement.vo; +import com.baomidou.mybatisplus.annotation.TableField; import tech.abc.platform.common.base.BaseVO; import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; import java.math.BigDecimal; import lombok.Data; import lombok.EqualsAndHashCode; @@ -19,6 +21,11 @@ import lombok.experimental.Accessors; @EqualsAndHashCode(callSuper = true) @Accessors(chain = true) public class CompanyProductsVO extends BaseVO { + /** + * 公司产品型号id + */ + private String modelId; + /** * 供应商ID */ @@ -28,11 +35,6 @@ public class CompanyProductsVO extends BaseVO { */ private String supplierName; - /** - * 公司产品型号id - */ - @NotBlank(message = "【产品型号】不能为空") - private String modelId; /** * 产品名称 @@ -49,7 +51,7 @@ public class CompanyProductsVO extends BaseVO { /** * 产品价格 */ - @NotBlank(message = "【产品价格】不能为空") + @NotNull(message = "【产品价格】不能为空") private BigDecimal productPrice; /** @@ -62,14 +64,36 @@ public class CompanyProductsVO extends BaseVO { */ private String remarks; /** - * 产品描述 + * 产品规格 */ - private String modelDescription; + private String productSpecifications; /** * 供应商产品id */ private String supplierProductsId; + /** + * 产品图片 + */ + private String image; + /** + * 产品品牌 + */ + private String brand; + + /** + * 产品单位*/ + private String unit; + + /** + * 除税价格 + */ + private BigDecimal exTaxPrice; + + /** + * 税率 + */ + private BigDecimal taxrate; /********非库表存储属性*****/ diff --git a/platform-boot-started-productManagement/src/main/java/tech/abc/platform/productManagement/vo/PersonProductsVO.java b/platform-boot-started-productManagement/src/main/java/tech/abc/platform/productManagement/vo/PersonProductsVO.java index 4250df4..c228f1b 100644 --- a/platform-boot-started-productManagement/src/main/java/tech/abc/platform/productManagement/vo/PersonProductsVO.java +++ b/platform-boot-started-productManagement/src/main/java/tech/abc/platform/productManagement/vo/PersonProductsVO.java @@ -4,6 +4,7 @@ package tech.abc.platform.productManagement.vo; import tech.abc.platform.common.base.BaseVO; import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; import java.math.BigDecimal; import lombok.Data; import lombok.EqualsAndHashCode; @@ -44,7 +45,7 @@ public class PersonProductsVO extends BaseVO { /** * 产品价格 */ - @NotBlank(message = "【产品价格】不能为空") + @NotNull(message = "【产品价格】不能为空") private BigDecimal productPrice; /** @@ -62,10 +63,31 @@ public class PersonProductsVO extends BaseVO { */ private String supplierProductsId; /** - * 产品描述 + * 产品规格 */ - private String ModelDescription; + private String productSpecifications; + /** + * 产品图片 + */ + private String image; + + /** + * 产品品牌 + */ + private String brand; + /** + * 产品单位*/ + private String unit; + + /** + * 除税价格 + */ + private BigDecimal exTaxPrice; + /** + * 税率 + */ + private BigDecimal taxrate; /********非库表存储属性*****/ diff --git a/platform-boot-started-productManagement/src/main/java/tech/abc/platform/productManagement/vo/SupplierProductsVO.java b/platform-boot-started-productManagement/src/main/java/tech/abc/platform/productManagement/vo/SupplierProductsVO.java index 95f2a4c..d9a22b5 100644 --- a/platform-boot-started-productManagement/src/main/java/tech/abc/platform/productManagement/vo/SupplierProductsVO.java +++ b/platform-boot-started-productManagement/src/main/java/tech/abc/platform/productManagement/vo/SupplierProductsVO.java @@ -1,9 +1,11 @@ package tech.abc.platform.productManagement.vo; +import com.baomidou.mybatisplus.annotation.TableField; import tech.abc.platform.common.base.BaseVO; import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; import java.math.BigDecimal; import lombok.Data; import lombok.EqualsAndHashCode; @@ -48,23 +50,43 @@ public class SupplierProductsVO extends BaseVO { /** * 产品价格 */ - @NotBlank(message = "【产品价格】不能为空") + @NotNull(message = "【产品价格】不能为空") private BigDecimal productPrice; /** * 信息来源 */ private String sourceInformation; - /** * 备注 */ private String remarks; /** - * 产品描述 + * 产品规格 + */ + private String productSpecifications; + /** + * 产品图片 + */ + private String image; + + /** + * 产品品牌 */ - private String modelDescription; + private String brand; + /** + * 产品单位*/ + private String unit; + + /** + * 除税价格 + */ + private BigDecimal exTaxPrice; + /** + * 税率 + */ + private BigDecimal taxrate; /********非库表存储属性*****/ diff --git a/platform-boot-starter-demo/src/main/resources/application-dev.yml b/platform-boot-starter-demo/src/main/resources/application-dev.yml index 89581cc..09e8667 100644 --- a/platform-boot-starter-demo/src/main/resources/application-dev.yml +++ b/platform-boot-starter-demo/src/main/resources/application-dev.yml @@ -4,7 +4,7 @@ server: spring: datasource: # 数据库设置 - url: jdbc:mysql://localhost:3306/abc?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai&allowMultiQueries=true + url: jdbc:mysql://localhost:3306/abc_test?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai&allowMultiQueries=true username: root password: root # redis设置 diff --git a/platform-boot-starter-demo/src/main/resources/http_ca.crt b/platform-boot-starter-demo/src/main/resources/http_ca.crt new file mode 100644 index 0000000..92ab33d --- /dev/null +++ b/platform-boot-starter-demo/src/main/resources/http_ca.crt @@ -0,0 +1,31 @@ +-----BEGIN CERTIFICATE----- +MIIFWjCCA0KgAwIBAgIVAIoa4/XgAnDR+55oINCE0Vm77NOfMA0GCSqGSIb3DQEB +CwUAMDwxOjA4BgNVBAMTMUVsYXN0aWNzZWFyY2ggc2VjdXJpdHkgYXV0by1jb25m +aWd1cmF0aW9uIEhUVFAgQ0EwHhcNMjQwNTI4MDMwODM5WhcNMjcwNTI4MDMwODM5 +WjA8MTowOAYDVQQDEzFFbGFzdGljc2VhcmNoIHNlY3VyaXR5IGF1dG8tY29uZmln +dXJhdGlvbiBIVFRQIENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA +1YbHndQVi5WRsO52jh1ThRGbndrVTdaKgepCEPc0bt3EiHPEXB3xUnoPQkmcazn/ +Vf3fuIV8ZLML6CeR5w5jX+FYr6fl7J4o2f8WWBGS9nWkpfYYxICUh0vf9g8y3jOc +yeeME3tNFCOPRW9rlYUjq4ba514lNaGZGOnLCV6G2LBZLXIkE7ukj+Mly3pDUpJv +5aen+nsWF9MyUcXa2U8mHvv3SHNSp+N+2jbpgTYAM6tWMSbpZ+6LTewNyQi+4QiJ +Qo2BGpfi6G6YAWXfvy+ewI7hkWZVnep9ndFjci7306IDj6wfWntGmvf7OTXT2m4U +8ZVg/PECfZAIwj7A5j60joia4r4q8ftlRa+wVNTyuEvAbSYfvLt+l9A/UldQ4Vxs ++VZOCpTNwME7UQUqaZq8TThgpqd9RFGwtgeJ7JV92NPlaQCHGC9FSE1iZQB6ykAE +Dl1df5dnlTMSfj2EreDBOF4JpI406C/RDXxg3c94986UZC7ra7qQ8WBnAxpsaVto +nXIVCFaBzn7yFkJbm4f6Zd0CCYrwB9pqhqp8LuVQr0ubDvawgodanuKBUkNC7qtZ +F7jxXzSj4bg1bhDRzyUrtuIg+CTMJA0rrZWxthE2gYzvbfZqMSInPwjkgGmL6vxN +KW1FJcIHamMTHU/tl1RNSA9BnczitN3/x7fWGGfSYN0CAwEAAaNTMFEwHQYDVR0O +BBYEFI8Vo0wKU5BgjNtgyZ26uPI0iKX2MB8GA1UdIwQYMBaAFI8Vo0wKU5BgjNtg +yZ26uPI0iKX2MA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggIBAANc +g7Wf5ET9QDbTXdN4mwL4Vr2pri2mAzB1LRqAz4UGmsgxZICUZXWOoo1P5qfzOkWm +xzP9BPHXMJLtQZh3pYtb+UGuxcLeT/IcuKpXiKVX4+7N6WVyEXZl1cSy2xf3i03j +AjqP0aRJBQo74aMcFKngh2tz7NMOmSPw5cYyLIsklL9uShh/tFEgMAZtC8aReHTj +WJJhIP0NgGHMiqbozTuDatDprKE4UDgt9tOKq/ci29kCDBHH2+siJOGsg5oDwa3V +Cin/bMwCdvZwQAbmOOETyHl/Og3PduHQZ1O2FbgPICxlPzKRxDx2jTmSg7Ub36t6 +Ec/j+BV8eciZneJ0f9K3SGP4aG5GECYdsINhjbG0HQe+ktj0Fm3a4mwlR+vkmF3d +/LeW6mbaO/Km3H9iRT9SRa0LG1rslL6awVSueHxpmAXU+EGI/gxdacxV8T32V8IJ +cYYJcKVZC5HDnN4VP+PDXST3cfKGb1wRSL1+IkCjrY9EZK+DFJG/gmTdgDi9qSBx +99vHbnGyKBY5+UAZ2nVxnnRTyfLXXkZQZqVzuRg6STlKGvYbWSS/nBLVyp/dW32J +kJK7t92SV8TGzFY24VyfnBsQaf1mUnsSSn5tFDej6bvpA83nsL8sgUeHy/HbGKTA +5AxbnKvU2qtM65Sx01ZKVdbVE5ubYGxu2h7IGZ38 +-----END CERTIFICATE----- diff --git a/platform-boot-starter-elasticsearch/pom.xml b/platform-boot-starter-elasticsearch/pom.xml index b55c12d..25850d1 100644 --- a/platform-boot-starter-elasticsearch/pom.xml +++ b/platform-boot-starter-elasticsearch/pom.xml @@ -6,6 +6,7 @@ tech.abc abc-development-platform 5.1.0 + @@ -21,11 +22,27 @@ platform-common - + + + + + + + + co.elastic.clients + elasticsearch-java + 8.1.3 + - org.springframework.boot - spring-boot-starter-data-elasticsearch + com.fasterxml.jackson.core + jackson-databind + 2.13.3 + + + + + diff --git a/platform-boot-starter-elasticsearch/src/main/java/tech/abc/platform/elasticsearch/config/ElasticSearchConfig.java b/platform-boot-starter-elasticsearch/src/main/java/tech/abc/platform/elasticsearch/config/ElasticSearchConfig.java index 94e45f3..307d5d4 100644 --- a/platform-boot-starter-elasticsearch/src/main/java/tech/abc/platform/elasticsearch/config/ElasticSearchConfig.java +++ b/platform-boot-starter-elasticsearch/src/main/java/tech/abc/platform/elasticsearch/config/ElasticSearchConfig.java @@ -1,14 +1,43 @@ package tech.abc.platform.elasticsearch.config; +import co.elastic.clients.elasticsearch.ElasticsearchAsyncClient; +import co.elastic.clients.elasticsearch.ElasticsearchClient; +import co.elastic.clients.json.jackson.JacksonJsonpMapper; +import co.elastic.clients.transport.ElasticsearchTransport; +import co.elastic.clients.transport.rest_client.RestClientTransport; +import org.apache.http.HttpHost; +import org.apache.http.auth.AuthScope; +import org.apache.http.auth.UsernamePasswordCredentials; +import org.apache.http.client.CredentialsProvider; +import org.apache.http.client.config.RequestConfig; +import org.apache.http.conn.ssl.NoopHostnameVerifier; +import org.apache.http.impl.client.BasicCredentialsProvider; +import org.apache.http.impl.nio.client.HttpAsyncClientBuilder; +import org.apache.http.ssl.SSLContextBuilder; +import org.apache.http.ssl.SSLContexts; +import org.elasticsearch.client.RestClient; +import org.elasticsearch.client.RestClientBuilder; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.core.convert.converter.Converter; -import org.springframework.core.convert.support.DefaultConversionService; -import org.springframework.data.convert.ReadingConverter; -import org.springframework.data.elasticsearch.core.convert.ElasticsearchConverter; -import org.springframework.data.elasticsearch.core.convert.MappingElasticsearchConverter; -import org.springframework.data.elasticsearch.core.mapping.SimpleElasticsearchMappingContext; +import org.springframework.core.io.ClassPathResource; +import org.springframework.util.StringUtils; + +import javax.net.ssl.SSLContext; +import java.io.IOException; +import java.io.InputStream; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.security.KeyManagementException; +import java.security.KeyStore; +import java.security.KeyStoreException; +import java.security.NoSuchAlgorithmException; +import java.security.cert.Certificate; +import java.security.cert.CertificateException; +import java.security.cert.CertificateFactory; import java.time.Instant; import java.time.LocalDateTime; import java.time.ZoneId; @@ -20,28 +49,164 @@ import java.time.ZoneId; * @date 2024-02-21 */ @Configuration + public class ElasticSearchConfig { + @Value("${elasticsearch.uris}") + private String hosts; + @Value("${elasticsearch.username}") + private String userName; + + @Value("${elasticsearch.password}") + private String passWord; + /** + * 同步方式 + * + * @return + */ +// @Bean +// public ElasticsearchClient elasticsearchClient() throws Exception { +//// HttpHost[] httpHosts = toHttpHost(); +// final CredentialsProvider credentialsProvider = +// new BasicCredentialsProvider(); +// credentialsProvider.setCredentials(AuthScope.ANY, +// new UsernamePasswordCredentials(userName, passWord)); +// +// ClassPathResource resource = new ClassPathResource("http_ca.crt"); +// CertificateFactory factory = +// CertificateFactory.getInstance("X.509"); +// Certificate trustedCa; +// try (InputStream is = resource.getInputStream()) { +// trustedCa = factory.generateCertificate(is); +// } +// KeyStore trustStore = KeyStore.getInstance("pkcs12"); +// trustStore.load(null, null); +// trustStore.setCertificateEntry("ca", trustedCa); +// SSLContextBuilder sslContextBuilder = SSLContexts.custom() +// .loadTrustMaterial(trustStore, null); +// final SSLContext sslContext = sslContextBuilder.build(); +// +// RestClientBuilder builder = RestClient.builder( +// new HttpHost("localhost", 9200, "https")) +// .setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() { +// @Override +// public HttpAsyncClientBuilder customizeHttpClient( +// HttpAsyncClientBuilder httpClientBuilder) { +// return httpClientBuilder.setSSLContext(sslContext) +// .setDefaultCredentialsProvider(credentialsProvider); +// } +// }); +// +// RestClient restClient = builder.build(); +// +// // Create the transport with a Jackson mapper +// ElasticsearchTransport transport = new RestClientTransport( +// restClient, new JacksonJsonpMapper()); +// +// return new ElasticsearchClient(transport); +//// asyncClient = new ElasticsearchAsyncClient(transport); +// +// } @Bean - ElasticsearchConverter elasticsearchConverter(SimpleElasticsearchMappingContext mappingContext) { - DefaultConversionService defaultConversionService = new DefaultConversionService(); - defaultConversionService.addConverter(LongToLocalDateTimeConverter.INSTANCE); - return new MappingElasticsearchConverter(mappingContext, defaultConversionService); + public ElasticsearchClient clientByPasswd() throws Exception { + ElasticsearchTransport transport = getElasticsearchTransport(userName, passWord, toHttpHost()); + return new ElasticsearchClient(transport); } - @ReadingConverter - static enum LongToLocalDateTimeConverter implements Converter { - /** - * 单例模式 - */ - INSTANCE; - - private LongToLocalDateTimeConverter() { + private static SSLContext buildSSLContext() { + ClassPathResource resource = new ClassPathResource("http_ca.crt"); + SSLContext sslContext = null; + try { + CertificateFactory factory = CertificateFactory.getInstance("X.509"); + Certificate trustedCa; + try (InputStream is = resource.getInputStream()) { + trustedCa = factory.generateCertificate(is); + } + KeyStore trustStore = KeyStore.getInstance("pkcs12"); + trustStore.load(null, null); + trustStore.setCertificateEntry("ca", trustedCa); + SSLContextBuilder sslContextBuilder = SSLContexts.custom() + .loadTrustMaterial(trustStore, null); + sslContext = sslContextBuilder.build(); + } catch (CertificateException | IOException | KeyStoreException | NoSuchAlgorithmException | + KeyManagementException e) { + throw new RuntimeException("ES连接认证失败", e); } - @Override - public LocalDateTime convert(Long source) { - return Instant.ofEpochMilli(source).atZone(ZoneId.systemDefault()).toLocalDateTime(); + return sslContext; + } + private static ElasticsearchTransport getElasticsearchTransport(String username, String passwd, HttpHost...hosts) { + // 账号密码的配置 + final CredentialsProvider credentialsProvider = new BasicCredentialsProvider(); + credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(username, passwd)); + + // 自签证书的设置,并且还包含了账号密码 + RestClientBuilder.HttpClientConfigCallback callback = httpAsyncClientBuilder -> httpAsyncClientBuilder + .setSSLContext(buildSSLContext()) + .setSSLHostnameVerifier(NoopHostnameVerifier.INSTANCE) + .setDefaultCredentialsProvider(credentialsProvider); + + // 用builder创建RestClient对象 + RestClient client = RestClient + .builder(hosts) + .setHttpClientConfigCallback(callback) + .build(); + + return new RestClientTransport(client, new JacksonJsonpMapper()); + } + /** + * 异步方式 + * + * @return + */ + @Bean + public ElasticsearchAsyncClient elasticsearchAsyncClient() { + HttpHost[] httpHosts = toHttpHost(); + RestClient restClient = RestClient.builder(httpHosts).build(); + RestClientTransport transport = new RestClientTransport(restClient, new JacksonJsonpMapper()); + return new ElasticsearchAsyncClient(transport); + } + /** + * 解析配置的字符串hosts,转为HttpHost对象数组 + * + * @return + */ + private HttpHost[] toHttpHost() { + if (!StringUtils.hasLength(hosts)) { + throw new RuntimeException("invalid elasticsearch configuration. elasticsearch.hosts不能为空!"); + } + // 多个IP逗号隔开 + String[] hostArray = hosts.split(","); + HttpHost[] httpHosts = new HttpHost[hostArray.length]; + HttpHost httpHost; + for (int i = 0; i < hostArray.length; i++) { + String[] strings = hostArray[i].split(":"); + httpHost = new HttpHost(strings[0], Integer.parseInt(strings[1]), "https"); + httpHosts[i] = httpHost; } + return httpHosts; } + +// @Bean +// ElasticsearchConverter elasticsearchConverter(SimpleElasticsearchMappingContext mappingContext) { +// DefaultConversionService defaultConversionService = new DefaultConversionService(); +// defaultConversionService.addConverter(LongToLocalDateTimeConverter.INSTANCE); +// return new MappingElasticsearchConverter(mappingContext, defaultConversionService); +// } +// +// @ReadingConverter +// static enum LongToLocalDateTimeConverter implements Converter { +// /** +// * 单例模式 +// */ +// INSTANCE; +// +// private LongToLocalDateTimeConverter() { +// } +// +// @Override +// public LocalDateTime convert(Long source) { +// return Instant.ofEpochMilli(source).atZone(ZoneId.systemDefault()).toLocalDateTime(); +// } +// } } diff --git a/platform-boot-starter/src/main/resources/application-platform.yml b/platform-boot-starter/src/main/resources/application-platform.yml index 933c0c1..5730fe8 100644 --- a/platform-boot-starter/src/main/resources/application-platform.yml +++ b/platform-boot-starter/src/main/resources/application-platform.yml @@ -1,12 +1,16 @@ server: port: 8080 +elasticsearch: + uris: localhost:9200 + username: elastic + password: '1CVfNF7NPO+HQXprJGaR' #数据连接 spring: datasource: # 使用druid数据源 type: com.alibaba.druid.pool.DruidDataSource driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://localhost:3306/abc?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai&allowMultiQueries=true + url: jdbc:mysql://localhost:3306/abc_test?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai&allowMultiQueries=true username: root password: root druid: diff --git a/platform-common/src/main/java/tech/abc/platform/common/exception/CommonException.java b/platform-common/src/main/java/tech/abc/platform/common/exception/CommonException.java index 5efe7a2..2e74e4a 100644 --- a/platform-common/src/main/java/tech/abc/platform/common/exception/CommonException.java +++ b/platform-common/src/main/java/tech/abc/platform/common/exception/CommonException.java @@ -107,7 +107,7 @@ public enum CommonException implements ExceptionInterface { * 未找到对应的枚举类型 */ ENUM_TYPE_NOT_FOUNT("未找到对应的枚举类型:【{0}】"), - + ELASTICSEARCH_ERROR("Elasticsearch错误:{0}"), ; private String message; diff --git a/pom.xml b/pom.xml index 2f4f54f..faf558a 100644 --- a/pom.xml +++ b/pom.xml @@ -40,12 +40,18 @@ 5.1.0 2.3.0.RELEASE 1.8 + 2.0.1 UTF-8 UTF-8 + + jakarta.json + jakarta.json-api + ${jakartajson.version} + tech.abc