Browse Source

造价管理优化引入elasticsearh

flowtest
zhouhaibin 4 months ago
parent
commit
0ed1b37a1f
  1. 6
      platform-boot-started-costManagement/src/main/java/tech/abc/platform/costManagement/mapper/CostItemDetailMapper.xml
  2. 5
      platform-boot-started-productManagement/pom.xml
  3. 2
      platform-boot-started-productManagement/src/main/java/tech/abc/platform/productManagement/controller/CompanyProductsController.java
  4. 2
      platform-boot-started-productManagement/src/main/java/tech/abc/platform/productManagement/controller/PersonProductsController.java
  5. 2
      platform-boot-started-productManagement/src/main/java/tech/abc/platform/productManagement/controller/SupplierProductsController.java
  6. 2
      platform-boot-started-productManagement/src/main/java/tech/abc/platform/productManagement/entity/CompanyProductModel.java
  7. 38
      platform-boot-started-productManagement/src/main/java/tech/abc/platform/productManagement/entity/CompanyProducts.java
  8. 38
      platform-boot-started-productManagement/src/main/java/tech/abc/platform/productManagement/entity/PersonProducts.java
  9. 38
      platform-boot-started-productManagement/src/main/java/tech/abc/platform/productManagement/entity/SupplierProducts.java
  10. 11
      platform-boot-started-productManagement/src/main/java/tech/abc/platform/productManagement/service/impl/SupplierProductsServiceImpl.java
  11. 4
      platform-boot-started-productManagement/src/main/java/tech/abc/platform/productManagement/vo/CompanyProductModelVO.java
  12. 40
      platform-boot-started-productManagement/src/main/java/tech/abc/platform/productManagement/vo/CompanyProductsVO.java
  13. 28
      platform-boot-started-productManagement/src/main/java/tech/abc/platform/productManagement/vo/PersonProductsVO.java
  14. 30
      platform-boot-started-productManagement/src/main/java/tech/abc/platform/productManagement/vo/SupplierProductsVO.java
  15. 2
      platform-boot-starter-demo/src/main/resources/application-dev.yml
  16. 31
      platform-boot-starter-demo/src/main/resources/http_ca.crt
  17. 23
      platform-boot-starter-elasticsearch/pom.xml
  18. 205
      platform-boot-starter-elasticsearch/src/main/java/tech/abc/platform/elasticsearch/config/ElasticSearchConfig.java
  19. 6
      platform-boot-starter/src/main/resources/application-platform.yml
  20. 2
      platform-common/src/main/java/tech/abc/platform/common/exception/CommonException.java
  21. 6
      pom.xml

6
platform-boot-started-costManagement/src/main/java/tech/abc/platform/costManagement/mapper/CostItemDetailMapper.xml

@ -86,7 +86,7 @@
<if test="queryVO.productType == '供应商产品库' or queryVO.productType == '全产品库' ">
SELECT
<include refid="getProductsPageByType_Column_List"/>
,'供应商产品库' 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
<include refid="getProductsPageByType_Query"/>
</if>
@ -96,7 +96,7 @@
</if>
SELECT
<include refid="getProductsPageByType_Column_List"/>
,'公司产品库' 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
<include refid="getProductsPageByType_Query"/>
</if>
@ -106,7 +106,7 @@
</if>
SELECT
<include refid="getProductsPageByType_Column_List"/>
,'个人产品库' 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
<include refid="getProductsPageByType_Query"/>
</if>

5
platform-boot-started-productManagement/pom.xml

@ -19,7 +19,10 @@
<groupId>tech.abc</groupId>
<artifactId>platform-common</artifactId>
</dependency>
<dependency>
<groupId>tech.abc</groupId>
<artifactId>platform-boot-starter-elasticsearch</artifactId>
</dependency>
</dependencies>

2
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);
});

2
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);
});

2
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);

2
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;

38
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;
/********非库表存储属性*****/
}

38
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;
/********非库表存储属性*****/
}

38
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;
/********非库表存储属性*****/
}

11
platform-boot-started-productManagement/src/main/java/tech/abc/platform/productManagement/service/impl/SupplierProductsServiceImpl.java

