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. 207
      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 == '全产品库' "> <if test="queryVO.productType == '供应商产品库' or queryVO.productType == '全产品库' ">
SELECT SELECT
<include refid="getProductsPageByType_Column_List"/> <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 FROM pmg_supplier_products
<include refid="getProductsPageByType_Query"/> <include refid="getProductsPageByType_Query"/>
</if> </if>
@ -96,7 +96,7 @@
</if> </if>
SELECT SELECT
<include refid="getProductsPageByType_Column_List"/> <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 FROM pmg_company_products
<include refid="getProductsPageByType_Query"/> <include refid="getProductsPageByType_Query"/>
</if> </if>
@ -106,7 +106,7 @@
</if> </if>
SELECT SELECT
<include refid="getProductsPageByType_Column_List"/> <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 FROM pmg_person_products
<include refid="getProductsPageByType_Query"/> <include refid="getProductsPageByType_Query"/>
</if> </if>

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

@ -19,7 +19,10 @@
<groupId>tech.abc</groupId> <groupId>tech.abc</groupId>
<artifactId>platform-common</artifactId> <artifactId>platform-common</artifactId>
</dependency> </dependency>
<dependency>
<groupId>tech.abc</groupId>
<artifactId>platform-boot-starter-elasticsearch</artifactId>
</dependency>
</dependencies> </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); CompanyProductsVO vo = convert2VO(x);
if(StringUtils.isNotEmpty(vo.getModelId())){ if(StringUtils.isNotEmpty(vo.getModelId())){
String description = companyProductModelService.getById(vo.getModelId()).getDescription(); String description = companyProductModelService.getById(vo.getModelId()).getDescription();
vo.setModelDescription(description); vo.setProductSpecifications(description);
} }
voList.add(vo); 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)){ if(StringUtils.isNotEmpty(modelId)){
String description = personProductModelService.getById(modelId).getDescription(); String description = personProductModelService.getById(modelId).getDescription();
vo.setModelDescription(description); vo.setProductSpecifications(description);
} }
voList.add(vo); 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)){ if(StringUtils.isNotEmpty(modelId)){
String description = supplierProductModelService.getById(modelId).getDescription(); String description = supplierProductModelService.getById(modelId).getDescription();
vo.setModelDescription(description); vo.setProductSpecifications(description);
} }
voList.add(vo); 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 { public class CompanyProductModel extends BaseEntity {
/** /**
* 产品描述 * 产品规格
*/ */
@TableField("description") @TableField("description")
private String 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") @TableField("supplier_information_id")
private String supplierInformationId; private String supplierInformationId;
/** /**
* 公司产品型号id * 公司产品型号id
*/ */
@TableField("model_id") @TableField("model_id")
private String modelId; private String modelId;
/**
* 公司产品规格
*/
@TableField("product_specifications")
private String productSpecifications;
/** /**
* 供应商产品id * 供应商产品id
*/ */
@ -67,6 +71,38 @@ public class CompanyProducts extends BaseEntity {
*/ */
@TableField("remarks") @TableField("remarks")
private String 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) @Accessors(chain = true)
@TableName("pmg_person_products") @TableName("pmg_person_products")
public class PersonProducts extends BaseEntity { public class PersonProducts extends BaseEntity {
/** /**
* 个人产品型号id * 个人产品型号id
*/ */
@TableField("model_id") @TableField("model_id")
private String modelId; private String modelId;
/**
* 个人产品规格
*/
@TableField("product_specifications")
private String productSpecifications;
/** /**
* 供应商id * 供应商id
@ -68,6 +72,38 @@ public class PersonProducts extends BaseEntity {
*/ */
@TableField("supplier_products_id") @TableField("supplier_products_id")
private String supplierProductsId; 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") @TableField("model_id")
private String modelId; private String modelId;
/**
* 个人产品规格
*/
@TableField("product_specifications")
private String productSpecifications;
/** /**
* 产品名称 * 产品名称
*/ */
@ -62,6 +68,38 @@ public class SupplierProducts extends BaseEntity {
*/ */
@TableField("remarks") @TableField("remarks")
private String 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 @Override
public void afterRemove(SupplierProducts entity) { 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 @Override
public void beforeAdd(SupplierProducts entity) { 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) @Accessors(chain = true)
public class CompanyProductModelVO extends BaseVO { public class CompanyProductModelVO extends BaseVO {
/** /**
* 产品描述 * 产品规格
*/ */
@NotBlank(message = "【产品描述】不能为空") @NotBlank(message = "【产品规格】不能为空")
private String description; 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; package tech.abc.platform.productManagement.vo;
import com.baomidou.mybatisplus.annotation.TableField;
import tech.abc.platform.common.base.BaseVO; import tech.abc.platform.common.base.BaseVO;
import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal; import java.math.BigDecimal;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
@ -19,6 +21,11 @@ import lombok.experimental.Accessors;
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
@Accessors(chain = true) @Accessors(chain = true)
public class CompanyProductsVO extends BaseVO { public class CompanyProductsVO extends BaseVO {
/**
* 公司产品型号id
*/
private String modelId;
/** /**
* 供应商ID * 供应商ID
*/ */
@ -28,11 +35,6 @@ public class CompanyProductsVO extends BaseVO {
*/ */
private String supplierName; 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; private BigDecimal productPrice;
/** /**
@ -62,14 +64,36 @@ public class CompanyProductsVO extends BaseVO {
*/ */
private String remarks; private String remarks;
/** /**
* 产品描述 * 产品规格
*/ */
private String modelDescription; private String productSpecifications;
/** /**
* 供应商产品id * 供应商产品id
*/ */
private String supplierProductsId; 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 tech.abc.platform.common.base.BaseVO;
import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal; import java.math.BigDecimal;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
@ -44,7 +45,7 @@ public class PersonProductsVO extends BaseVO {
/** /**
* 产品价格 * 产品价格
*/ */
@NotBlank(message = "【产品价格】不能为空") @NotNull(message = "【产品价格】不能为空")
private BigDecimal productPrice; private BigDecimal productPrice;
/** /**
@ -62,10 +63,31 @@ public class PersonProductsVO extends BaseVO {
*/ */
private String supplierProductsId; 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; package tech.abc.platform.productManagement.vo;
import com.baomidou.mybatisplus.annotation.TableField;
import tech.abc.platform.common.base.BaseVO; import tech.abc.platform.common.base.BaseVO;
import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal; import java.math.BigDecimal;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
@ -48,23 +50,43 @@ public class SupplierProductsVO extends BaseVO {
/** /**
* 产品价格 * 产品价格
*/ */
@NotBlank(message = "【产品价格】不能为空") @NotNull(message = "【产品价格】不能为空")
private BigDecimal productPrice; private BigDecimal productPrice;
/** /**
* 信息来源 * 信息来源
*/ */
private String sourceInformation; private String sourceInformation;
/** /**
* 备注 * 备注
*/ */
private String remarks; 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: spring:
datasource: 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 username: root
password: root password: root
# redis设置 # 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> <groupId>tech.abc</groupId>
<artifactId>abc-development-platform</artifactId> <artifactId>abc-development-platform</artifactId>
<version>5.1.0</version> <version>5.1.0</version>
</parent> </parent>
@ -21,11 +22,27 @@
<artifactId>platform-common</artifactId> <artifactId>platform-common</artifactId>
</dependency> </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> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>com.fasterxml.jackson.core</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId> <artifactId>jackson-databind</artifactId>
<version>2.13.3</version>
</dependency> </dependency>
<!-- <dependency>-->
<!-- <groupId>jakarta.json</groupId>-->
<!-- <artifactId>jakarta.json-api</artifactId>-->
<!-- <version>2.0.1</version>-->
<!-- </dependency>-->
<!--读取Word/Excel/PowerPoint文件内容--> <!--读取Word/Excel/PowerPoint文件内容-->
<dependency> <dependency>

207
platform-boot-starter-elasticsearch/src/main/java/tech/abc/platform/elasticsearch/config/ElasticSearchConfig.java

@ -1,14 +1,43 @@
package tech.abc.platform.elasticsearch.config; 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.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.core.convert.converter.Converter; import org.springframework.core.io.ClassPathResource;
import org.springframework.core.convert.support.DefaultConversionService; import org.springframework.util.StringUtils;
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 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.Instant;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.ZoneId; import java.time.ZoneId;
@ -20,28 +49,164 @@ import java.time.ZoneId;
* @date 2024-02-21 * @date 2024-02-21
*/ */
@Configuration @Configuration
public class ElasticSearchConfig { 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 @Bean
ElasticsearchConverter elasticsearchConverter(SimpleElasticsearchMappingContext mappingContext) { public ElasticsearchClient clientByPasswd() throws Exception {
DefaultConversionService defaultConversionService = new DefaultConversionService(); ElasticsearchTransport transport = getElasticsearchTransport(userName, passWord, toHttpHost());
defaultConversionService.addConverter(LongToLocalDateTimeConverter.INSTANCE); return new ElasticsearchClient(transport);
return new MappingElasticsearchConverter(mappingContext, defaultConversionService);
} }
@ReadingConverter private static SSLContext buildSSLContext() {
static enum LongToLocalDateTimeConverter implements Converter<Long, LocalDateTime> { ClassPathResource resource = new ClassPathResource("http_ca.crt");
/** SSLContext sslContext = null;
* 单例模式 try {
*/ CertificateFactory factory = CertificateFactory.getInstance("X.509");
INSTANCE; Certificate trustedCa;
try (InputStream is = resource.getInputStream()) {
private LongToLocalDateTimeConverter() { 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 return sslContext;
public LocalDateTime convert(Long source) { }
return Instant.ofEpochMilli(source).atZone(ZoneId.systemDefault()).toLocalDateTime(); 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: server:
port: 8080 port: 8080
elasticsearch:
uris: localhost:9200
username: elastic
password: '1CVfNF7NPO+HQXprJGaR'
#数据连接 #数据连接
spring: spring:
datasource: datasource:
# 使用druid数据源 # 使用druid数据源
type: com.alibaba.druid.pool.DruidDataSource type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver 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 username: root
password: root password: root
druid: 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}】"), ENUM_TYPE_NOT_FOUNT("未找到对应的枚举类型:【{0}】"),
ELASTICSEARCH_ERROR("Elasticsearch错误:{0}"),
; ;
private String message; private String message;

6
pom.xml

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

Loading…
Cancel
Save