@ -58,17 +58,6 @@ public class SupplierProductsServiceImpl extends BaseServiceImpl<SupplierProduct
}
@Override
public void afterRemove(SupplierProducts entity) {
// 删除供应商产品信息时,将厂商产品型号和型号规格参数删除
String modelId = entity.getModelId();
if (StringUtils.isNotBlank(modelId)) {
LambdaUpdateWrapper<SupplierProductModel> modelUpdateWrapper = new LambdaUpdateWrapper<>(); // 临时数据标记
modelUpdateWrapper.eq(SupplierProductModel::getId, modelId);
supplierProductModelMapper.delete(modelUpdateWrapper);
// 更新型号规格参数的is_temporary标记为临时数据
LambdaUpdateWrapper<SupplierProductModelDetails> detailsUpdateWrapper = new LambdaUpdateWrapper<>();
detailsUpdateWrapper.eq(SupplierProductModelDetails::getModelId, modelId);
supplierProductModelDetailsMapper.delete(detailsUpdateWrapper);
}
}
@Override
public void beforeAdd(SupplierProducts entity) {

4
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;
/**

40
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;
/********非库表存储属性*****/

28
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;
/********非库表存储属性*****/

30
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;
/********非库表存储属性*****/

2
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设置

31
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-----

23
platform-boot-starter-elasticsearch/pom.xml

@ -6,6 +6,7 @@
<groupId>tech.abc</groupId>
<artifactId>abc-development-platform</artifactId>
<version>5.1.0</version>
</parent>
@ -21,11 +22,27 @@
<artifactId>platform-common</artifactId>
</dependency>
<!--全文搜索-->
<!-- &lt;!&ndash;全文搜索&ndash;&gt;-->
<!-- <dependency>-->
<!-- <groupId>org.springframework.boot</groupId>-->
<!-- <artifactId>spring-boot-starter-data-elasticsearch</artifactId>-->
<!-- </dependency>-->
<!--es搜索-->
<dependency>
<groupId>co.elastic.clients</groupId>
<artifactId>elasticsearch-java</artifactId>
<version>8.1.3</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.13.3</version>
</dependency>
<!-- <dependency>-->
<!-- <groupId>jakarta.json</groupId>-->
<!-- <artifactId>jakarta.json-api</artifactId>-->
<!-- <version>2.0.1</version>-->
<!-- </dependency>-->
<!--读取Word/Excel/PowerPoint文件内容-->
<dependency>

205
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;
@Bean
ElasticsearchConverter elasticsearchConverter(SimpleElasticsearchMappingContext mappingContext) {
DefaultConversionService defaultConversionService = new DefaultConversionService();
defaultConversionService.addConverter(LongToLocalDateTimeConverter.INSTANCE);
return new MappingElasticsearchConverter(mappingContext, defaultConversionService);
}
@Value("${elasticsearch.username}")
private String userName;
@ReadingConverter
static enum LongToLocalDateTimeConverter implements Converter<Long, LocalDateTime> {
@Value("${elasticsearch.password}")
private String passWord;
/**
* 单例模式
* 同步方式
*
* @return
*/
INSTANCE;
// @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
public ElasticsearchClient clientByPasswd() throws Exception {
ElasticsearchTransport transport = getElasticsearchTransport(userName, passWord, toHttpHost());
return new ElasticsearchClient(transport);
}
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<Long, LocalDateTime> {
// /**
// * 单例模式
// */
// INSTANCE;
//
// private LongToLocalDateTimeConverter() {
// }
//
// @Override
// public LocalDateTime convert(Long source) {
// return Instant.ofEpochMilli(source).atZone(ZoneId.systemDefault()).toLocalDateTime();
// }
// }
}

6
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:

2
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;

6
pom.xml

@ -40,12 +40,18 @@
<platform.version>5.1.0</platform.version>
<springboot.version>2.3.0.RELEASE</springboot.version>
<java.version>1.8</java.version>
<jakartajson.version>2.0.1</jakartajson.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>
<!-- 依赖声明 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>jakarta.json</groupId>
<artifactId>jakarta.json-api</artifactId>
<version>${jakartajson.version}</version>
</dependency>
<!-- 邮件-->
<dependency>
<groupId>tech.abc</groupId>

Loading…
Cancel
Save