购物车+订单

main
Ruikang Zhang 2024-07-10 18:57:31 +08:00
parent 6a0aa13c3c
commit da34dac07a
90 changed files with 285 additions and 6047 deletions

24
pom.xml
View File

@ -290,33 +290,47 @@
</dependency>
<!-- 系统服务公共依赖 -->
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-mall-car-common</artifactId>
<version>${ruoyi.version}</version>
</dependency>
<!-- 系统服务远程调用 -->
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-mall-car-remote</artifactId>
<version>${ruoyi.version}</version>
</dependency>
<!-- 商品服务公共依赖 -->
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-mall-product-common</artifactId>
<version>3.6.0</version>
<version>${ruoyi.version}</version>
</dependency>
<!-- 商品服务远程调用依赖 -->
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-mall-product-remote</artifactId>
<version>3.6.0</version>
<version>${ruoyi.version}</version>
</dependency>
<!-- 商品搜索公共依赖 -->
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-mall-search-common</artifactId>
<version>3.6.0</version>
<version>${ruoyi.version}</version>
</dependency>
<!-- 商品搜索远程调用依赖 -->
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-mall-search-remote</artifactId>
<version>3.6.0</version>
<version>${ruoyi.version}</version>
</dependency>
<!-- ES官网 驱动包 -->
@ -330,7 +344,7 @@
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-mall-product-cache</artifactId>
<version>3.6.0</version>
<version>${ruoyi.version}</version>
</dependency>
</dependencies>
</dependencyManagement>

View File

@ -1,6 +1,4 @@
package com.ruoyi.auth.controller;
import com.ruoyi.auth.service.SysCUserService;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.utils.StringUtils;

View File

@ -1,15 +0,0 @@
package com.ruoyi.system.domain.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel("es访问必须参数")
public class EsDocBaseVo {
@ApiModelProperty(value = "索引名称",required = true)
private String indexName;
@ApiModelProperty(value = "类型名称默认_doc",required = true)
private String typeName="_doc";
}

View File

@ -1,36 +0,0 @@
package com.ruoyi.system.domain.vo;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
import java.util.Map;
/**
* @AuthorShenJiaFeng
* @Packagecom.bawei.base.es.domain
* @Projectmall_cloud
* @nameEsDocEntity
* @Date2024/4/24 9:36
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class EsDocEntity {
/**
*
*/
private String index;
/**
*
*/
private List<Map<String,Object>> datas;
/**
*
*/
private String indexIdName;
}

View File

@ -1,19 +0,0 @@
package com.ruoyi.system.domain.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Map;
@Data
@ApiModel("插入Es数据实体")
public class EsDocInsertVo extends EsDocBaseVo {
@ApiModelProperty("数据唯一id")
public String id;
@ApiModelProperty(value = "数据内容",required = true)
private Map<String,Object> data;
@ApiModelProperty("是否立即刷新磁盘")
private boolean reflush = true;
}

View File

@ -1,24 +0,0 @@
package com.ruoyi.system.domain.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
import java.util.Map;
@Data
@ApiModel("es文档查询参数")
public class EsDocQueryVo extends EsDocBaseVo{
@ApiModelProperty("query参数")
private Map<String,Object> queryObj;
@ApiModelProperty("全文检索关键字")
private String keyWord;
@ApiModelProperty("分页条件")
private PageVo pageVo = new PageVo();
@ApiModelProperty("检索字段")
private List<String> searchFields;
@ApiModelProperty("高亮字段,包含在检索字段,不传参则默认检索字段全部高亮")
private List<String> highLightFields;
}

View File

@ -1,17 +0,0 @@
package com.ruoyi.system.domain.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel("分页参数")
public class PageVo {
@ApiModelProperty("每页条数")
private int pageSize = 10;
@ApiModelProperty("当前页")
private Integer currentPage = 1;
@ApiModelProperty("总数")
private Long totalDocs;
}

View File

@ -5,6 +5,7 @@ import com.ruoyi.system.domain.vo.EsDocQueryVo;
import com.ruoyi.system.remote.factory.RemoteEsDocFallbackFactory;
import io.swagger.annotations.ApiOperation;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import com.ruoyi.common.core.constant.ServiceNameConstants;
@ -27,8 +28,7 @@ public interface RemoteEsDocService {
@PostMapping("/queryDocs")
public R queryDocs(@RequestBody EsDocQueryVo esDocInsertVo);
@PostMapping("/deleteDocs")
public R<Boolean> deleteDocsById(@RequestParam(value = "docsId") String docsId);
@DeleteMapping("/querydelDoce")
R<Boolean> querydelDoce(@RequestBody List<EsDocInsertVo> esDocInsertVo);
}

View File

@ -32,8 +32,9 @@ public class RemoteEsDocFallbackFactory implements FallbackFactory<RemoteEsDocSe
return R.ok(false, "查询失败,请稍后重试");
}
@Override
public R<Boolean> deleteDocsById(String docsId) {
public R<Boolean> querydelDoce(List<EsDocInsertVo> esDocInsertVo) {
return R.ok(false, "删除失败,请稍后重试");
}

View File

@ -1,21 +0,0 @@
package com.ruoyi.es;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import com.ruoyi.common.security.annotation.EnableRyFeignClients;
import com.ruoyi.common.swagger.annotation.EnableCustomSwagger2;
/**
* es
*
* @author ruoyi
*/
@EnableCustomSwagger2
@EnableRyFeignClients
@SpringBootApplication
public class RuoYiEsApplication {
public static void main(String[] args) {
SpringApplication.run(RuoYiEsApplication.class, args);
System.out.println("(♥◠‿◠)ノ゙ Es全文检索模块启动成功 ლ(´ڡ`ლ)゙ ");
}
}

View File

@ -1,9 +0,0 @@
package com.ruoyi.es.conf;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
@Component
@Slf4j
public class EsConfiguration {
}

View File

@ -1,51 +0,0 @@
package com.ruoyi.es.controller;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.es.service.EsDocService;
import com.ruoyi.system.domain.vo.EsDocInsertVo;
import com.ruoyi.system.domain.vo.EsDocQueryVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@Api(tags = "Es文档管理")
//文档相当于mysql中的一行数据,类似DML和DQL
public class EsDocController {
@Autowired
private EsDocService esDocService;
@PostMapping("/batchInsertDocs")
@ApiOperation(value = "批量插入文档")
public R<Boolean> batchInsertDocs(@RequestBody List<EsDocInsertVo> esDocInsertVo){
return esDocService.batchInsertDocs(esDocInsertVo);
}
@PostMapping("/queryDocs")
@ApiOperation(value = "根据传入条件查询Es的文档数据")
public R queryDocs(@RequestBody EsDocQueryVo esDocInsertVo){
return esDocService.queryDocs(esDocInsertVo);
}
@PostMapping("/deleteDocs")
@ApiOperation("/根据索引名称和文档id删除索引数据")
public R<Boolean> deleteDocsById(@RequestParam(value = "docsId") String docsId){
return esDocService.deleteDocsById(docsId);
}
// TODO 自动补全联想
@GetMapping("/querySuggestions/{indexName}")
@ApiOperation(value = "自动补全联想")
public R querySuggestions(@PathVariable String indexName, @RequestParam("keyWord") String keyWord,@RequestParam("suggestField") String suggestField ){
return esDocService.querySuggestions(indexName,keyWord,suggestField);
}
}

View File

@ -1,89 +0,0 @@
package com.ruoyi.es.controller;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.es.service.EsIndexService;
import com.ruoyi.system.domain.vo.EsDocQueryVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.Map;
@RestController
@RequestMapping("/esIndex")
@Api(value = "ES索引管理",tags = "ES索引管理")
// 索引相当于mysql中的库,在es6之后,取消类型(相当于mysql中的表),索引默认只有一个类型-即库表合一 类似DDL
public class EsIndexController {
@Autowired
private EsIndexService esIndexService;
/**
*
*
* @return
*/
@GetMapping("/create")
@ApiOperation(value = "根据索引名称创建索引")
public R<Boolean> indexCreate(@RequestParam String indexName) {
return esIndexService.indexCreate(indexName);
}
/**
*
*
* @return
*/
@GetMapping("/createWithMapping")
@ApiOperation(value = "根据索引名称、映射结构创建索引")
public R<Boolean> indexCreateWithMapping(@RequestParam String indexName, @RequestParam String indexMapping) {
return esIndexService.indexCreateWithMapping(indexName,indexMapping);
}
/**
*
*
* @return
*/
@GetMapping("/indexExit")
@ApiOperation(value = "根据索引名称查询索引是否存在")
public R<Boolean> indexExit(@RequestParam String indexName) {
return esIndexService.indexExit(indexName);
}
/**
*
*
* @return
*/
@GetMapping("/indexDelete")
@ApiOperation(value = "根据索引名称删除索引")
public R<Boolean> indexDelete(@RequestParam String indexName) {
return esIndexService.indexDelete(indexName);
}
/**
* mapping
*
* @return
*/
@GetMapping("/indexGetMapping")
@ApiOperation(value = "根据索引名称获取mapping")
public R<Map> indexGetMapping(@RequestParam String indexName) {
return esIndexService.indexGetMapping(indexName);
}
/**
*
*/
@GetMapping("/queryAllIndex")
@ApiOperation(value = "查询所有索引列表")
public R<Map> queryAllIndex(@RequestBody EsDocQueryVo esDocInsertVo) {
return esIndexService.queryAllIndex(esDocInsertVo);
}
}

View File

@ -1,18 +0,0 @@
package com.ruoyi.es.service;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.system.domain.vo.EsDocInsertVo;
import com.ruoyi.system.domain.vo.EsDocQueryVo;
import java.util.List;
import java.util.Map;
public interface EsDocService {
R<Boolean> batchInsertDocs(List<EsDocInsertVo> esDocInsertVo);
R<List<Map>> queryDocs(EsDocQueryVo esDocInsertVo);
R<Boolean> deleteDocsById(String docsId);
R querySuggestions(String indexName, String keyWord, String suggestField);
}

View File

@ -1,20 +0,0 @@
package com.ruoyi.es.service;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.system.domain.vo.EsDocQueryVo;
import java.util.Map;
public interface EsIndexService {
R<Boolean> indexCreate(String indexName);
R<Boolean> indexExit(String indexName);
R<Boolean> indexDelete(String indexName);
R<Boolean> indexCreateWithMapping(String indexName, String indexMapping);
R<Map> indexGetMapping(String indexName);
R<Map> queryAllIndex(EsDocQueryVo esDocInsertVo);
}

View File

@ -1,110 +0,0 @@
package com.ruoyi.es.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.ruoyi.common.core.constant.EsConstant;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.exception.ServiceException;
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.es.service.EsDocService;
import com.ruoyi.system.domain.vo.EsDocInsertVo;
import com.ruoyi.system.domain.vo.EsDocQueryVo;
import lombok.extern.slf4j.Slf4j;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
import org.elasticsearch.action.bulk.BulkRequest;
import org.elasticsearch.action.bulk.BulkResponse;
import org.elasticsearch.action.delete.DeleteRequest;
import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.support.master.AcknowledgedResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.rest.RestStatus;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
@Service
@Slf4j
public class EsDocServiceImpl implements EsDocService {
@Autowired
private RestHighLevelClient restHighLevelClient;
@Override
public R<Boolean> batchInsertDocs(List<EsDocInsertVo> esDocInsertVo) {
BulkRequest request = new BulkRequest();
esDocInsertVo.forEach(e -> {
IndexRequest source = new IndexRequest(e.getIndexName()).source(e.getData(), XContentType.JSON);
if (StringUtils.isNotEmpty(e.getId())) {
source.id(e.getId());
}
request.add(source);
});
try {
BulkResponse bulk = restHighLevelClient.bulk(request, RequestOptions.DEFAULT);
return R.ok(true, "插入成功");
} catch (IOException e) {
e.printStackTrace();
}
return R.fail(false, "插入失败");
}
@Override
public R<List<Map>> queryDocs(EsDocQueryVo esDocInsertVo) {
if (StringUtils.isEmpty(esDocInsertVo.getKeyWord())){
throw new ServiceException("搜索参数不为空");
}
SearchRequest request = new SearchRequest(esDocInsertVo.getIndexName());
//构建查询参数
SearchSourceBuilder builder = new SearchSourceBuilder();
builder.query(QueryBuilders.matchAllQuery());
//构建分页参数
builder.from((esDocInsertVo.getPageVo().getCurrentPage() - 1) * esDocInsertVo.getPageVo().getPageSize());
builder.size(esDocInsertVo.getPageVo().getPageSize());
//构建排序参数
try {
SearchResponse search = restHighLevelClient.search(request, RequestOptions.DEFAULT);
log.info("查询结果:{}", JSONObject.toJSONString(search));
SearchHit[] hits = search.getHits().getHits();
List<Map<String,Object>> resultData = new ArrayList<>(hits.length);
Arrays.stream(hits).forEach(h->{
Map<String, Object> sourceAsMap = h.getSourceAsMap();
resultData.add(sourceAsMap);
});
} catch (IOException e) {
log.error("根据条件查询es数据失败{}", e);
}
return null;
}
@Override
public R<Boolean> deleteDocsById(String docsId) {
DeleteRequest deleteRequest = new DeleteRequest(EsConstant.INDEX_NAME, docsId);
try {
DeleteResponse deleteResponse = restHighLevelClient.delete(deleteRequest, RequestOptions.DEFAULT);
return R.ok(true,"删除成功");
} catch (IOException e) {
throw new RuntimeException("删除失败");
}
}
@Override
public R querySuggestions(String indexName, String keyWord, String suggestField) {
return null;
}
}

View File

@ -1,148 +0,0 @@
package com.ruoyi.es.service.impl;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.exception.ServiceException;
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.es.service.EsIndexService;
import com.ruoyi.system.domain.vo.EsDocQueryVo;
import lombok.extern.slf4j.Slf4j;
import org.elasticsearch.action.admin.indices.alias.get.GetAliasesRequest;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
import org.elasticsearch.action.support.master.AcknowledgedResponse;
import org.elasticsearch.client.GetAliasesResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.indices.*;
import org.elasticsearch.cluster.metadata.AliasMetaData;
import org.elasticsearch.cluster.metadata.MappingMetaData;
import org.elasticsearch.common.xcontent.XContentType;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.io.IOException;
import java.util.*;
@Service
@Slf4j
public class EsIndexServiceImpl implements EsIndexService {
@Autowired
private RestHighLevelClient restHighLevelClient;
@Override
public R<Boolean> indexCreate(String indexName) {
//如果索引为空 抛出异常
if (StringUtils.isEmpty(indexName)) {
throw new ServiceException("索引名称不能为空");
}
CreateIndexRequest request = new CreateIndexRequest(indexName);
try {
CreateIndexResponse createIndexResponse = restHighLevelClient.indices().create(request, RequestOptions.DEFAULT);
if (createIndexResponse.isAcknowledged()) {
return R.ok(true);
}
} catch (IOException e) {
log.error("连接ES服务异常:{}", e);
throw new RuntimeException("创建索引失败,请联系管理员或查看服务日志");
}
return R.fail(false, "索引创建失败");
}
@Override
public R<Boolean> indexExit(String indexName) {
if (StringUtils.isEmpty(indexName)) {
throw new ServiceException("indexName不能为空");
}
GetIndexRequest indexRequest = new GetIndexRequest(indexName);
try {
boolean exists = restHighLevelClient.indices().exists(indexRequest, RequestOptions.DEFAULT);
return R.ok(exists);
} catch (IOException e) {
e.printStackTrace();
}
return R.fail(false, "查询失败!");
}
@Override
public R<Boolean> indexDelete(String indexName) {
if (StringUtils.isEmpty(indexName)) {
throw new ServiceException("indexName不能为空 ");
}
DeleteIndexRequest request = new DeleteIndexRequest(indexName);
try {
AcknowledgedResponse delete = restHighLevelClient.indices().delete(request, RequestOptions.DEFAULT);
if (delete.isAcknowledged()) {
return R.ok(true, "删除成功!");
}
} catch (IOException e) {
log.error("删除索引失败:{}", e);
throw new RuntimeException("调用es服务删除索引失败详情请查看日志");
}
return R.fail(false, "删除索引失败");
}
@Override
public R<Boolean> indexCreateWithMapping(String indexName, String indexMapping) {
if (StringUtils.isEmpty(indexName) ||
StringUtils.isEmpty(indexMapping)) {
throw new ServiceException("indexName、indexMapping不能为空");
}
CreateIndexRequest request = new CreateIndexRequest(indexName);
request.source(indexMapping, XContentType.JSON);
try {
CreateIndexResponse createIndexResponse = restHighLevelClient.indices().create(request, RequestOptions.DEFAULT);
if (createIndexResponse.isAcknowledged()){
return R.ok(true,"创建索引成功");
}
} catch (IOException e) {
log.error("调用es创建索引异常{}",e);
throw new RuntimeException("创建索引失败");
}
return R.fail(false,"创建索引失败");
}
@Override
public R<Map> indexGetMapping(String indexName) {
if (StringUtils.isEmpty(indexName)){
throw new ServiceException("indexName不能为空");
}
GetMappingsRequest request = new GetMappingsRequest().indices(indexName);
try {
GetMappingsResponse response = restHighLevelClient.indices().getMapping(request, RequestOptions.DEFAULT);
Map<String, MappingMetaData> mappings = response.mappings();
MappingMetaData mappingMetaData = mappings.get(indexName);
Map<String, Object> stringObjectMap = mappingMetaData.sourceAsMap();
return R.ok(stringObjectMap,"操作成功");
} catch (IOException e) {
log.error("根据索引名称获取Mapping异常:{}",e);
throw new RuntimeException("根据索引名称获取Mapping异常");
}
}
@Override
public R<Map> queryAllIndex(EsDocQueryVo esDocInsertVo) {
// TODO 关键字查询
List<Map<String, Object>> resultList = new ArrayList<>();
GetAliasesRequest request = new GetAliasesRequest();
GetAliasesResponse alias = null;
try {
alias = restHighLevelClient.indices().getAlias(request, RequestOptions.DEFAULT);
} catch (IOException e) {
throw new RuntimeException(e);
}
Map<String, Set<AliasMetaData>> map = alias.getAliases();
map.forEach((k, v) -> {
if (!k.startsWith(".")) {//忽略elasticesearch 默认的
Map map1 = new HashMap();
map1.put("indexName", k);
resultList.add(map1);
}
});
log.info(String.valueOf(resultList));
return R.ok((Map) resultList);
}
}

View File

@ -15,6 +15,7 @@
<module>ruoyi-mall-product</module>
<module>ruoyi-mall-search</module>
<module>ruoyi-mall-user</module>
<module>ruoyi-mall-car</module>
</modules>
<properties>

View File

@ -0,0 +1,26 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-mall</artifactId>
<version>3.6.0</version>
</parent>
<artifactId>ruoyi-mall-car</artifactId>
<packaging>pom</packaging>
<modules>
<module>ruoyi-mall-car-common</module>
<module>ruoyi-mall-car-remote</module>
<module>ruoyi-mall-car-service</module>
</modules>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
</project>

View File

@ -0,0 +1,35 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-mall-car</artifactId>
<version>3.6.0</version>
</parent>
<artifactId>ruoyi-mall-car-common</artifactId>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!-- 项目公共核心依赖 -->
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-common-core</artifactId>
</dependency>
<!-- Mybatis-plus 依赖 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.4.1</version>
</dependency>
</dependencies>
</project>

View File

@ -0,0 +1,26 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-mall-car</artifactId>
<version>3.6.0</version>
</parent>
<artifactId>ruoyi-mall-car-remote</artifactId>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!-- 引入 购物车commmon依赖-->
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-mall-car-common</artifactId>
</dependency>
</dependencies>
</project>

View File

@ -0,0 +1,167 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-mall-car</artifactId>
<version>3.6.0</version>
</parent>
<artifactId>ruoyi-mall-car-service</artifactId>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!-- SpringCloud Alibaba Nacos -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- SpringCloud Alibaba Nacos Config -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!-- SpringCloud Alibaba Sentinel -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
<!-- SpringBoot Actuator -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- Swagger UI -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>${swagger.fox.version}</version>
</dependency>
<!-- Mysql Connector -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- BaWei Common DataSource -->
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-common-datasource</artifactId>
</dependency>
<!-- BaWei Common DataScope -->
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-common-datascope</artifactId>
</dependency>
<!-- BaWei Common Log -->
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-common-log</artifactId>
</dependency>
<!-- BaWei Common Swagger -->
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-common-swagger</artifactId>
</dependency>
<!-- 商品服务公共依赖 -->
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-mall-product-common</artifactId>
</dependency>
<!-- 商品缓存 -->
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-mall-product-cache</artifactId>
</dependency>
<!-- 消息队列 -->
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-common-rabbit</artifactId>
</dependency>
<!-- 引入购物车公共模块-->
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-mall-car-common</artifactId>
</dependency>
<!-- 购物车远程调用-->
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-mall-car-remote</artifactId>
</dependency>
<!-- 引入商品服务-->
<!-- <dependency>-->
<!-- <groupId>com.ruoyi</groupId>-->
<!-- <artifactId>ruoyi-mall-product-server</artifactId>-->
<!-- <version>3.6.0</version>-->
<!-- </dependency>-->
<!-- knife4j -->
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-spring-boot-starter</artifactId>
<version>2.0.9</version>
</dependency>
<!-- redis引入 common-->
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-common-redis</artifactId>
</dependency>
<!-- common core-->
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-common-core</artifactId>
</dependency>
<!-- 对接阿里api-->
<dependency>
<groupId>com.alipay.sdk</groupId>
<artifactId>alipay-sdk-java</artifactId>
<version>4.39.68.ALL</version>
</dependency>
<!-- redis-->
<!-- <dependency>-->
<!-- <groupId>org.springframework.boot</groupId>-->
<!-- <artifactId>spring-boot-starter-data-redis</artifactId>-->
<!-- <exclusions>-->
<!-- <exclusion>-->
<!-- <groupId>io.lettuce</groupId>-->
<!-- <artifactId>lettuce-core</artifactId>-->
<!-- </exclusion>-->
<!-- </exclusions>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>redis.clients</groupId>-->
<!-- <artifactId>jedis</artifactId>-->
<!-- </dependency>-->
</dependencies>
</project>

View File

@ -1,8 +0,0 @@
package com.ruoyi.mall.product.domain;
import lombok.Data;
@Data
public class EsMallProductInfo extends MallProductInfo{
}

View File

@ -1,123 +0,0 @@
package com.ruoyi.mall.product.domain;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.core.annotation.Excel;
import com.ruoyi.common.core.web.domain.BaseEntity;
/**
* mall_product_brand_info
*
* @author DongZeLiang
* @date 2022-09-15
*/
public class MallProductBrandInfo extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** ID */
private Long id;
/** 品牌名称 */
@Excel(name = "品牌名称")
private String name;
/** 品牌描述 */
@Excel(name = "品牌描述")
private String productDesc;
/** 品牌介绍 */
private String content;
/** 品牌logo */
@Excel(name = "品牌logo")
private String logo;
/** 品牌状态 */
@Excel(name = "品牌状态")
private String status;
/** 乐观锁 */
private Long revision;
public void setId(Long id)
{
this.id = id;
}
public Long getId()
{
return id;
}
public void setName(String name)
{
this.name = name;
}
public String getName()
{
return name;
}
public void setProductDesc(String productDesc)
{
this.productDesc = productDesc;
}
public String getProductDesc()
{
return productDesc;
}
public void setContent(String content)
{
this.content = content;
}
public String getContent()
{
return content;
}
public void setLogo(String logo)
{
this.logo = logo;
}
public String getLogo()
{
return logo;
}
public void setStatus(String status)
{
this.status = status;
}
public String getStatus()
{
return status;
}
public void setRevision(Long revision)
{
this.revision = revision;
}
public Long getRevision()
{
return revision;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("id", getId())
.append("name", getName())
.append("productDesc", getProductDesc())
.append("content", getContent())
.append("logo", getLogo())
.append("status", getStatus())
.append("revision", getRevision())
.append("createBy", getCreateBy())
.append("createTime", getCreateTime())
.append("updateBy", getUpdateBy())
.append("updateTime", getUpdateTime())
.toString();
}
}

View File

@ -1,239 +0,0 @@
package com.ruoyi.mall.product.domain;
import io.swagger.annotations.ApiParam;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.core.annotation.Excel;
import com.ruoyi.common.core.web.domain.BaseEntity;
/**
* mall_product_info
*
* @author DongZeLiang
* @date 2022-09-19
*/
public class MallProductInfo extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** ID */
@ApiParam("ID自增")
private Long id;
/** 商品名称 */
@Excel(name = "商品名称")
@ApiParam("商品名称")
private String name;
/** 商品描述 */
@Excel(name = "商品描述")
private String productDesc;
/** 商品类型 */
@Excel(name = "商品类型")
private String type;
/** 冗余字段 */
@Excel(name = "冗余字段")
private String typeIds;
/** 商品主图 */
@Excel(name = "商品主图")
private String img;
/** 商品轮播图 */
@Excel(name = "商品轮播图")
private String carouselImages;
/** 商品评论数 */
@Excel(name = "商品评论数")
private Long commentCount;
/** 商品收藏人气 */
@Excel(name = "商品收藏人气")
private Long collectCount;
/** 品牌信息 */
@Excel(name = "品牌信息")
private String brand;
/** 商品状态 */
@Excel(name = "商品状态")
private String status;
/** 单位 */
@Excel(name = "单位")
private String unit;
/** 搜索关键字 */
@Excel(name = "搜索关键字")
private String keywords;
/** 规格信息 */
@Excel(name = "规格信息")
private Long ruleId;
/** 乐观锁 */
private Long revision;
public void setId(Long id)
{
this.id = id;
}
public Long getId()
{
return id;
}
public void setName(String name)
{
this.name = name;
}
public String getName()
{
return name;
}
public void setProductDesc(String productDesc)
{
this.productDesc = productDesc;
}
public String getProductDesc()
{
return productDesc;
}
public void setType(String type)
{
this.type = type;
}
public String getType()
{
return type;
}
public void setTypeIds(String typeIds)
{
this.typeIds = typeIds;
}
public String getTypeIds()
{
return typeIds;
}
public void setImg(String img)
{
this.img = img;
}
public String getImg()
{
return img;
}
public void setCarouselImages(String carouselImages)
{
this.carouselImages = carouselImages;
}
public String getCarouselImages()
{
return carouselImages;
}
public void setCommentCount(Long commentCount)
{
this.commentCount = commentCount;
}
public Long getCommentCount()
{
return commentCount;
}
public void setCollectCount(Long collectCount)
{
this.collectCount = collectCount;
}
public Long getCollectCount()
{
return collectCount;
}
public void setBrand(String brand)
{
this.brand = brand;
}
public String getBrand()
{
return brand;
}
public void setStatus(String status)
{
this.status = status;
}
public String getStatus()
{
return status;
}
public void setUnit(String unit)
{
this.unit = unit;
}
public String getUnit()
{
return unit;
}
public void setKeywords(String keywords)
{
this.keywords = keywords;
}
public String getKeywords()
{
return keywords;
}
public void setRuleId(Long ruleId)
{
this.ruleId = ruleId;
}
public Long getRuleId()
{
return ruleId;
}
public void setRevision(Long revision)
{
this.revision = revision;
}
public Long getRevision()
{
return revision;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("id", getId())
.append("name", getName())
.append("productDesc", getProductDesc())
.append("type", getType())
.append("typeIds", getTypeIds())
.append("img", getImg())
.append("carouselImages", getCarouselImages())
.append("commentCount", getCommentCount())
.append("collectCount", getCollectCount())
.append("brand", getBrand())
.append("status", getStatus())
.append("unit", getUnit())
.append("keywords", getKeywords())
.append("ruleId", getRuleId())
.append("revision", getRevision())
.append("createBy", getCreateBy())
.append("createTime", getCreateTime())
.append("updateBy", getUpdateBy())
.append("updateTime", getUpdateTime())
.toString();
}
}

View File

@ -1,153 +0,0 @@
package com.ruoyi.mall.product.domain;
import java.math.BigDecimal;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.core.annotation.Excel;
import com.ruoyi.common.core.web.domain.BaseEntity;
/**
* mall_product_review_info
*
* @author DongZeLiang
* @date 2022-09-26
*/
public class MallProductReviewInfo extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** ID */
private Long id;
/** 商品名称 */
@Excel(name = "商品名称")
private Long productId;
/** 商品SKU */
@Excel(name = "商品SKU")
private Long productSkuId;
/** 商品评价图片 */
@Excel(name = "商品评价图片")
private String reviewImages;
/** 商品评价信息 */
@Excel(name = "商品评价信息")
private String content;
/** 评论分数 */
@Excel(name = "评论分数")
private BigDecimal start;
/** 是否隐藏 */
@Excel(name = "是否隐藏")
private String isDispaly;
/** 是否删除 */
@Excel(name = "是否删除")
private String isDel;
/** 乐观锁 */
private Long revision;
public void setId(Long id)
{
this.id = id;
}
public Long getId()
{
return id;
}
public void setProductId(Long productId)
{
this.productId = productId;
}
public Long getProductId()
{
return productId;
}
public void setProductSkuId(Long productSkuId)
{
this.productSkuId = productSkuId;
}
public Long getProductSkuId()
{
return productSkuId;
}
public void setReviewImages(String reviewImages)
{
this.reviewImages = reviewImages;
}
public String getReviewImages()
{
return reviewImages;
}
public void setContent(String content)
{
this.content = content;
}
public String getContent()
{
return content;
}
public void setStart(BigDecimal start)
{
this.start = start;
}
public BigDecimal getStart()
{
return start;
}
public void setIsDispaly(String isDispaly)
{
this.isDispaly = isDispaly;
}
public String getIsDispaly()
{
return isDispaly;
}
public void setIsDel(String isDel)
{
this.isDel = isDel;
}
public String getIsDel()
{
return isDel;
}
public void setRevision(Long revision)
{
this.revision = revision;
}
public Long getRevision()
{
return revision;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("id", getId())
.append("productId", getProductId())
.append("productSkuId", getProductSkuId())
.append("reviewImages", getReviewImages())
.append("content", getContent())
.append("start", getStart())
.append("isDispaly", getIsDispaly())
.append("isDel", getIsDel())
.append("revision", getRevision())
.append("createBy", getCreateBy())
.append("createTime", getCreateTime())
.append("updateBy", getUpdateBy())
.append("updateTime", getUpdateTime())
.toString();
}
}

View File

@ -1,92 +0,0 @@
package com.ruoyi.mall.product.domain;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.core.annotation.Excel;
import com.ruoyi.common.core.web.domain.BaseEntity;
/**
* mall_product_rule_attr_info
*
* @author DongZeLiang
* @date 2022-09-16
*/
public class MallProductRuleAttrInfo extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** ID */
private Long id;
/** 规格 */
@Excel(name = "规格")
private Long ruleId;
/** 类目名称 */
@Excel(name = "类目名称")
private String name;
/** 规格值 */
@Excel(name = "规格值")
private String attrValue;
/** 乐观锁 */
private Long revision;
public void setId(Long id)
{
this.id = id;
}
public Long getId()
{
return id;
}
public void setRuleId(Long ruleId)
{
this.ruleId = ruleId;
}
public Long getRuleId()
{
return ruleId;
}
public void setName(String name)
{
this.name = name;
}
public String getName()
{
return name;
}
public void setAttrValue(String attrValue)
{
this.attrValue = attrValue;
}
public String getAttrValue()
{
return attrValue;
}
public void setRevision(Long revision)
{
this.revision = revision;
}
public Long getRevision()
{
return revision;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("id", getId())
.append("ruleId", getRuleId())
.append("name", getName())
.append("attrValue", getAttrValue())
.append("revision", getRevision())
.toString();
}
}

View File

@ -1,96 +0,0 @@
package com.ruoyi.mall.product.domain;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.core.annotation.Excel;
import com.ruoyi.common.core.web.domain.BaseEntity;
/**
* mall_product_rule_info
*
* @author DongZeLiang
* @date 2022-09-16
*/
public class MallProductRuleInfo extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** ID */
private Long id;
/** 规格名称 */
@Excel(name = "规格名称")
private String name;
/** 规格详情 */
@Excel(name = "规格详情")
private String ruleAttr;
/** 规格状态 */
@Excel(name = "规格状态")
private String status;
/** 乐观锁 */
private Long revision;
public void setId(Long id)
{
this.id = id;
}
public Long getId()
{
return id;
}
public void setName(String name)
{
this.name = name;
}
public String getName()
{
return name;
}
public void setRuleAttr(String ruleAttr)
{
this.ruleAttr = ruleAttr;
}
public String getRuleAttr()
{
return ruleAttr;
}
public void setStatus(String status)
{
this.status = status;
}
public String getStatus()
{
return status;
}
public void setRevision(Long revision)
{
this.revision = revision;
}
public Long getRevision()
{
return revision;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("id", getId())
.append("name", getName())
.append("ruleAttr", getRuleAttr())
.append("status", getStatus())
.append("revision", getRevision())
.append("createBy", getCreateBy())
.append("createTime", getCreateTime())
.append("updateBy", getUpdateBy())
.append("updateTime", getUpdateTime())
.toString();
}
}

View File

@ -1,196 +0,0 @@
package com.ruoyi.mall.product.domain;
import java.math.BigDecimal;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.core.annotation.Excel;
import com.ruoyi.common.core.web.domain.BaseEntity;
/**
* SKU mall_product_sku_info
*
* @author DongZeLiang
* @date 2022-09-19
*/
public class MallProductSkuInfo extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** ID */
private Long id;
/** 商品信息 */
@Excel(name = "商品id")
private Long productId;
/** 商品规格 */
@Excel(name = "商品规格")
private String sku;
/** 商品库存 */
@Excel(name = "商品库存")
private Long stock;
/** 商品价格 */
@Excel(name = "商品价格")
private BigDecimal price;
/** 商品进价 */
@Excel(name = "商品进价")
private BigDecimal purchasePrice;
/** 商品售价 */
@Excel(name = "商品售价")
private BigDecimal sellingPrice;
/** 规格图片 */
@Excel(name = "规格图片")
private String image;
/** 编号 */
@Excel(name = "编号")
private String number;
/** 重量 */
@Excel(name = "重量")
private BigDecimal weight;
/** 体积 */
@Excel(name = "体积")
private BigDecimal volume;
/** 乐观锁 */
@Excel(name = "乐观锁")
private Long revision;
public void setId(Long id)
{
this.id = id;
}
public Long getId()
{
return id;
}
public void setProductId(Long productId)
{
this.productId = productId;
}
public Long getProductId()
{
return productId;
}
public void setSku(String sku)
{
this.sku = sku;
}
public String getSku()
{
return sku;
}
public void setStock(Long stock)
{
this.stock = stock;
}
public Long getStock()
{
return stock;
}
public void setPrice(BigDecimal price)
{
this.price = price;
}
public BigDecimal getPrice()
{
return price;
}
public void setPurchasePrice(BigDecimal purchasePrice)
{
this.purchasePrice = purchasePrice;
}
public BigDecimal getPurchasePrice()
{
return purchasePrice;
}
public void setSellingPrice(BigDecimal sellingPrice)
{
this.sellingPrice = sellingPrice;
}
public BigDecimal getSellingPrice()
{
return sellingPrice;
}
public void setImage(String image)
{
this.image = image;
}
public String getImage()
{
return image;
}
public void setNumber(String number)
{
this.number = number;
}
public String getNumber()
{
return number;
}
public void setWeight(BigDecimal weight)
{
this.weight = weight;
}
public BigDecimal getWeight()
{
return weight;
}
public void setVolume(BigDecimal volume)
{
this.volume = volume;
}
public BigDecimal getVolume()
{
return volume;
}
public void setRevision(Long revision)
{
this.revision = revision;
}
public Long getRevision()
{
return revision;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("id", getId())
.append("productId", getProductId())
.append("sku", getSku())
.append("stock", getStock())
.append("price", getPrice())
.append("purchasePrice", getPurchasePrice())
.append("sellingPrice", getSellingPrice())
.append("image", getImage())
.append("number", getNumber())
.append("weight", getWeight())
.append("volume", getVolume())
.append("revision", getRevision())
.append("createBy", getCreateBy())
.append("createTime", getCreateTime())
.append("updateBy", getUpdateBy())
.append("updateTime", getUpdateTime())
.toString();
}
}

View File

@ -1,111 +0,0 @@
package com.ruoyi.mall.product.domain;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.core.annotation.Excel;
import com.ruoyi.common.core.web.domain.TreeEntity;
/**
* mall_product_type_info
*
* @author DongZeLiang
* @date 2022-09-16
*/
public class MallProductTypeInfo extends TreeEntity
{
private static final long serialVersionUID = 1L;
/** ID */
private Long id;
/** 类型名称 */
@Excel(name = "类型名称")
private String name;
/** 类型图片 */
@Excel(name = "类型图片")
private String image;
/** 类型状态 */
@Excel(name = "类型状态")
private String status;
/** 类型排序 */
@Excel(name = "类型排序")
private Long orderBy;
/** 乐观锁 */
private Long revision;
public void setId(Long id)
{
this.id = id;
}
public Long getId()
{
return id;
}
public void setName(String name)
{
this.name = name;
}
public String getName()
{
return name;
}
public void setImage(String image)
{
this.image = image;
}
public String getImage()
{
return image;
}
public void setStatus(String status)
{
this.status = status;
}
public String getStatus()
{
return status;
}
public void setOrderBy(Long orderBy)
{
this.orderBy = orderBy;
}
public Long getOrderBy()
{
return orderBy;
}
public void setRevision(Long revision)
{
this.revision = revision;
}
public Long getRevision()
{
return revision;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("id", getId())
.append("name", getName())
.append("image", getImage())
.append("status", getStatus())
.append("orderBy", getOrderBy())
.append("parentId", getParentId())
.append("revision", getRevision())
.append("createBy", getCreateBy())
.append("createTime", getCreateTime())
.append("updateBy", getUpdateBy())
.append("updateTime", getUpdateTime())
.toString();
}
}

View File

@ -1,185 +0,0 @@
package com.ruoyi.mall.product.domain.model;
import com.ruoyi.common.core.annotation.Excel;
import com.ruoyi.common.core.web.domain.BaseEntity;
import io.swagger.annotations.ApiParam;
/**
* @author DongZl
* @description: -
* @Date 2022-10-18 01:57
*/
public class ProductModel extends BaseEntity {
/** ID */
private Long id;
/** 商品名称 */
private String name;
/** 商品描述 */
private String productDesc;
/** 商品类型 */
private String type;
private String typeName;
/** 冗余字段 */
private String typeIds;
/** 商品主图 */
private String img;
/** 商品轮播图 */
private String carouselImages;
/** 商品评论数 */
private Long commentCount;
/** 商品收藏人气 */
private Long collectCount;
/** 品牌信息 */
private String brand;
private String brandName;
/** 商品状态 */
private String status;
/** 单位 */
private String unit;
/** 搜索关键字 */
private String keywords;
/** 规格信息 */
private Long ruleId;
public Long getId () {
return id;
}
public void setId (Long id) {
this.id = id;
}
public String getName () {
return name;
}
public void setName (String name) {
this.name = name;
}
public String getProductDesc () {
return productDesc;
}
public void setProductDesc (String productDesc) {
this.productDesc = productDesc;
}
public String getType () {
return type;
}
public void setType (String type) {
this.type = type;
}
public String getTypeName () {
return typeName;
}
public void setTypeName (String typeName) {
this.typeName = typeName;
}
public String getTypeIds () {
return typeIds;
}
public void setTypeIds (String typeIds) {
this.typeIds = typeIds;
}
public String getImg () {
return img;
}
public void setImg (String img) {
this.img = img;
}
public String getCarouselImages () {
return carouselImages;
}
public void setCarouselImages (String carouselImages) {
this.carouselImages = carouselImages;
}
public Long getCommentCount () {
return commentCount;
}
public void setCommentCount (Long commentCount) {
this.commentCount = commentCount;
}
public Long getCollectCount () {
return collectCount;
}
public void setCollectCount (Long collectCount) {
this.collectCount = collectCount;
}
public String getBrand () {
return brand;
}
public void setBrand (String brand) {
this.brand = brand;
}
public String getBrandName () {
return brandName;
}
public void setBrandName (String brandName) {
this.brandName = brandName;
}
public String getStatus () {
return status;
}
public void setStatus (String status) {
this.status = status;
}
public String getUnit () {
return unit;
}
public void setUnit (String unit) {
this.unit = unit;
}
public String getKeywords () {
return keywords;
}
public void setKeywords (String keywords) {
this.keywords = keywords;
}
public Long getRuleId () {
return ruleId;
}
public void setRuleId (Long ruleId) {
this.ruleId = ruleId;
}
}

View File

@ -1,43 +0,0 @@
package com.ruoyi.mall.product.domain.model;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author DongZl
* @description:
* @Date 2022-9-17 09:28
*/
public class RuleAttrModel {
private String ruleType;
private List<String> ruleAttrList;
private String ruleAttrStr;
public String getRuleType () {
return ruleType;
}
public void setRuleType (String ruleType) {
this.ruleType = ruleType;
}
public List<String> getRuleAttrList () {
return ruleAttrList;
}
public void setRuleAttrList (List<String> ruleAttrList) {
this.ruleAttrList = ruleAttrList;
if (this.ruleAttrList != null){
this.ruleAttrStr = this.ruleAttrList.stream().collect(Collectors.joining(","));
}
}
public String getRuleAttrStr () {
return ruleAttrStr;
}
}

View File

@ -1,31 +0,0 @@
package com.ruoyi.mall.product.domain.model;
import java.util.List;
/**
* @author DongZl
* @description:
* @Date 2022-9-17 09:33
*/
public class RuleModel {
private Long ruleId;
private List<RuleAttrModel> ruleList;
public Long getRuleId () {
return ruleId;
}
public void setRuleId (Long ruleId) {
this.ruleId = ruleId;
}
public List<RuleAttrModel> getRuleList () {
return ruleList;
}
public void setRuleList (List<RuleAttrModel> ruleList) {
this.ruleList = ruleList;
}
}

View File

@ -1,50 +0,0 @@
package com.ruoyi.mall.product.domain.model;
import com.ruoyi.common.core.exception.ServiceException;
import com.ruoyi.mall.product.domain.MallProductSkuInfo;
import java.util.List;
/**
* @author DongZl
* @description: sku
* @Date 2022-9-24 10:23
*/
public class SkuModel {
private Long productId;
private List<MallProductSkuInfo> skuInfoList;
private SkuModel () {
}
private SkuModel (Long productId, List<MallProductSkuInfo> skuInfoList) {
this.productId = productId;
this.skuInfoList = skuInfoList;
}
public static SkuModel builderSkuModel(Long productId, List<MallProductSkuInfo> skuInfoList){
if (productId == null){
throw new ServiceException("商品ID不可为空");
}
return new SkuModel(productId, skuInfoList);
}
public Long getProductId () {
return productId;
}
public void setProductId (Long productId) {
this.productId = productId;
}
public List<MallProductSkuInfo> getSkuInfoList () {
return skuInfoList;
}
public void setSkuInfoList (List<MallProductSkuInfo> skuInfoList) {
this.skuInfoList = skuInfoList;
}
}

View File

@ -1,54 +0,0 @@
package com.ruoyi.mall.product.domain.reponse;
import com.ruoyi.mall.product.domain.MallProductRuleInfo;
import com.ruoyi.mall.product.domain.MallProductSkuInfo;
import com.ruoyi.mall.product.domain.model.ProductModel;
import java.util.List;
/**
* @author DongZl
* @description:
* @Date 2022-10-18 02:00
*/
public class ProductDetailsResponse {
/**
*
*/
private ProductModel product;
/**
* sku
*/
private List<MallProductSkuInfo> skuList;
/**
*
*/
private MallProductRuleInfo productRule;
public ProductModel getProduct () {
return product;
}
public void setProduct (ProductModel product) {
this.product = product;
}
public List<MallProductSkuInfo> getSkuList () {
return skuList;
}
public void setSkuList (List<MallProductSkuInfo> skuList) {
this.skuList = skuList;
}
public MallProductRuleInfo getProductRule () {
return productRule;
}
public void setProductRule (MallProductRuleInfo productRule) {
this.productRule = productRule;
}
}

View File

@ -1,24 +0,0 @@
package com.ruoyi.mall.product.domain.reponse;
import com.ruoyi.mall.product.domain.MallProductInfo;
import com.ruoyi.mall.product.domain.MallProductSkuInfo;
import java.util.List;
/**
* @author DongZl
* @description:
* @Date 2022-9-24 11:27
*/
public class ProductInfoResponse extends MallProductInfo {
private List<MallProductSkuInfo> skuInfoList;
public List<MallProductSkuInfo> getSkuInfoList () {
return skuInfoList;
}
public void setSkuInfoList (List<MallProductSkuInfo> skuInfoList) {
this.skuInfoList = skuInfoList;
}
}

View File

@ -1,27 +0,0 @@
package com.ruoyi.mall.product.domain.request;
import com.ruoyi.mall.product.domain.MallProductInfo;
import com.ruoyi.mall.product.domain.MallProductSkuInfo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiParam;
import java.util.List;
/**
* @author DongZl
* @description:
* @Date 2022-9-24 10:34
*/
public class ProductInfoRequest extends MallProductInfo {
@ApiParam("sku集合")
private List<MallProductSkuInfo> skuInfoList;
public List<MallProductSkuInfo> getSkuInfoList () {
return skuInfoList;
}
public void setSkuInfoList (List<MallProductSkuInfo> skuInfoList) {
this.skuInfoList = skuInfoList;
}
}

View File

@ -1,25 +0,0 @@
package com.ruoyi.mall.product.domain.request;
import com.ruoyi.mall.product.domain.MallProductRuleInfo;
import com.ruoyi.mall.product.domain.model.RuleAttrModel;
import java.util.List;
/**
* @author DongZl
* @description:
* @Date 2022-9-17 09:29
*/
public class RuleRequest extends MallProductRuleInfo {
private List<RuleAttrModel> ruleList;
public List<RuleAttrModel> getRuleList () {
return ruleList;
}
public void setRuleList (List<RuleAttrModel> ruleList) {
this.ruleList = ruleList;
}
}

View File

@ -9,8 +9,6 @@ import org.springframework.context.annotation.ComponentScan;
/**
*
*
* @author DongZeLiang
*/
@EnableCustomConfig
@EnableCustomSwagger2

View File

@ -1,105 +0,0 @@
package com.ruoyi.mall.product.controller;
import java.util.List;
import java.io.IOException;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.log.annotation.Log;
import com.ruoyi.common.log.enums.BusinessType;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.mall.product.domain.MallProductBrandInfo;
import com.ruoyi.mall.product.service.IMallProductBrandInfoService;
import com.ruoyi.common.core.web.controller.BaseController;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.core.utils.poi.ExcelUtil;
import com.ruoyi.common.core.web.page.TableDataInfo;
/**
* Controller
*
* @author DongZeLiang
* @date 2022-09-15
*/
@RestController
@RequestMapping("/brand")
public class MallProductBrandInfoController extends BaseController
{
@Autowired
private IMallProductBrandInfoService mallProductBrandInfoService;
/**
*
*/
@RequiresPermissions("product:brand:list")
@GetMapping("/list")
public TableDataInfo list(MallProductBrandInfo mallProductBrandInfo)
{
startPage();
List<MallProductBrandInfo> list = mallProductBrandInfoService.selectMallProductBrandInfoList(mallProductBrandInfo);
return getDataTable(list);
}
/**
*
*/
@RequiresPermissions("product:brand:export")
@Log(title = "商品品牌", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(HttpServletResponse response, MallProductBrandInfo mallProductBrandInfo)
{
List<MallProductBrandInfo> list = mallProductBrandInfoService.selectMallProductBrandInfoList(mallProductBrandInfo);
ExcelUtil<MallProductBrandInfo> util = new ExcelUtil<MallProductBrandInfo>(MallProductBrandInfo.class);
util.exportExcel(response, list, "商品品牌数据");
}
/**
*
*/
@RequiresPermissions("product:brand:query")
@GetMapping(value = "/{id}")
public AjaxResult getInfo(@PathVariable("id") Long id)
{
return AjaxResult.success(mallProductBrandInfoService.selectMallProductBrandInfoById(id));
}
/**
*
*/
@RequiresPermissions("product:brand:add")
@Log(title = "商品品牌", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@RequestBody MallProductBrandInfo mallProductBrandInfo)
{
return toAjax(mallProductBrandInfoService.insertMallProductBrandInfo(mallProductBrandInfo));
}
/**
*
*/
@RequiresPermissions("product:brand:edit")
@Log(title = "商品品牌", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@RequestBody MallProductBrandInfo mallProductBrandInfo)
{
return toAjax(mallProductBrandInfoService.updateMallProductBrandInfo(mallProductBrandInfo));
}
/**
*
*/
@RequiresPermissions("product:brand:remove")
@Log(title = "商品品牌", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public AjaxResult remove(@PathVariable Long[] ids)
{
return toAjax(mallProductBrandInfoService.deleteMallProductBrandInfoByIds(ids));
}
}

View File

@ -1,156 +0,0 @@
package com.ruoyi.mall.product.controller;
import java.util.List;
import java.io.IOException;
import javax.servlet.http.HttpServletResponse;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.mall.product.domain.reponse.ProductDetailsResponse;
import com.ruoyi.mall.product.domain.reponse.ProductInfoResponse;
import com.ruoyi.mall.product.domain.request.ProductInfoRequest;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import com.ruoyi.common.log.annotation.Log;
import com.ruoyi.common.log.enums.BusinessType;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.mall.product.domain.MallProductInfo;
import com.ruoyi.mall.product.service.IMallProductInfoService;
import com.ruoyi.common.core.web.controller.BaseController;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.core.utils.poi.ExcelUtil;
import com.ruoyi.common.core.web.page.TableDataInfo;
/**
* Controller
*
* @author DongZeLiang
* @date 2022-09-19
*/
@RestController
@RequestMapping("/info")
@Api(tags = "商品维护 - API")
public class MallProductInfoController extends BaseController
{
@Autowired
private IMallProductInfoService mallProductInfoService;
/**
*
*/
@RequiresPermissions("product:info:list")
@RequestMapping(value = "/list", method = {RequestMethod.GET, RequestMethod.POST})
public TableDataInfo list(MallProductInfo mallProductInfo)
{
startPage();
List<MallProductInfo> list = mallProductInfoService.selectMallProductInfoList(mallProductInfo);
return getDataTable(list);
}
@PostMapping("/syncList")
public TableDataInfo syncList(@RequestBody MallProductInfo mallProductInfo)
{
startPage();
List<MallProductInfo> list = mallProductInfoService.selectMallProductInfoList(mallProductInfo);
return getDataTable(list);
}
/**
*
*/
@RequiresPermissions("product:info:list")
@PostMapping("/count")
public R<Long> count(@RequestBody MallProductInfo mallProductInfo)
{
return R.ok(mallProductInfoService.selectMallProductInfoCount(mallProductInfo));
}
/**
*
*/
@RequiresPermissions("product:info:export")
@Log(title = "商品信息", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(HttpServletResponse response, MallProductInfo mallProductInfo)
{
List<MallProductInfo> list = mallProductInfoService.selectMallProductInfoList(mallProductInfo);
ExcelUtil<MallProductInfo> util = new ExcelUtil<MallProductInfo>(MallProductInfo.class);
util.exportExcel(response, list, "商品信息数据");
}
/**
*
*/
@RequiresPermissions("product:info:query")
@GetMapping(value = "/{id}")
public AjaxResult getInfo(@PathVariable("id") Long id)
{
return AjaxResult.success(mallProductInfoService.selectMallProductInfoById(id));
}
/**
* /
*/
@GetMapping(value = "/upload/{id}")
@ApiOperation("上架商品")
public R uploadInfo(@PathVariable("id") String id)
{
mallProductInfoService.uploadInfo(id);
return R.ok();
}
@GetMapping(value = "/result/{id}")
public R<ProductInfoResponse> getResultInfo(@PathVariable("id") Long id)
{
return R.ok(mallProductInfoService.selectMallProductInfoById(id));
}
/**
*
* @param id
* @return
*/
@GetMapping("/details/{id}")
public R<ProductDetailsResponse> getProductResponse(@PathVariable("id") Long id){
return R.ok(mallProductInfoService.selectProductDetailsById(id));
}
/**
*
*/
@RequiresPermissions("product:info:add")
@Log(title = "商品信息", businessType = BusinessType.INSERT)
@PostMapping
@ApiOperation("商品添加")
public AjaxResult add(@RequestBody @ApiParam("商品请求实体类") ProductInfoRequest productInfoRequest)
{
return toAjax(mallProductInfoService.insertMallProductInfo(productInfoRequest));
}
/**
*
*/
@RequiresPermissions("product:info:edit")
@Log(title = "商品信息", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@RequestBody ProductInfoRequest productInfoRequest)
{
return toAjax(mallProductInfoService.updateMallProductInfo(productInfoRequest));
}
/**
*
*/
@RequiresPermissions("product:info:remove")
@Log(title = "商品信息", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public AjaxResult remove(@PathVariable Long[] ids)
{
return toAjax(mallProductInfoService.deleteMallProductInfoByIds(ids));
}
}

View File

@ -1,105 +0,0 @@
package com.ruoyi.mall.product.controller;
import java.util.List;
import java.io.IOException;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.log.annotation.Log;
import com.ruoyi.common.log.enums.BusinessType;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.mall.product.domain.MallProductReviewInfo;
import com.ruoyi.mall.product.service.IMallProductReviewInfoService;
import com.ruoyi.common.core.web.controller.BaseController;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.core.utils.poi.ExcelUtil;
import com.ruoyi.common.core.web.page.TableDataInfo;
/**
* Controller
*
* @author DongZeLiang
* @date 2022-09-26
*/
@RestController
@RequestMapping("/review")
public class MallProductReviewInfoController extends BaseController
{
@Autowired
private IMallProductReviewInfoService mallProductReviewInfoService;
/**
*
*/
@RequiresPermissions("product:review:list")
@GetMapping("/list")
public TableDataInfo list(MallProductReviewInfo mallProductReviewInfo)
{
startPage();
List<MallProductReviewInfo> list = mallProductReviewInfoService.selectMallProductReviewInfoList(mallProductReviewInfo);
return getDataTable(list);
}
/**
*
*/
@RequiresPermissions("product:review:export")
@Log(title = "商品评价", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(HttpServletResponse response, MallProductReviewInfo mallProductReviewInfo)
{
List<MallProductReviewInfo> list = mallProductReviewInfoService.selectMallProductReviewInfoList(mallProductReviewInfo);
ExcelUtil<MallProductReviewInfo> util = new ExcelUtil<MallProductReviewInfo>(MallProductReviewInfo.class);
util.exportExcel(response, list, "商品评价数据");
}
/**
*
*/
@RequiresPermissions("product:review:query")
@GetMapping(value = "/{id}")
public AjaxResult getInfo(@PathVariable("id") Long id)
{
return AjaxResult.success(mallProductReviewInfoService.selectMallProductReviewInfoById(id));
}
/**
*
*/
@RequiresPermissions("product:review:add")
@Log(title = "商品评价", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@RequestBody MallProductReviewInfo mallProductReviewInfo)
{
return toAjax(mallProductReviewInfoService.insertMallProductReviewInfo(mallProductReviewInfo));
}
/**
*
*/
@RequiresPermissions("product:review:edit")
@Log(title = "商品评价", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@RequestBody MallProductReviewInfo mallProductReviewInfo)
{
return toAjax(mallProductReviewInfoService.updateMallProductReviewInfo(mallProductReviewInfo));
}
/**
*
*/
@RequiresPermissions("product:review:remove")
@Log(title = "商品评价", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public AjaxResult remove(@PathVariable Long[] ids)
{
return toAjax(mallProductReviewInfoService.deleteMallProductReviewInfoByIds(ids));
}
}

View File

@ -1,105 +0,0 @@
package com.ruoyi.mall.product.controller;
import java.util.List;
import java.io.IOException;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.log.annotation.Log;
import com.ruoyi.common.log.enums.BusinessType;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.mall.product.domain.MallProductRuleAttrInfo;
import com.ruoyi.mall.product.service.IMallProductRuleAttrInfoService;
import com.ruoyi.common.core.web.controller.BaseController;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.core.utils.poi.ExcelUtil;
import com.ruoyi.common.core.web.page.TableDataInfo;
/**
* Controller
*
* @author DongZeLiang
* @date 2022-09-16
*/
@RestController
@RequestMapping("/attr")
public class MallProductRuleAttrInfoController extends BaseController
{
@Autowired
private IMallProductRuleAttrInfoService mallProductRuleAttrInfoService;
/**
*
*/
@RequiresPermissions("product:attr:list")
@GetMapping("/list")
public TableDataInfo list(MallProductRuleAttrInfo mallProductRuleAttrInfo)
{
startPage();
List<MallProductRuleAttrInfo> list = mallProductRuleAttrInfoService.selectMallProductRuleAttrInfoList(mallProductRuleAttrInfo);
return getDataTable(list);
}
/**
*
*/
@RequiresPermissions("product:attr:export")
@Log(title = "商品规格详情", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(HttpServletResponse response, MallProductRuleAttrInfo mallProductRuleAttrInfo)
{
List<MallProductRuleAttrInfo> list = mallProductRuleAttrInfoService.selectMallProductRuleAttrInfoList(mallProductRuleAttrInfo);
ExcelUtil<MallProductRuleAttrInfo> util = new ExcelUtil<MallProductRuleAttrInfo>(MallProductRuleAttrInfo.class);
util.exportExcel(response, list, "商品规格详情数据");
}
/**
*
*/
@RequiresPermissions("product:attr:query")
@GetMapping(value = "/{id}")
public AjaxResult getInfo(@PathVariable("id") Long id)
{
return AjaxResult.success(mallProductRuleAttrInfoService.selectMallProductRuleAttrInfoById(id));
}
/**
*
*/
@RequiresPermissions("product:attr:add")
@Log(title = "商品规格详情", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@RequestBody MallProductRuleAttrInfo mallProductRuleAttrInfo)
{
return toAjax(mallProductRuleAttrInfoService.insertMallProductRuleAttrInfo(mallProductRuleAttrInfo));
}
/**
*
*/
@RequiresPermissions("product:attr:edit")
@Log(title = "商品规格详情", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@RequestBody MallProductRuleAttrInfo mallProductRuleAttrInfo)
{
return toAjax(mallProductRuleAttrInfoService.updateMallProductRuleAttrInfo(mallProductRuleAttrInfo));
}
/**
*
*/
@RequiresPermissions("product:attr:remove")
@Log(title = "商品规格详情", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public AjaxResult remove(@PathVariable Long[] ids)
{
return toAjax(mallProductRuleAttrInfoService.deleteMallProductRuleAttrInfoByIds(ids));
}
}

View File

@ -1,115 +0,0 @@
package com.ruoyi.mall.product.controller;
import java.util.List;
import java.io.IOException;
import javax.servlet.http.HttpServletResponse;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.mall.product.domain.request.RuleRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.log.annotation.Log;
import com.ruoyi.common.log.enums.BusinessType;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.mall.product.domain.MallProductRuleInfo;
import com.ruoyi.mall.product.service.IMallProductRuleInfoService;
import com.ruoyi.common.core.web.controller.BaseController;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.core.utils.poi.ExcelUtil;
import com.ruoyi.common.core.web.page.TableDataInfo;
/**
* Controller
*
* @author DongZeLiang
* @date 2022-09-16
*/
@RestController
@RequestMapping("/rule")
public class MallProductRuleInfoController extends BaseController
{
@Autowired
private IMallProductRuleInfoService mallProductRuleInfoService;
/**
*
*/
@RequiresPermissions("product:rule:list")
@GetMapping("/list")
public TableDataInfo list(MallProductRuleInfo mallProductRuleInfo)
{
startPage();
List<MallProductRuleInfo> list = mallProductRuleInfoService.selectMallProductRuleInfoList(mallProductRuleInfo);
return getDataTable(list);
}
@RequiresPermissions("product:rule:list")
@GetMapping("/all")
public R all()
{
List<MallProductRuleInfo> list = mallProductRuleInfoService.selectMallProductRuleInfoList(new MallProductRuleInfo());
return R.ok(list);
}
/**
*
*/
@RequiresPermissions("product:rule:export")
@Log(title = "商品规格", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(HttpServletResponse response, MallProductRuleInfo mallProductRuleInfo)
{
List<MallProductRuleInfo> list = mallProductRuleInfoService.selectMallProductRuleInfoList(mallProductRuleInfo);
ExcelUtil<MallProductRuleInfo> util = new ExcelUtil<MallProductRuleInfo>(MallProductRuleInfo.class);
util.exportExcel(response, list, "商品规格数据");
}
/**
*
*/
@RequiresPermissions("product:rule:query")
@GetMapping(value = "/{id}")
public AjaxResult getInfo(@PathVariable("id") Long id)
{
return AjaxResult.success(mallProductRuleInfoService.selectMallProductRuleInfoById(id));
}
/**
*
*/
@RequiresPermissions("product:rule:add")
@Log(title = "商品规格", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@RequestBody RuleRequest ruleRequest)
{
return toAjax(mallProductRuleInfoService.insertMallProductRuleInfo(ruleRequest));
}
/**
*
*/
@RequiresPermissions("product:rule:edit")
@Log(title = "商品规格", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@RequestBody RuleRequest ruleRequest)
{
return toAjax(mallProductRuleInfoService.updateMallProductRuleInfo(ruleRequest));
}
/**
*
*/
@RequiresPermissions("product:rule:remove")
@Log(title = "商品规格", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public AjaxResult remove(@PathVariable Long[] ids)
{
return toAjax(mallProductRuleInfoService.deleteMallProductRuleInfoByIds(ids));
}
}

View File

@ -1,105 +0,0 @@
package com.ruoyi.mall.product.controller;
import java.util.List;
import java.io.IOException;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.log.annotation.Log;
import com.ruoyi.common.log.enums.BusinessType;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.mall.product.domain.MallProductSkuInfo;
import com.ruoyi.mall.product.service.IMallProductSkuInfoService;
import com.ruoyi.common.core.web.controller.BaseController;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.core.utils.poi.ExcelUtil;
import com.ruoyi.common.core.web.page.TableDataInfo;
/**
* SKUController
*
* @author DongZeLiang
* @date 2022-09-19
*/
@RestController
@RequestMapping("/sku")
public class MallProductSkuInfoController extends BaseController
{
@Autowired
private IMallProductSkuInfoService mallProductSkuInfoService;
/**
* SKU
*/
@RequiresPermissions("product:sku:list")
@GetMapping("/list")
public TableDataInfo list(MallProductSkuInfo mallProductSkuInfo)
{
startPage();
List<MallProductSkuInfo> list = mallProductSkuInfoService.selectMallProductSkuInfoList(mallProductSkuInfo);
return getDataTable(list);
}
/**
* SKU
*/
@RequiresPermissions("product:sku:export")
@Log(title = "商品SKU", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(HttpServletResponse response, MallProductSkuInfo mallProductSkuInfo)
{
List<MallProductSkuInfo> list = mallProductSkuInfoService.selectMallProductSkuInfoList(mallProductSkuInfo);
ExcelUtil<MallProductSkuInfo> util = new ExcelUtil<MallProductSkuInfo>(MallProductSkuInfo.class);
util.exportExcel(response, list, "商品SKU数据");
}
/**
* SKU
*/
@RequiresPermissions("product:sku:query")
@GetMapping(value = "/{id}")
public AjaxResult getInfo(@PathVariable("id") Long id)
{
return AjaxResult.success(mallProductSkuInfoService.selectMallProductSkuInfoById(id));
}
/**
* SKU
*/
@RequiresPermissions("product:sku:add")
@Log(title = "商品SKU", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@RequestBody MallProductSkuInfo mallProductSkuInfo)
{
return toAjax(mallProductSkuInfoService.insertMallProductSkuInfo(mallProductSkuInfo));
}
/**
* SKU
*/
@RequiresPermissions("product:sku:edit")
@Log(title = "商品SKU", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@RequestBody MallProductSkuInfo mallProductSkuInfo)
{
return toAjax(mallProductSkuInfoService.updateMallProductSkuInfo(mallProductSkuInfo));
}
/**
* SKU
*/
@RequiresPermissions("product:sku:remove")
@Log(title = "商品SKU", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public AjaxResult remove(@PathVariable Long[] ids)
{
return toAjax(mallProductSkuInfoService.deleteMallProductSkuInfoByIds(ids));
}
}

View File

@ -1,114 +0,0 @@
package com.ruoyi.mall.product.controller;
import java.util.List;
import java.io.IOException;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.log.annotation.Log;
import com.ruoyi.common.log.enums.BusinessType;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.mall.product.domain.MallProductTypeInfo;
import com.ruoyi.mall.product.service.IMallProductTypeInfoService;
import com.ruoyi.common.core.web.controller.BaseController;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.core.utils.poi.ExcelUtil;
/**
* Controller
*
* @author DongZeLiang
* @date 2022-09-16
*/
@RestController
@RequestMapping("/type")
public class MallProductTypeInfoController extends BaseController
{
@Autowired
private IMallProductTypeInfoService mallProductTypeInfoService;
/**
*
*/
@RequiresPermissions("product:type:list")
@GetMapping("/list")
public AjaxResult list(MallProductTypeInfo mallProductTypeInfo)
{
List<MallProductTypeInfo> list = mallProductTypeInfoService.selectMallProductTypeInfoList(mallProductTypeInfo);
return AjaxResult.success(list);
}
@RequiresPermissions("product:type:list")
@GetMapping("/tree")
public AjaxResult tree()
{
MallProductTypeInfo mallProductTypeInfo = new MallProductTypeInfo();
mallProductTypeInfo.setParentId(0L);
List<MallProductTypeInfo> list = mallProductTypeInfoService.selectMallProductTypeInfoList(mallProductTypeInfo);
return AjaxResult.success(list);
}
/**
*
*/
@RequiresPermissions("product:type:export")
@Log(title = "商品类型", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(HttpServletResponse response, MallProductTypeInfo mallProductTypeInfo)
{
List<MallProductTypeInfo> list = mallProductTypeInfoService.selectMallProductTypeInfoList(mallProductTypeInfo);
ExcelUtil<MallProductTypeInfo> util = new ExcelUtil<MallProductTypeInfo>(MallProductTypeInfo.class);
util.exportExcel(response, list, "商品类型数据");
}
/**
*
*/
@RequiresPermissions("product:type:query")
@GetMapping(value = "/{id}")
public AjaxResult getInfo(@PathVariable("id") Long id)
{
return AjaxResult.success(mallProductTypeInfoService.selectMallProductTypeInfoById(id));
}
/**
*
*/
@RequiresPermissions("product:type:add")
@Log(title = "商品类型", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@RequestBody MallProductTypeInfo mallProductTypeInfo)
{
return toAjax(mallProductTypeInfoService.insertMallProductTypeInfo(mallProductTypeInfo));
}
/**
*
*/
@RequiresPermissions("product:type:edit")
@Log(title = "商品类型", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@RequestBody MallProductTypeInfo mallProductTypeInfo)
{
return toAjax(mallProductTypeInfoService.updateMallProductTypeInfo(mallProductTypeInfo));
}
/**
*
*/
@RequiresPermissions("product:type:remove")
@Log(title = "商品类型", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public AjaxResult remove(@PathVariable Long[] ids)
{
return toAjax(mallProductTypeInfoService.deleteMallProductTypeInfoByIds(ids));
}
}

View File

@ -1,52 +0,0 @@
package com.ruoyi.mall.product.controller;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.rabbit.domain.Message;
import com.ruoyi.common.rabbit.enums.QueueEnum;
import com.ruoyi.mall.product.cache.ProductInfoCache;
import com.ruoyi.mall.product.domain.reponse.ProductDetailsResponse;
import com.ruoyi.mall.product.domain.reponse.ProductInfoResponse;
import com.ruoyi.mall.product.service.IMallProductInfoService;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
/**
* @author DongZl
* @description:
* @Date 2022-10-19 02:46
*/
@RestController
@RequestMapping("/test")
public class TestController {
@Autowired
private ProductInfoCache productInfoCache;
@Autowired
private RabbitTemplate rabbitTemplate;
@Autowired
private IMallProductInfoService productInfoService;
@GetMapping("/{id}")
public R get(@PathVariable Long id){
ProductDetailsResponse productDetailsResponse = productInfoCache.get(id);
return R.ok(productDetailsResponse);
}
@GetMapping("/refreshData/{id}")
private R refreshData(@PathVariable Long id){
return R.ok(productInfoCache.refreshData(id));
}
@PostMapping("/sendMsg/{msg}")
public R sendMsg(@PathVariable("msg") String msg){
// ProductInfoResponse productInfoResponse = productInfoService.selectMallProductInfoById(10L);
rabbitTemplate.convertAndSend(QueueEnum.PRODUCT_ADD.queueName(),
Message.builderMsg(11L));
return R.ok();
}
}

View File

@ -1,61 +0,0 @@
package com.ruoyi.mall.product.mapper;
import java.util.List;
import com.ruoyi.mall.product.domain.MallProductBrandInfo;
/**
* Mapper
*
* @author DongZeLiang
* @date 2022-09-15
*/
public interface MallProductBrandInfoMapper
{
/**
*
*
* @param id
* @return
*/
public MallProductBrandInfo selectMallProductBrandInfoById(Long id);
/**
*
*
* @param mallProductBrandInfo
* @return
*/
public List<MallProductBrandInfo> selectMallProductBrandInfoList(MallProductBrandInfo mallProductBrandInfo);
/**
*
*
* @param mallProductBrandInfo
* @return
*/
public int insertMallProductBrandInfo(MallProductBrandInfo mallProductBrandInfo);
/**
*
*
* @param mallProductBrandInfo
* @return
*/
public int updateMallProductBrandInfo(MallProductBrandInfo mallProductBrandInfo);
/**
*
*
* @param id
* @return
*/
public int deleteMallProductBrandInfoById(Long id);
/**
*
*
* @param ids
* @return
*/
public int deleteMallProductBrandInfoByIds(Long[] ids);
}

View File

@ -1,74 +0,0 @@
package com.ruoyi.mall.product.mapper;
import java.util.List;
import com.ruoyi.mall.product.domain.MallProductInfo;
import com.ruoyi.mall.product.domain.model.ProductModel;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Component;
/**
* Mapper
*
* @author DongZeLiang
* @date 2022-09-19
*/
@Component
public interface MallProductInfoMapper
{
/**
*
*
* @param id
* @return
*/
public MallProductInfo selectMallProductInfoById(@Param("id")Long id);
public ProductModel selectProductModelById(@Param("id") Long id);
/**
*
*
* @param mallProductInfo
* @return
*/
public List<MallProductInfo> selectMallProductInfoList(MallProductInfo mallProductInfo);
/**
*
*
* @param mallProductInfo
* @return
*/
public int insertMallProductInfo(MallProductInfo mallProductInfo);
/**
*
*
* @param mallProductInfo
* @return
*/
public int updateMallProductInfo(MallProductInfo mallProductInfo);
/**
*
*
* @param id
* @return
*/
public int deleteMallProductInfoById(Long id);
/**
*
*
* @param ids
* @return
*/
public int deleteMallProductInfoByIds(Long[] ids);
/**
*
* @param mallProductInfo
* @return
*/
Long selectMallProductInfoCount (MallProductInfo mallProductInfo);
}

View File

@ -1,61 +0,0 @@
package com.ruoyi.mall.product.mapper;
import java.util.List;
import com.ruoyi.mall.product.domain.MallProductReviewInfo;
/**
* Mapper
*
* @author DongZeLiang
* @date 2022-09-26
*/
public interface MallProductReviewInfoMapper
{
/**
*
*
* @param id
* @return
*/
public MallProductReviewInfo selectMallProductReviewInfoById(Long id);
/**
*
*
* @param mallProductReviewInfo
* @return
*/
public List<MallProductReviewInfo> selectMallProductReviewInfoList(MallProductReviewInfo mallProductReviewInfo);
/**
*
*
* @param mallProductReviewInfo
* @return
*/
public int insertMallProductReviewInfo(MallProductReviewInfo mallProductReviewInfo);
/**
*
*
* @param mallProductReviewInfo
* @return
*/
public int updateMallProductReviewInfo(MallProductReviewInfo mallProductReviewInfo);
/**
*
*
* @param id
* @return
*/
public int deleteMallProductReviewInfoById(Long id);
/**
*
*
* @param ids
* @return
*/
public int deleteMallProductReviewInfoByIds(Long[] ids);
}

View File

@ -1,77 +0,0 @@
package com.ruoyi.mall.product.mapper;
import java.util.List;
import com.ruoyi.mall.product.domain.MallProductRuleAttrInfo;
import com.ruoyi.mall.product.domain.model.RuleModel;
import org.apache.ibatis.annotations.Param;
/**
* Mapper
*
* @author DongZeLiang
* @date 2022-09-16
*/
public interface MallProductRuleAttrInfoMapper
{
/**
*
*
* @param id
* @return
*/
public MallProductRuleAttrInfo selectMallProductRuleAttrInfoById(Long id);
/**
*
*
* @param mallProductRuleAttrInfo
* @return
*/
public List<MallProductRuleAttrInfo> selectMallProductRuleAttrInfoList(MallProductRuleAttrInfo mallProductRuleAttrInfo);
/**
*
*
* @param mallProductRuleAttrInfo
* @return
*/
public int insertMallProductRuleAttrInfo(MallProductRuleAttrInfo mallProductRuleAttrInfo);
/**
*
*
* @param mallProductRuleAttrInfo
* @return
*/
public int updateMallProductRuleAttrInfo(MallProductRuleAttrInfo mallProductRuleAttrInfo);
/**
*
*
* @param id
* @return
*/
public int deleteMallProductRuleAttrInfoById(Long id);
/**
*
*
* @param ids
* @return
*/
public int deleteMallProductRuleAttrInfoByIds(Long[] ids);
/**
*
* @param ruleModel
* @return
*/
int bacthInsertRule (@Param("ruleModel") RuleModel ruleModel);
/**
*
* @param ids Ids
* @return
*/
int deleteRuleAttrByRuleIds (Long[] ids);
}

View File

@ -1,61 +0,0 @@
package com.ruoyi.mall.product.mapper;
import java.util.List;
import com.ruoyi.mall.product.domain.MallProductRuleInfo;
/**
* Mapper
*
* @author DongZeLiang
* @date 2022-09-16
*/
public interface MallProductRuleInfoMapper
{
/**
*
*
* @param id
* @return
*/
public MallProductRuleInfo selectMallProductRuleInfoById(Long id);
/**
*
*
* @param mallProductRuleInfo
* @return
*/
public List<MallProductRuleInfo> selectMallProductRuleInfoList(MallProductRuleInfo mallProductRuleInfo);
/**
*
*
* @param mallProductRuleInfo
* @return
*/
public int insertMallProductRuleInfo(MallProductRuleInfo mallProductRuleInfo);
/**
*
*
* @param mallProductRuleInfo
* @return
*/
public int updateMallProductRuleInfo(MallProductRuleInfo mallProductRuleInfo);
/**
*
*
* @param id
* @return
*/
public int deleteMallProductRuleInfoById(Long id);
/**
*
*
* @param ids
* @return
*/
public int deleteMallProductRuleInfoByIds(Long[] ids);
}

View File

@ -1,82 +0,0 @@
package com.ruoyi.mall.product.mapper;
import java.util.List;
import com.ruoyi.mall.product.domain.MallProductSkuInfo;
import com.ruoyi.mall.product.domain.model.SkuModel;
import org.apache.ibatis.annotations.Param;
/**
* SKUMapper
*
* @author DongZeLiang
* @date 2022-09-19
*/
public interface MallProductSkuInfoMapper
{
/**
* SKU
*
* @param id SKU
* @return SKU
*/
public MallProductSkuInfo selectMallProductSkuInfoById(Long id);
/**
* SKU
*
* @param mallProductSkuInfo SKU
* @return SKU
*/
public List<MallProductSkuInfo> selectMallProductSkuInfoList(MallProductSkuInfo mallProductSkuInfo);
/**
* SKU
*
* @param mallProductSkuInfo SKU
* @return
*/
public int insertMallProductSkuInfo(MallProductSkuInfo mallProductSkuInfo);
/**
* SKU
*
* @param mallProductSkuInfo SKU
* @return
*/
public int updateMallProductSkuInfo(MallProductSkuInfo mallProductSkuInfo);
/**
* SKU
*
* @param id SKU
* @return
*/
public int deleteMallProductSkuInfoById(Long id);
/**
* SKU
*
* @param ids
* @return
*/
public int deleteMallProductSkuInfoByIds(Long[] ids);
/**
*
* @param skuModel
* @return
*/
int batchInsertProductSku (SkuModel skuModel);
/**
* SKU
* @param productId
*/
void deleteMallProductSkuInfoByProductId (@Param("productId") Long productId);
/**
* ids
* @param ids
*/
void deleteMallProductSkuInfoByProductIds (Long[] ids);
}

View File

@ -1,61 +0,0 @@
package com.ruoyi.mall.product.mapper;
import java.util.List;
import com.ruoyi.mall.product.domain.MallProductTypeInfo;
/**
* Mapper
*
* @author DongZeLiang
* @date 2022-09-16
*/
public interface MallProductTypeInfoMapper
{
/**
*
*
* @param id
* @return
*/
public MallProductTypeInfo selectMallProductTypeInfoById(Long id);
/**
*
*
* @param mallProductTypeInfo
* @return
*/
public List<MallProductTypeInfo> selectMallProductTypeInfoList(MallProductTypeInfo mallProductTypeInfo);
/**
*
*
* @param mallProductTypeInfo
* @return
*/
public int insertMallProductTypeInfo(MallProductTypeInfo mallProductTypeInfo);
/**
*
*
* @param mallProductTypeInfo
* @return
*/
public int updateMallProductTypeInfo(MallProductTypeInfo mallProductTypeInfo);
/**
*
*
* @param id
* @return
*/
public int deleteMallProductTypeInfoById(Long id);
/**
*
*
* @param ids
* @return
*/
public int deleteMallProductTypeInfoByIds(Long[] ids);
}

View File

@ -1,61 +0,0 @@
package com.ruoyi.mall.product.service;
import java.util.List;
import com.ruoyi.mall.product.domain.MallProductBrandInfo;
/**
* Service
*
* @author DongZeLiang
* @date 2022-09-15
*/
public interface IMallProductBrandInfoService
{
/**
*
*
* @param id
* @return
*/
public MallProductBrandInfo selectMallProductBrandInfoById(Long id);
/**
*
*
* @param mallProductBrandInfo
* @return
*/
public List<MallProductBrandInfo> selectMallProductBrandInfoList(MallProductBrandInfo mallProductBrandInfo);
/**
*
*
* @param mallProductBrandInfo
* @return
*/
public int insertMallProductBrandInfo(MallProductBrandInfo mallProductBrandInfo);
/**
*
*
* @param mallProductBrandInfo
* @return
*/
public int updateMallProductBrandInfo(MallProductBrandInfo mallProductBrandInfo);
/**
*
*
* @param ids
* @return
*/
public int deleteMallProductBrandInfoByIds(Long[] ids);
/**
*
*
* @param id
* @return
*/
public int deleteMallProductBrandInfoById(Long id);
}

View File

@ -1,80 +0,0 @@
package com.ruoyi.mall.product.service;
import java.util.List;
import com.ruoyi.mall.product.domain.MallProductInfo;
import com.ruoyi.mall.product.domain.reponse.ProductDetailsResponse;
import com.ruoyi.mall.product.domain.reponse.ProductInfoResponse;
import com.ruoyi.mall.product.domain.request.ProductInfoRequest;
/**
* Service
*
* @author DongZeLiang
* @date 2022-09-19
*/
public interface IMallProductInfoService
{
/**
*
*
* @param id
* @return
*/
public ProductInfoResponse selectMallProductInfoById(Long id);
public ProductDetailsResponse selectProductDetailsById(Long id);
/**
*
*
* @param mallProductInfo
* @return
*/
public List<MallProductInfo> selectMallProductInfoList(MallProductInfo mallProductInfo);
/**
*
*
* @param productInfoRequest
* @return
*/
public int insertMallProductInfo(ProductInfoRequest productInfoRequest);
/**
*
*
* @param productInfoRequest
* @return
*/
public int updateMallProductInfo(ProductInfoRequest productInfoRequest);
/**
*
*
* @param ids
* @return
*/
public int deleteMallProductInfoByIds(Long[] ids);
/**
*
*
* @param id
* @return
*/
public int deleteMallProductInfoById(Long id);
/**
*
* @param mallProductInfo
* @return
*/
Long selectMallProductInfoCount (MallProductInfo mallProductInfo);
void uploadInfo(String id);
/**
* ES
*/
void loadingProductInfoToEs();
}

View File

@ -1,61 +0,0 @@
package com.ruoyi.mall.product.service;
import java.util.List;
import com.ruoyi.mall.product.domain.MallProductReviewInfo;
/**
* Service
*
* @author DongZeLiang
* @date 2022-09-26
*/
public interface IMallProductReviewInfoService
{
/**
*
*
* @param id
* @return
*/
public MallProductReviewInfo selectMallProductReviewInfoById(Long id);
/**
*
*
* @param mallProductReviewInfo
* @return
*/
public List<MallProductReviewInfo> selectMallProductReviewInfoList(MallProductReviewInfo mallProductReviewInfo);
/**
*
*
* @param mallProductReviewInfo
* @return
*/
public int insertMallProductReviewInfo(MallProductReviewInfo mallProductReviewInfo);
/**
*
*
* @param mallProductReviewInfo
* @return
*/
public int updateMallProductReviewInfo(MallProductReviewInfo mallProductReviewInfo);
/**
*
*
* @param ids
* @return
*/
public int deleteMallProductReviewInfoByIds(Long[] ids);
/**
*
*
* @param id
* @return
*/
public int deleteMallProductReviewInfoById(Long id);
}

View File

@ -1,93 +0,0 @@
package com.ruoyi.mall.product.service;
import java.util.List;
import com.ruoyi.mall.product.domain.MallProductRuleAttrInfo;
import com.ruoyi.mall.product.domain.model.RuleAttrModel;
import com.ruoyi.mall.product.domain.model.RuleModel;
/**
* Service
*
* @author DongZeLiang
* @date 2022-09-16
*/
public interface IMallProductRuleAttrInfoService
{
/**
*
*
* @param id
* @return
*/
public MallProductRuleAttrInfo selectMallProductRuleAttrInfoById(Long id);
/**
*
*
* @param mallProductRuleAttrInfo
* @return
*/
public List<MallProductRuleAttrInfo> selectMallProductRuleAttrInfoList(MallProductRuleAttrInfo mallProductRuleAttrInfo);
/**
*
*
* @param mallProductRuleAttrInfo
* @return
*/
public int insertMallProductRuleAttrInfo(MallProductRuleAttrInfo mallProductRuleAttrInfo);
/**
*
*
* @param ruleModel
* @return
*/
public int insertRuleModel(RuleModel ruleModel);
default int insertRuleModel (Long id, List<RuleAttrModel> ruleList){
return this.insertRuleModel(new RuleModel(){{
setRuleId(id);
setRuleList(ruleList);
}});
}
/**
*
*
* @param mallProductRuleAttrInfo
* @return
*/
public int updateMallProductRuleAttrInfo(MallProductRuleAttrInfo mallProductRuleAttrInfo);
/**
*
*
* @param ids
* @return
*/
public int deleteMallProductRuleAttrInfoByIds(Long[] ids);
/**
*
*
* @param id
* @return
*/
public int deleteMallProductRuleAttrInfoById(Long id);
/**
*
* @param ids Ids
* @return
*/
public int deleteRuleAttrByRuleIds(Long[] ids);
/**
*
* @param id ID
*/
default int deleteRuleAttrByRuleId (Long id){
return this.deleteRuleAttrByRuleIds(new Long[]{id});
}
}

View File

@ -1,62 +0,0 @@
package com.ruoyi.mall.product.service;
import java.util.List;
import com.ruoyi.mall.product.domain.MallProductRuleInfo;
import com.ruoyi.mall.product.domain.request.RuleRequest;
/**
* Service
*
* @author DongZeLiang
* @date 2022-09-16
*/
public interface IMallProductRuleInfoService
{
/**
*
*
* @param id
* @return
*/
public MallProductRuleInfo selectMallProductRuleInfoById(Long id);
/**
*
*
* @param mallProductRuleInfo
* @return
*/
public List<MallProductRuleInfo> selectMallProductRuleInfoList(MallProductRuleInfo mallProductRuleInfo);
/**
*
*
* @param ruleRequest
* @return
*/
public int insertMallProductRuleInfo(RuleRequest ruleRequest);
/**
*
*
* @param ruleRequest
* @return
*/
public int updateMallProductRuleInfo(RuleRequest ruleRequest);
/**
*
*
* @param ids
* @return
*/
public int deleteMallProductRuleInfoByIds(Long[] ids);
/**
*
*
* @param id
* @return
*/
public int deleteMallProductRuleInfoById(Long id);
}

View File

@ -1,88 +0,0 @@
package com.ruoyi.mall.product.service;
import java.util.List;
import com.ruoyi.mall.product.domain.MallProductSkuInfo;
import com.ruoyi.mall.product.domain.model.SkuModel;
/**
* SKUService
*
* @author DongZeLiang
* @date 2022-09-19
*/
public interface IMallProductSkuInfoService
{
/**
* SKU
*
* @param id SKU
* @return SKU
*/
public MallProductSkuInfo selectMallProductSkuInfoById(Long id);
/**
* SKU
*
* @param mallProductSkuInfo SKU
* @return SKU
*/
public List<MallProductSkuInfo> selectMallProductSkuInfoList(MallProductSkuInfo mallProductSkuInfo);
/**
* IdSKU
*
* @param productId Id
* @return SKU
*/
public default List<MallProductSkuInfo> selectMallProductSkuInfoList(Long productId){
return this.selectMallProductSkuInfoList(new MallProductSkuInfo(){{
setProductId(productId);
}});
}
/**
* SKU
*
* @param mallProductSkuInfo SKU
* @return
*/
public int insertMallProductSkuInfo(MallProductSkuInfo mallProductSkuInfo);
public int batchInsertProductSku(SkuModel skuModel);
/**
* SKU
*
* @param mallProductSkuInfo SKU
* @return
*/
public int updateMallProductSkuInfo(MallProductSkuInfo mallProductSkuInfo);
/**
* SKU
*
* @param ids SKU
* @return
*/
public int deleteMallProductSkuInfoByIds(Long[] ids);
/**
* SKU
*
* @param id SKU
* @return
*/
public int deleteMallProductSkuInfoById(Long id);
/**
* sku
* @param productId
*/
void deleteMallProductSkuInfoByProductId (Long productId);
/**
* Ids
* @param ids
*/
void deleteMallProductSkuInfoByProductIds (Long[] ids);
}

View File

@ -1,61 +0,0 @@
package com.ruoyi.mall.product.service;
import java.util.List;
import com.ruoyi.mall.product.domain.MallProductTypeInfo;
/**
* Service
*
* @author DongZeLiang
* @date 2022-09-16
*/
public interface IMallProductTypeInfoService
{
/**
*
*
* @param id
* @return
*/
public MallProductTypeInfo selectMallProductTypeInfoById(Long id);
/**
*
*
* @param mallProductTypeInfo
* @return
*/
public List<MallProductTypeInfo> selectMallProductTypeInfoList(MallProductTypeInfo mallProductTypeInfo);
/**
*
*
* @param mallProductTypeInfo
* @return
*/
public int insertMallProductTypeInfo(MallProductTypeInfo mallProductTypeInfo);
/**
*
*
* @param mallProductTypeInfo
* @return
*/
public int updateMallProductTypeInfo(MallProductTypeInfo mallProductTypeInfo);
/**
*
*
* @param ids
* @return
*/
public int deleteMallProductTypeInfoByIds(Long[] ids);
/**
*
*
* @param id
* @return
*/
public int deleteMallProductTypeInfoById(Long id);
}

View File

@ -1,98 +0,0 @@
package com.ruoyi.mall.product.service.impl;
import java.util.List;
import com.ruoyi.common.core.utils.DateUtils;
import com.ruoyi.common.security.utils.SecurityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.mall.product.mapper.MallProductBrandInfoMapper;
import com.ruoyi.mall.product.domain.MallProductBrandInfo;
import com.ruoyi.mall.product.service.IMallProductBrandInfoService;
/**
* Service
*
* @author DongZeLiang
* @date 2022-09-15
*/
@Service
public class MallProductBrandInfoServiceImpl implements IMallProductBrandInfoService
{
@Autowired
private MallProductBrandInfoMapper mallProductBrandInfoMapper;
/**
*
*
* @param id
* @return
*/
@Override
public MallProductBrandInfo selectMallProductBrandInfoById(Long id)
{
return mallProductBrandInfoMapper.selectMallProductBrandInfoById(id);
}
/**
*
*
* @param mallProductBrandInfo
* @return
*/
@Override
public List<MallProductBrandInfo> selectMallProductBrandInfoList(MallProductBrandInfo mallProductBrandInfo)
{
return mallProductBrandInfoMapper.selectMallProductBrandInfoList(mallProductBrandInfo);
}
/**
*
*
* @param mallProductBrandInfo
* @return
*/
@Override
public int insertMallProductBrandInfo(MallProductBrandInfo mallProductBrandInfo)
{
mallProductBrandInfo.setCreateBy(String.valueOf(SecurityUtils.getUserId()));
mallProductBrandInfo.setCreateTime(DateUtils.getNowDate());
return mallProductBrandInfoMapper.insertMallProductBrandInfo(mallProductBrandInfo);
}
/**
*
*
* @param mallProductBrandInfo
* @return
*/
@Override
public int updateMallProductBrandInfo(MallProductBrandInfo mallProductBrandInfo)
{
mallProductBrandInfo.setUpdateTime(DateUtils.getNowDate());
return mallProductBrandInfoMapper.updateMallProductBrandInfo(mallProductBrandInfo);
}
/**
*
*
* @param ids
* @return
*/
@Override
public int deleteMallProductBrandInfoByIds(Long[] ids)
{
return mallProductBrandInfoMapper.deleteMallProductBrandInfoByIds(ids);
}
/**
*
*
* @param id
* @return
*/
@Override
public int deleteMallProductBrandInfoById(Long id)
{
return mallProductBrandInfoMapper.deleteMallProductBrandInfoById(id);
}
}

View File

@ -1,352 +0,0 @@
package com.ruoyi.mall.product.service.impl;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import com.alibaba.fastjson.JSON;
import com.ruoyi.common.core.constant.EsConstant;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.exception.ServiceException;
import com.ruoyi.common.core.utils.DateUtils;
import com.ruoyi.common.core.utils.bean.BeanUtils;
import com.ruoyi.common.rabbit.domain.Message;
import com.ruoyi.common.rabbit.enums.QueueEnum;
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.mall.product.cache.ProductInfoCache;
import com.ruoyi.mall.product.domain.MallProductRuleInfo;
import com.ruoyi.mall.product.domain.MallProductSkuInfo;
import com.ruoyi.mall.product.domain.model.ProductModel;
import com.ruoyi.mall.product.domain.model.SkuModel;
import com.ruoyi.mall.product.domain.reponse.ProductDetailsResponse;
import com.ruoyi.mall.product.domain.reponse.ProductInfoResponse;
import com.ruoyi.mall.product.domain.request.ProductInfoRequest;
import com.ruoyi.mall.product.service.IMallProductRuleInfoService;
import com.ruoyi.mall.product.service.IMallProductSkuInfoService;
import com.ruoyi.system.domain.vo.EsDocInsertVo;
import com.ruoyi.system.remote.api.RemoteEsDocService;
import com.ruoyi.system.remote.api.RemoteEsIndexService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.mall.product.mapper.MallProductInfoMapper;
import com.ruoyi.mall.product.domain.MallProductInfo;
import com.ruoyi.mall.product.service.IMallProductInfoService;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import javax.annotation.PostConstruct;
/**
* Service
*
* @author DongZeLiang
* @date 2022-09-19
*/
@Service
@Slf4j
public class MallProductInfoServiceImpl implements IMallProductInfoService {
@Autowired
private MallProductInfoMapper mallProductInfoMapper;
@Autowired
private IMallProductSkuInfoService skuInfoService;
@Autowired
private IMallProductRuleInfoService ruleInfoService;
@Autowired
private ProductInfoCache productInfoCache;
@Autowired
private RabbitTemplate rabbitTemplate;
@Autowired
private RemoteEsDocService remoteEsDocService;
@Autowired
private RemoteEsIndexService remoteEsIndexService;
/**
* ES
*/
@PostConstruct
public void init() {
loadingProductInfoToEs();
}
/**
*
*
* @param id
* @return
*/
@Override
public ProductInfoResponse selectMallProductInfoById(Long id) {
MallProductInfo mallProductInfo = mallProductInfoMapper.selectMallProductInfoById(id);
ProductInfoResponse productInfoResponse = new ProductInfoResponse();
BeanUtils.copyBeanProp(productInfoResponse, mallProductInfo);
productInfoResponse.setSkuInfoList(
skuInfoService.selectMallProductSkuInfoList(new MallProductSkuInfo() {{
setProductId(id);
}})
);
return productInfoResponse;
}
@Override
public ProductDetailsResponse selectProductDetailsById(Long productId) {
if (productId == null || productId == 0) {
throw new ServiceException("查询商品信息,依据不合法!");
}
ProductDetailsResponse productDetailsResponse = new ProductDetailsResponse();
ProductModel productModel = mallProductInfoMapper.selectProductModelById(productId);
if (productModel == null) {
throw new ServiceException("查询商品信息,商品数据为空");
}
productDetailsResponse.setProduct(productModel);
List<MallProductSkuInfo> mallProductSkuInfos = skuInfoService.selectMallProductSkuInfoList(productId);
if (mallProductSkuInfos == null || mallProductSkuInfos.size() == 0) {
throw new ServiceException("查询商品信息SKU数据为空");
}
productDetailsResponse.setSkuList(mallProductSkuInfos);
MallProductRuleInfo ruleInfo = ruleInfoService.selectMallProductRuleInfoById(productModel.getRuleId());
if (ruleInfo == null) {
throw new ServiceException("查询商品信息,规格数据为空");
}
productDetailsResponse.setProductRule(ruleInfo);
return productDetailsResponse;
}
/**
*
*
* @param mallProductInfo
* @return
*/
@Override
public List<MallProductInfo> selectMallProductInfoList(MallProductInfo mallProductInfo) {
return mallProductInfoMapper.selectMallProductInfoList(mallProductInfo);
}
/**
*
*
* @param productInfoRequest
* @return
*/
@Override
@Transactional
public int insertMallProductInfo(ProductInfoRequest productInfoRequest) {
productInfoRequest.setCreateBy(String.valueOf(SecurityUtils.getUserId()));
productInfoRequest.setCreateTime(DateUtils.getNowDate());
int i = mallProductInfoMapper.insertMallProductInfo(productInfoRequest);
if (i == 0) {
return i;
}
skuInfoService.batchInsertProductSku(
SkuModel.builderSkuModel(productInfoRequest.getId(), productInfoRequest.getSkuInfoList())
);
// 给搜索系统发送消息需要进行搜索更新
try {
rabbitTemplate.convertAndSend(QueueEnum.PRODUCT_ADD.queueName(),
Message.builderMsg(productInfoRequest.getId()));
} catch (ServiceException serviceException) {
throw new ServiceException("给搜索系统发送消息需要进行搜索更新失败!");
}
return i;
}
/**
*
*
* @param productInfoRequest
* @return
*/
@Override
@Transactional
public int updateMallProductInfo(ProductInfoRequest productInfoRequest) {
productInfoRequest.setUpdateBy(String.valueOf(SecurityUtils.getUserId()));
productInfoRequest.setUpdateTime(DateUtils.getNowDate());
int i = mallProductInfoMapper.updateMallProductInfo(productInfoRequest);
if (i == 0) {
//将商品信息推送至MQ异步更新ES
try {
rabbitTemplate.convertAndSend(QueueEnum.PRODUCT_ADD.queueName(),
Message.builderMsg(productInfoRequest.getId()));
} catch (ServiceException serviceException) {
throw new ServiceException("给搜索系统发送消息需要进行搜索更新失败!");
}
return i;
}
skuInfoService.deleteMallProductSkuInfoByProductId(productInfoRequest.getId());
skuInfoService.batchInsertProductSku(
SkuModel.builderSkuModel(productInfoRequest.getId(), productInfoRequest.getSkuInfoList())
);
return i;
}
/**
*
*
* @param ids
* @return
*/
@Override
public int deleteMallProductInfoByIds(Long[] ids) {
skuInfoService.deleteMallProductSkuInfoByProductIds(ids);
for (Long id : ids) {
// 延迟执行
productInfoCache.delayRemove(id);
}
return mallProductInfoMapper.deleteMallProductInfoByIds(ids);
}
/**
*
*
* @param id
* @return
*/
@Override
public int deleteMallProductInfoById(Long id) {
return mallProductInfoMapper.deleteMallProductInfoById(id);
}
/**
*
*
* @param mallProductInfo
* @return
*/
@Override
public Long selectMallProductInfoCount(MallProductInfo mallProductInfo) {
return mallProductInfoMapper.selectMallProductInfoCount(mallProductInfo);
}
/**
*
*
* @param id
* @return
*/
@Override
@Transactional
public void uploadInfo(String id) {
// 查询商品的spu信息
MallProductInfo mallProductInfo = mallProductInfoMapper.selectMallProductInfoById(Long.valueOf(id));
// 校验商品信息是否存在
if (mallProductInfo == null) {
throw new ServiceException("该商品信息不存在");
}
// 查询商品的sku信息
List<MallProductSkuInfo> mallProductSkuInfos = skuInfoService.selectMallProductSkuInfoList(Long.valueOf(id));
// 校验sku信息是否为空
if (CollectionUtils.isEmpty(mallProductSkuInfos)) {
throw new ServiceException("该商品下sku信息不存在");
}
// 切换商品的上下架状态并且在es中删除下架的商品
String newStatus = mallProductInfo.getStatus().equals("1") ? "0" : "1";
mallProductInfo.setStatus(newStatus);
//判断该商品是上架状态还是下架状态
if (newStatus.equals("1")){
//修改该商品状态为上架 并且添加至es
mallProductInfoMapper.updateMallProductInfo(mallProductInfo);
// 检查商品索引是否存在
R<Boolean> indexExit = remoteEsIndexService.indexExit(EsConstant.INDEX_NAME);
if (!indexExit.getData()) {
throw new ServiceException("该商品索引不存在");
}
//构建es所需要的数据结构
List<EsDocInsertVo> esDocInsertVos = builderProductInfo2Es(mallProductInfo,mallProductSkuInfos);
//批量插入
remoteEsDocService.batchInsertDocs(esDocInsertVos);
}else {
//修改该商品状态为下架 并且删除es数据
mallProductInfoMapper.updateMallProductInfo(mallProductInfo);
// 检查商品索引是否存在
R<Boolean> indexExit = remoteEsIndexService.indexExit(EsConstant.INDEX_NAME);
if (!indexExit.getData()) {
throw new ServiceException("该商品索引不存在");
}
//根据商品spuId查询出skuId 进行es删
List<MallProductSkuInfo> skuInfoList = selectMallProductInfoById(Long.valueOf(mallProductInfo.getId())).getSkuInfoList();
skuInfoList.stream().forEach(skuInfo->{
Long docsId = skuInfo.getId();
remoteEsDocService.deleteDocsById(String.valueOf(docsId));
});
}
}
@Override
public void loadingProductInfoToEs() {
//查询所有商品信息
List<MallProductInfo> mallProductInfos = mallProductInfoMapper.selectMallProductInfoList(new MallProductInfo());
if (mallProductInfos == null || mallProductInfos.size() == 0) {
log.info("暂无需要同步的商品");
}
//调用ES查询索引是否存在
R<Boolean> indexExit = remoteEsIndexService.indexExit("mall_product");
if (!indexExit.getData()) {
log.info("mall_product索引不存在,调用ES服务创建索引");
//创建索引
R<Boolean> indexCreate = remoteEsIndexService.indexCreate("mall_product");
if (!indexCreate.getData()) {
log.info("创建mall_product索引失败");
}
//批量同步商品信息到ES
//构建参数
List<EsDocInsertVo> esDocInsertVo = builderProductInfoToEs(mallProductInfos);
//调用ES服务批量插入文档
R<Boolean> batchInsert = remoteEsDocService.batchInsertDocs(esDocInsertVo);
if (batchInsert.getData()) {
log.info("批量同步商品信息到ES成功");
}
}
}
private List<EsDocInsertVo> builderProductInfoToEs(List<MallProductInfo> mallProductInfos) {
List<EsDocInsertVo> esDocInsertVos = new ArrayList<>();
mallProductInfos.stream().forEach(mallProductInfo -> {
EsDocInsertVo esDocInsertVo = new EsDocInsertVo();
esDocInsertVo.setId(String.valueOf(mallProductInfo.getId()));
esDocInsertVo.setIndexName("mall_product");
//对象转为Map
Map<String, Object> data = JSON.parseObject(JSON.toJSONString(mallProductInfo), Map.class);
esDocInsertVo.setData(data);
esDocInsertVos.add(esDocInsertVo);
});
return esDocInsertVos;
}
private List<EsDocInsertVo> builderProductInfo2Es(MallProductInfo mallProductInfo, List<MallProductSkuInfo> mallProductSkuInfos) {
//构建返回结果集
ArrayList<EsDocInsertVo> esDocInsertVos = new ArrayList<>();
mallProductSkuInfos.forEach(mallProductSkuInfo -> {
EsDocInsertVo esDocInsertVo = new EsDocInsertVo();
esDocInsertVo.setId(String.valueOf(mallProductInfo.getId()));
esDocInsertVo.setIndexName(EsConstant.INDEX_NAME);
esDocInsertVo.setTypeName("_doc");
//对象转为Map
Map<String, Object> data = JSON.parseObject(JSON.toJSONString(mallProductInfo), Map.class);
esDocInsertVo.setData(data);
//将对象添加进数组
esDocInsertVos.add(esDocInsertVo);
});
return esDocInsertVos;
}
}

View File

@ -1,100 +0,0 @@
package com.ruoyi.mall.product.service.impl;
import java.util.List;
import com.ruoyi.common.core.utils.DateUtils;
import com.ruoyi.common.security.utils.SecurityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.mall.product.mapper.MallProductReviewInfoMapper;
import com.ruoyi.mall.product.domain.MallProductReviewInfo;
import com.ruoyi.mall.product.service.IMallProductReviewInfoService;
/**
* Service
*
* @author DongZeLiang
* @date 2022-09-26
*/
@Service
public class MallProductReviewInfoServiceImpl implements IMallProductReviewInfoService
{
@Autowired
private MallProductReviewInfoMapper mallProductReviewInfoMapper;
/**
*
*
* @param id
* @return
*/
@Override
public MallProductReviewInfo selectMallProductReviewInfoById(Long id)
{
return mallProductReviewInfoMapper.selectMallProductReviewInfoById(id);
}
/**
*
*
* @param mallProductReviewInfo
* @return
*/
@Override
public List<MallProductReviewInfo> selectMallProductReviewInfoList(MallProductReviewInfo mallProductReviewInfo)
{
return mallProductReviewInfoMapper.selectMallProductReviewInfoList(mallProductReviewInfo);
}
/**
*
*
* @param mallProductReviewInfo
* @return
*/
@Override
public int insertMallProductReviewInfo(MallProductReviewInfo mallProductReviewInfo)
{
mallProductReviewInfo.setCreateBy(String.valueOf(SecurityUtils.getUserId()));
mallProductReviewInfo.setCreateTime(DateUtils.getNowDate());
return mallProductReviewInfoMapper.insertMallProductReviewInfo(mallProductReviewInfo);
}
/**
*
*
* @param mallProductReviewInfo
* @return
*/
@Override
public int updateMallProductReviewInfo(MallProductReviewInfo mallProductReviewInfo)
{
mallProductReviewInfo.setUpdateBy(String.valueOf(SecurityUtils.getUserId()));
mallProductReviewInfo.setUpdateTime(DateUtils.getNowDate());
return mallProductReviewInfoMapper.updateMallProductReviewInfo(mallProductReviewInfo);
}
/**
*
*
* @param ids
* @return
*/
@Override
public int deleteMallProductReviewInfoByIds(Long[] ids)
{
return mallProductReviewInfoMapper.deleteMallProductReviewInfoByIds(ids);
}
/**
*
*
* @param id
* @return
*/
@Override
public int deleteMallProductReviewInfoById(Long id)
{
return mallProductReviewInfoMapper.deleteMallProductReviewInfoById(id);
}
}

View File

@ -1,112 +0,0 @@
package com.ruoyi.mall.product.service.impl;
import java.util.List;
import com.ruoyi.mall.product.domain.model.RuleAttrModel;
import com.ruoyi.mall.product.domain.model.RuleModel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.mall.product.mapper.MallProductRuleAttrInfoMapper;
import com.ruoyi.mall.product.domain.MallProductRuleAttrInfo;
import com.ruoyi.mall.product.service.IMallProductRuleAttrInfoService;
/**
* Service
*
* @author DongZeLiang
* @date 2022-09-16
*/
@Service
public class MallProductRuleAttrInfoServiceImpl implements IMallProductRuleAttrInfoService
{
@Autowired
private MallProductRuleAttrInfoMapper mallProductRuleAttrInfoMapper;
/**
*
*
* @param id
* @return
*/
@Override
public MallProductRuleAttrInfo selectMallProductRuleAttrInfoById(Long id)
{
return mallProductRuleAttrInfoMapper.selectMallProductRuleAttrInfoById(id);
}
/**
*
*
* @param mallProductRuleAttrInfo
* @return
*/
@Override
public List<MallProductRuleAttrInfo> selectMallProductRuleAttrInfoList(MallProductRuleAttrInfo mallProductRuleAttrInfo)
{
return mallProductRuleAttrInfoMapper.selectMallProductRuleAttrInfoList(mallProductRuleAttrInfo);
}
/**
*
*
* @param mallProductRuleAttrInfo
* @return
*/
@Override
public int insertMallProductRuleAttrInfo(MallProductRuleAttrInfo mallProductRuleAttrInfo)
{
return mallProductRuleAttrInfoMapper.insertMallProductRuleAttrInfo(mallProductRuleAttrInfo);
}
@Override
public int insertRuleModel (RuleModel ruleModel) {
return mallProductRuleAttrInfoMapper.bacthInsertRule(ruleModel);
}
/**
*
*
* @param mallProductRuleAttrInfo
* @return
*/
@Override
public int updateMallProductRuleAttrInfo(MallProductRuleAttrInfo mallProductRuleAttrInfo)
{
return mallProductRuleAttrInfoMapper.updateMallProductRuleAttrInfo(mallProductRuleAttrInfo);
}
/**
*
*
* @param ids
* @return
*/
@Override
public int deleteMallProductRuleAttrInfoByIds(Long[] ids)
{
return mallProductRuleAttrInfoMapper.deleteMallProductRuleAttrInfoByIds(ids);
}
/**
*
*
* @param id
* @return
*/
@Override
public int deleteMallProductRuleAttrInfoById(Long id)
{
return mallProductRuleAttrInfoMapper.deleteMallProductRuleAttrInfoById(id);
}
/**
*
* @param ids Ids
* @return
*/
@Override
public int deleteRuleAttrByRuleIds (Long[] ids) {
return mallProductRuleAttrInfoMapper.deleteRuleAttrByRuleIds(ids);
}
}

View File

@ -1,126 +0,0 @@
package com.ruoyi.mall.product.service.impl;
import java.util.List;
import com.ruoyi.common.core.utils.DateUtils;
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.mall.product.domain.model.RuleModel;
import com.ruoyi.mall.product.domain.request.RuleRequest;
import com.ruoyi.mall.product.service.IMallProductRuleAttrInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.mall.product.mapper.MallProductRuleInfoMapper;
import com.ruoyi.mall.product.domain.MallProductRuleInfo;
import com.ruoyi.mall.product.service.IMallProductRuleInfoService;
import org.springframework.transaction.annotation.Transactional;
/**
* Service
*
* @author DongZeLiang
* @date 2022-09-16
*/
@Service
public class MallProductRuleInfoServiceImpl implements IMallProductRuleInfoService
{
@Autowired
private MallProductRuleInfoMapper mallProductRuleInfoMapper;
@Autowired
private IMallProductRuleAttrInfoService ruleAttrInfoService;
/**
*
*
* @param id
* @return
*/
@Override
public MallProductRuleInfo selectMallProductRuleInfoById(Long id)
{
return mallProductRuleInfoMapper.selectMallProductRuleInfoById(id);
}
/**
*
*
* @param mallProductRuleInfo
* @return
*/
@Override
public List<MallProductRuleInfo> selectMallProductRuleInfoList(MallProductRuleInfo mallProductRuleInfo)
{
return mallProductRuleInfoMapper.selectMallProductRuleInfoList(mallProductRuleInfo);
}
/**
*
*
* @param ruleRequest
* @return
*/
@Override
@Transactional
public int insertMallProductRuleInfo(RuleRequest ruleRequest)
{
ruleRequest.setCreateBy(String.valueOf(SecurityUtils.getUserId()));
ruleRequest.setCreateTime(DateUtils.getNowDate());
int i = mallProductRuleInfoMapper.insertMallProductRuleInfo(ruleRequest);
if (i == 0){
return i;
}
// 组装了一个Model 用来添加规格属性
RuleModel ruleModel = new RuleModel();
ruleModel.setRuleId(ruleRequest.getId());
ruleModel.setRuleList(ruleRequest.getRuleList());
ruleAttrInfoService.insertRuleModel(ruleModel);
return i;
}
/**
*
*
* @param ruleRequest
* @return
*/
@Override
public int updateMallProductRuleInfo(RuleRequest ruleRequest)
{
ruleRequest.setUpdateBy(String.valueOf(SecurityUtils.getUserId()));
ruleRequest.setUpdateTime(DateUtils.getNowDate());
int i = mallProductRuleInfoMapper.updateMallProductRuleInfo(ruleRequest);
if (i == 0){
return i;
}
ruleAttrInfoService.deleteRuleAttrByRuleId(ruleRequest.getId());
ruleAttrInfoService.insertRuleModel(ruleRequest.getId(), ruleRequest.getRuleList());
return i;
}
/**
*
*
* @param ids
* @return
*/
@Override
@Transactional
public int deleteMallProductRuleInfoByIds(Long[] ids)
{
ruleAttrInfoService.deleteRuleAttrByRuleIds(ids);
return mallProductRuleInfoMapper.deleteMallProductRuleInfoByIds(ids);
}
/**
*
*
* @param id
* @return
*/
@Override
public int deleteMallProductRuleInfoById(Long id)
{
return mallProductRuleInfoMapper.deleteMallProductRuleInfoById(id);
}
}

View File

@ -1,120 +0,0 @@
package com.ruoyi.mall.product.service.impl;
import java.util.List;
import com.ruoyi.common.core.utils.DateUtils;
import com.ruoyi.common.core.utils.uuid.IdUtils;
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.mall.product.domain.model.SkuModel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.mall.product.mapper.MallProductSkuInfoMapper;
import com.ruoyi.mall.product.domain.MallProductSkuInfo;
import com.ruoyi.mall.product.service.IMallProductSkuInfoService;
/**
* SKUService
*
* @author DongZeLiang
* @date 2022-09-19
*/
@Service
public class MallProductSkuInfoServiceImpl implements IMallProductSkuInfoService
{
@Autowired
private MallProductSkuInfoMapper mallProductSkuInfoMapper;
/**
* SKU
*
* @param id SKU
* @return SKU
*/
@Override
public MallProductSkuInfo selectMallProductSkuInfoById(Long id)
{
return mallProductSkuInfoMapper.selectMallProductSkuInfoById(id);
}
/**
* SKU
*
* @param mallProductSkuInfo SKU
* @return SKU
*/
@Override
public List<MallProductSkuInfo> selectMallProductSkuInfoList(MallProductSkuInfo mallProductSkuInfo)
{
return mallProductSkuInfoMapper.selectMallProductSkuInfoList(mallProductSkuInfo);
}
/**
* SKU
*
* @param mallProductSkuInfo SKU
* @return
*/
@Override
public int insertMallProductSkuInfo(MallProductSkuInfo mallProductSkuInfo)
{
mallProductSkuInfo.setCreateBy(String.valueOf(SecurityUtils.getUserId()));
mallProductSkuInfo.setCreateTime(DateUtils.getNowDate());
return mallProductSkuInfoMapper.insertMallProductSkuInfo(mallProductSkuInfo);
}
@Override
public int batchInsertProductSku (SkuModel skuModel) {
skuModel.getSkuInfoList().forEach(skuInfo -> {
skuInfo.setNumber(IdUtils.fastSimpleUUID());
});
return mallProductSkuInfoMapper.batchInsertProductSku(skuModel);
}
/**
* SKU
*
* @param mallProductSkuInfo SKU
* @return
*/
@Override
public int updateMallProductSkuInfo(MallProductSkuInfo mallProductSkuInfo)
{
mallProductSkuInfo.setUpdateBy(String.valueOf(SecurityUtils.getUserId()));
mallProductSkuInfo.setUpdateTime(DateUtils.getNowDate());
return mallProductSkuInfoMapper.updateMallProductSkuInfo(mallProductSkuInfo);
}
/**
* SKU
*
* @param ids SKU
* @return
*/
@Override
public int deleteMallProductSkuInfoByIds(Long[] ids)
{
return mallProductSkuInfoMapper.deleteMallProductSkuInfoByIds(ids);
}
/**
* SKU
*
* @param id SKU
* @return
*/
@Override
public int deleteMallProductSkuInfoById(Long id)
{
return mallProductSkuInfoMapper.deleteMallProductSkuInfoById(id);
}
@Override
public void deleteMallProductSkuInfoByProductId (Long productId) {
mallProductSkuInfoMapper.deleteMallProductSkuInfoByProductId(productId);
}
@Override
public void deleteMallProductSkuInfoByProductIds (Long[] ids) {
mallProductSkuInfoMapper.deleteMallProductSkuInfoByProductIds(ids);
}
}

View File

@ -1,111 +0,0 @@
package com.ruoyi.mall.product.service.impl;
import java.util.List;
import com.ruoyi.common.core.utils.DateUtils;
import com.ruoyi.common.security.utils.SecurityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.mall.product.mapper.MallProductTypeInfoMapper;
import com.ruoyi.mall.product.domain.MallProductTypeInfo;
import com.ruoyi.mall.product.service.IMallProductTypeInfoService;
/**
* Service
*
* @author DongZeLiang
* @date 2022-09-16
*/
@Service
public class MallProductTypeInfoServiceImpl implements IMallProductTypeInfoService
{
@Autowired
private MallProductTypeInfoMapper mallProductTypeInfoMapper;
/**
*
*
* @param id
* @return
*/
@Override
public MallProductTypeInfo selectMallProductTypeInfoById(Long id)
{
return mallProductTypeInfoMapper.selectMallProductTypeInfoById(id);
}
/**
*
*
* @param mallProductTypeInfo
* @return
*/
@Override
public List<MallProductTypeInfo> selectMallProductTypeInfoList(MallProductTypeInfo mallProductTypeInfo)
{
List<MallProductTypeInfo> mallProductTypeInfos = mallProductTypeInfoMapper.selectMallProductTypeInfoList(mallProductTypeInfo);
if (mallProductTypeInfos == null || mallProductTypeInfos.size() == 0){
return null;
}
for (MallProductTypeInfo productTypeInfo : mallProductTypeInfos) {
MallProductTypeInfo mallProductTypeParam = new MallProductTypeInfo();
mallProductTypeParam.setParentId(productTypeInfo.getId());
productTypeInfo.setChildren(this.selectMallProductTypeInfoList(mallProductTypeParam));
}
return mallProductTypeInfos;
}
/**
*
*
* @param mallProductTypeInfo
* @return
*/
@Override
public int insertMallProductTypeInfo(MallProductTypeInfo mallProductTypeInfo)
{
mallProductTypeInfo.setCreateBy(String.valueOf(SecurityUtils.getUserId()));
mallProductTypeInfo.setCreateTime(DateUtils.getNowDate());
return mallProductTypeInfoMapper.insertMallProductTypeInfo(mallProductTypeInfo);
}
/**
*
*
* @param mallProductTypeInfo
* @return
*/
@Override
public int updateMallProductTypeInfo(MallProductTypeInfo mallProductTypeInfo)
{
mallProductTypeInfo.setUpdateBy(String.valueOf(SecurityUtils.getUserId()));
mallProductTypeInfo.setUpdateTime(DateUtils.getNowDate());
return mallProductTypeInfoMapper.updateMallProductTypeInfo(mallProductTypeInfo);
}
/**
*
*
* @param ids
* @return
*/
@Override
public int deleteMallProductTypeInfoByIds(Long[] ids)
{
return mallProductTypeInfoMapper.deleteMallProductTypeInfoByIds(ids);
}
/**
*
*
* @param id
* @return
*/
@Override
public int deleteMallProductTypeInfoById(Long id)
{
return mallProductTypeInfoMapper.deleteMallProductTypeInfoById(id);
}
}

View File

@ -1,163 +0,0 @@
package com.ruoyi.mall.search.domain;
import com.ruoyi.common.core.annotation.Excel;
import io.swagger.annotations.ApiParam;
/**
* @author DongZl
* @description:
* @Date 2022-10-15 09:32
*/
public class ProductSearch {
/** ID */
private Long id;
/** 商品名称 */
private String name;
/** 商品描述 */
private String productDesc;
/** 商品类型 */
private String type;
private String typeName;
/** 商品主图 */
private String img;
/** 商品轮播图 */
private String carouselImages;
/** 商品评论数 */
private Long commentCount;
/** 商品收藏人气 */
private Long collectCount;
/** 品牌信息 */
private String brand;
private String brandName;
/** 商品状态 */
private String status;
/** 单位 */
private String unit;
/** 搜索关键字 */
private String keywords;
public Long getId () {
return id;
}
public void setId (Long id) {
this.id = id;
}
public String getName () {
return name;
}
public void setName (String name) {
this.name = name;
}
public String getProductDesc () {
return productDesc;
}
public void setProductDesc (String productDesc) {
this.productDesc = productDesc;
}
public String getType () {
return type;
}
public void setType (String type) {
this.type = type;
}
public String getTypeName () {
return typeName;
}
public void setTypeName (String typeName) {
this.typeName = typeName;
}
public String getImg () {
return img;
}
public void setImg (String img) {
this.img = img;
}
public String getCarouselImages () {
return carouselImages;
}
public void setCarouselImages (String carouselImages) {
this.carouselImages = carouselImages;
}
public Long getCommentCount () {
return commentCount;
}
public void setCommentCount (Long commentCount) {
this.commentCount = commentCount;
}
public Long getCollectCount () {
return collectCount;
}
public void setCollectCount (Long collectCount) {
this.collectCount = collectCount;
}
public String getBrand () {
return brand;
}
public void setBrand (String brand) {
this.brand = brand;
}
public String getBrandName () {
return brandName;
}
public void setBrandName (String brandName) {
this.brandName = brandName;
}
public String getStatus () {
return status;
}
public void setStatus (String status) {
this.status = status;
}
public String getUnit () {
return unit;
}
public void setUnit (String unit) {
this.unit = unit;
}
public String getKeywords () {
return keywords;
}
public void setKeywords (String keywords) {
this.keywords = keywords;
}
}

View File

@ -1,14 +0,0 @@
package com.ruoyi.mall.search.domain.request;
import lombok.Data;
import java.util.Date;
@Data
public class HotWordsReq {
private Integer id;
private String hotWords;
private Integer searchFrequency;
private Date lastTime;
}

View File

@ -1,63 +0,0 @@
package com.ruoyi.mall.search.domain.request;
import com.ruoyi.common.core.constant.Constants;
/**
* @author DongZl
* @description:
* @Date 2022-10-24 03:07
*/
public class SearchReq {
/**
*
*/
private String keyWord;
/**
*
*/
private String ev = Constants.UTF8;
/**
*
*/
private Integer pageSize = 5;
/**
*
*/
private Integer pageNum = 1;
public String getKeyWord () {
return keyWord;
}
public void setKeyWord (String keyWord) {
this.keyWord = keyWord;
}
public String getEv () {
return ev;
}
public void setEv (String ev) {
this.ev = ev;
}
public Integer getPageSize () {
return pageSize;
}
public void setPageSize (Integer pageSize) {
this.pageSize = pageSize;
}
public Integer getPageNum () {
return pageNum;
}
public void setPageNum (Integer pageNum) {
this.pageNum = pageNum;
}
}

View File

@ -1,64 +0,0 @@
package com.ruoyi.mall.search.utils;
import com.alibaba.ttl.TransmittableThreadLocal;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author DongZl
* @description: 线
* @Date 2022-10-24 04:48
*/
public class SearchResultUtils {
private static final String LIST_NAME = "list";
private static final String TOTAL_NAME = "total";
private static final TransmittableThreadLocal<Map<String, Object>> THREAD_LOCAL = new TransmittableThreadLocal<>();
private static Map<String, Object> get(){
Map<String, Object> map = THREAD_LOCAL.get();
if (map != null){
return map;
}
THREAD_LOCAL.set(new HashMap<>());
return THREAD_LOCAL.get();
}
/**
*
* @return
* @param <T>
*/
public static <T> List<T> getList(){
return (List<T>) get().get(LIST_NAME);
}
/**
* List
* @param list
*/
public static void setList(List list){
get().put(LIST_NAME, list);
}
/**
*
* @return
* @param <T>
*/
public static <T> T getTotal(){
return (T) get().get(TOTAL_NAME);
}
/**
*
* @param total
*/
public static void setTotal(Object total){
get().put(TOTAL_NAME, total);
}
}

View File

@ -127,6 +127,10 @@
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-mall-search-remote</artifactId>
</dependency>
</dependencies>
<build>

View File

@ -1,28 +0,0 @@
package com.ruoyi.mall.search;
import com.ruoyi.common.security.annotation.EnableCustomConfig;
import com.ruoyi.common.security.annotation.EnableRyFeignClients;
import com.ruoyi.common.swagger.annotation.EnableCustomSwagger2;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
/**
* @author DongZl
* @description:
* @Date 2022-10-14 10:22
*/
@EnableCustomConfig
@EnableCustomSwagger2
@EnableRyFeignClients
@SpringBootApplication
@ComponentScan( value = "com.ruoyi.common")
@Slf4j
public class RuoYiMallSearchApplication {
public static void main(String[] args) {
SpringApplication.run(RuoYiMallSearchApplication.class, args);
log.info("(♥◠‿◠)ノ゙ 商城 - 搜索模块启动成功 ლ(´ڡ`ლ)゙ ");
}
}

View File

@ -1,69 +0,0 @@
package com.ruoyi.mall.search.controller;
import com.alibaba.fastjson2.JSONObject;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.mall.product.domain.reponse.ProductInfoResponse;
import com.ruoyi.mall.search.domain.request.SearchReq;
import com.ruoyi.mall.search.service.SearchService;
import com.ruoyi.mall.search.utils.SearchResultUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.List;
/**
* @author DongZl
* @description:
* @Date 2022-10-24 02:54
*/
@Controller
@RequestMapping("/search")
public class SearchController {
private final static Logger log = LoggerFactory.getLogger(SearchController.class);
@Autowired
private SearchService searchService;
/**
* 1
* 2
* 3
* 4
*
* @param searchReq
* @param model
* @return
*/
@GetMapping
public String search(SearchReq searchReq, Model model){
log.info("搜索:[{}]", JSONObject.toJSONString(searchReq));
if (StringUtils.isEmpty(searchReq.getKeyWord())){
return "search";
}
searchService.search(searchReq);
List<ProductInfoResponse> list = SearchResultUtils.getList();
Long total = SearchResultUtils.getTotal();
log.info(JSONObject.toJSONString(list));
model.addAttribute("dataList", list);
model.addAttribute("total", total);
model.addAttribute("searchReq",searchReq);
return "search";
}
@GetMapping("/suggestion")
public R suggestion(@RequestParam String keyWord){
return R.ok(searchService.suggestion(keyWord));
}
}

View File

@ -1,51 +0,0 @@
package com.ruoyi.mall.search.controller;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.mall.product.cache.ProductInfoCache;
import com.ruoyi.mall.product.domain.reponse.ProductDetailsResponse;
import com.ruoyi.mall.search.es.config.EsConfig;
import com.ruoyi.mall.search.sync.ShopItemSync;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
/**
* @author DongZl
* @description:
* @Date 2022-10-14 11:17
*/
@Controller
@RequestMapping("/test")
public class TestController {
@Autowired
private ShopItemSync sync;
@Autowired
private ProductInfoCache productInfoCache;
@GetMapping
@ResponseBody
private R test(){
sync.productSync();
return R.ok();
}
@GetMapping("/{id}")
@ResponseBody
private R get(@PathVariable Long id){
ProductDetailsResponse productDetailsResponse = productInfoCache.get(id);
return R.ok(productDetailsResponse);
}
@GetMapping("/refreshData/{id}")
@ResponseBody
private R refreshData(@PathVariable Long id){
return R.ok(productInfoCache.refreshData(id));
}
@GetMapping("/index")
public String index(Model model){
model.addAttribute("test","你好");
return "index";
}
}

View File

@ -1,37 +0,0 @@
package com.ruoyi.mall.search.es.config;
/**
* @author DongZl
* @description: Es
* @Date 2022-10-14 01:45
*/
public class EsAddressConfig {
private String host;
private int port;
public String getHost () {
return host;
}
public void setHost (String host) {
this.host = host;
}
public int getPort () {
return port;
}
public void setPort (int port) {
this.port = port;
}
@Override
public String toString () {
return "EsConfig{" +
"host='" + host + '\'' +
", port=" + port +
'}';
}
}

View File

@ -1,37 +0,0 @@
package com.ruoyi.mall.search.es.config;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
/**
* @author DongZl
* @description: es
* @Date 2022-10-14 11:15
*/
@ConfigurationProperties(
prefix = "es"
)
@Configuration
public class EsConfig implements Serializable {
private List<EsAddressConfig> addressList = null;
public List<EsAddressConfig> getAddressList () {
return addressList;
}
public void setAddressList (List<EsAddressConfig> addressList) {
this.addressList = addressList;
}
@Override
public String toString () {
return "EsConfig{" +
"addressList=" + addressList +
'}';
}
}

View File

@ -1,107 +0,0 @@
package com.ruoyi.mall.search.es.instance;
import com.ruoyi.common.core.exception.ServiceException;
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.mall.search.es.config.EsAddressConfig;
import com.ruoyi.mall.search.es.config.EsConfig;
import org.apache.http.HttpHost;
import org.elasticsearch.action.delete.DeleteRequest;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import java.util.List;
/**
* @author DongZl
* @description: Es
* @Date 2022-10-14 11:26
*/
@Component
public class EsInstance {
private static final Logger log = LoggerFactory.getLogger(EsInstance.class);
/**
* ES
*/
private RestHighLevelClient client = null;
private EsConfig esConfig;
public EsInstance (EsConfig esConfig) {
this.esConfig = esConfig;
}
@PostConstruct
public void init(){
long startTime = System.currentTimeMillis();
try {
log.info("Es初始开始");
List<EsAddressConfig> addressList = this.esConfig.getAddressList();
int hostSize = addressList.size();
HttpHost[] httpHosts = new HttpHost[hostSize];
for (int index = 0 ; index < hostSize ; index ++) {
EsAddressConfig esAddressConfig = addressList.get(index);
log.info("实例化Es客户端程序地址[{}],端口:[{}]",
esAddressConfig.getHost(),
esAddressConfig.getPort());
httpHosts[index] = new HttpHost(esAddressConfig.getHost(),
esAddressConfig.getPort(),
"http");
}
client = new RestHighLevelClient(
RestClient.builder(httpHosts));
log.info("Es初始化成功 耗时:[{}MS]", System.currentTimeMillis() - startTime);
}catch (Exception e){
log.error("Es初始化失败", e);
// 阻止程序启动
throw e;
}
}
public RestHighLevelClient getClient () {
return client;
}
/**
*
* @param index
* @return
*/
public IndexRequest indexRequestBuilder(String index){
if (StringUtils.isEmpty(index)){
throw new ServiceException("Es 索引不可以为空");
}
return new IndexRequest(index);
}
/**
*
* @param index
* @return
*/
public DeleteRequest DeleteRequestBuilder(String index){
if (StringUtils.isEmpty(index)){
throw new ServiceException("Es 索引不可以为空");
}
return new DeleteRequest(index);
}
/**
*
* @param index
* @return
*/
public SearchRequest SearchRequestBuilder(String index){
if (StringUtils.isEmpty(index)){
throw new ServiceException("Es 索引不可以为空");
}
return new SearchRequest(index);
}
}

View File

@ -1,158 +0,0 @@
package com.ruoyi.mall.search.es.service;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.alibaba.fastjson2.JSONObject;
import com.ruoyi.common.core.exception.ServiceException;
import com.ruoyi.common.core.utils.reflect.ReflectUtils;
import com.ruoyi.mall.product.domain.reponse.ProductInfoResponse;
import com.ruoyi.mall.search.es.instance.EsInstance;
import org.elasticsearch.action.DocWriteResponse;
import org.elasticsearch.action.bulk.BulkItemResponse;
import org.elasticsearch.action.bulk.BulkRequest;
import org.elasticsearch.action.bulk.BulkResponse;
import org.elasticsearch.action.delete.DeleteRequest;
import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.update.UpdateResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.rest.RestStatus;
import org.elasticsearch.xcontent.XContentType;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import java.io.IOException;
import java.util.List;
/**
* @author DongZl
* @description: Es
* @Date 2022-10-14 02:09
*/
@Service
public class EsDataService {
private static final Logger log = LoggerFactory.getLogger(EsDataService.class);
private final EsInstance clientInstance;
public EsDataService (EsInstance clientInstance) {
this.clientInstance = clientInstance;
}
/**
*
* 1
* 2
* 3
* 4
*/
/**
*
* @param index
* @param dataJson json
* @return
*/
public boolean insertOrUpdate(String index , ProductInfoResponse dataJson){
JSONObject jsonObject = JSONObject.parseObject(JSONObject.toJSONString(dataJson));
jsonObject.put("createTime", dataJson.getCreateTime().getTime());
IndexRequest indexRequest = clientInstance.indexRequestBuilder(index).source(
jsonObject.toJSONString(),
XContentType.JSON
);
try {
IndexResponse indexResponse = clientInstance.getClient().index(
indexRequest, RequestOptions.DEFAULT
);
RestStatus status = indexResponse.status();
if (status.getStatus() == RestStatus.OK.getStatus()){
return true;
}
} catch (IOException e) {
log.info("索引数据添加异常:[{},{}]",index,dataJson);
throw new ServiceException(e.getMessage());
}
return false;
}
/**
*
* @param index
* @param dataList
* @return
*/
public boolean bulkInsertOrUpdate(String index , List<?> dataList){
BulkRequest bulkRequest = new BulkRequest();
dataList.forEach( data -> bulkRequest.add(
clientInstance.indexRequestBuilder(index).source(
JSONObject.toJSONString(data),
XContentType.JSON
).id(ReflectUtils.invokeGetter(data,"id").toString())
));
try {
BulkResponse bulkItemResponses =
clientInstance.getClient().bulk(bulkRequest, RequestOptions.DEFAULT);
BulkItemResponse[] bulkResponse = bulkItemResponses.getItems();
for (BulkItemResponse bulkItemResponse : bulkResponse) {
DocWriteResponse itemResponse = bulkItemResponse.getResponse();
switch (bulkItemResponse.getOpType()) {
case INDEX:
case CREATE:
IndexResponse indexResponse = (IndexResponse) itemResponse;
RestStatus createStatus = indexResponse.status();
if (createStatus.getStatus() != RestStatus.CREATED.getStatus()
&& createStatus.getStatus() != RestStatus.OK.getStatus() ){
log.error("请求失败: 索引:[{}] , itemId:[{}]",
bulkItemResponse.getIndex(),
bulkItemResponse.getItemId());
}
break;
case UPDATE:
UpdateResponse updateResponse = (UpdateResponse) itemResponse;
RestStatus updateStatus = updateResponse.status();
if (updateStatus.getStatus() != RestStatus.OK.getStatus()){
log.error("请求失败: 索引:[{}] , itemId:[{}]",
bulkItemResponse.getIndex(),
bulkItemResponse.getItemId());
}
break;
case DELETE:
DeleteResponse deleteResponse = (DeleteResponse) itemResponse;
RestStatus deleteStatus = deleteResponse.status();
if (deleteStatus.getStatus() != RestStatus.OK.getStatus()){
log.error("请求失败: 索引:[{}] , itemId:[{}]",
bulkItemResponse.getIndex(),
bulkItemResponse.getItemId());
}
}
}
} catch (IOException e) {
log.info("批量请求异常", e);
throw new ServiceException(e.getMessage());
}
return true;
}
/**
*
* @param index
* @param docId
* @return
*/
public boolean deleteByDocId(String index, String docId){
DeleteRequest deleteRequest = clientInstance.DeleteRequestBuilder(index).id(docId);
try {
DeleteResponse deleteResponse = clientInstance.getClient().delete(deleteRequest, RequestOptions.DEFAULT);
RestStatus status = deleteResponse.status();
if (status.getStatus() == RestStatus.OK.getStatus()){
return true;
}
} catch (IOException e) {
log.error("文档删除出现异常 索引:[{}],文档:[{}]", index , docId, e);
throw new ServiceException(e.getMessage());
}
return false;
}
}

View File

@ -1,16 +0,0 @@
package com.ruoyi.mall.search.es.service;
import org.springframework.stereotype.Service;
/**
* @author DongZl
* @description:
* @Date 2022-10-14 02:08
*/
@Service
public class EsIndexService {
/**
*
*/
}

View File

@ -1,24 +0,0 @@
package com.ruoyi.mall.search.rabbit;
import com.ruoyi.common.rabbit.enums.QueueEnum;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import static com.ruoyi.common.rabbit.enums.QueueEnum.TEST;
/**
* @author DongZl
* @description:
* @Date 2022-10-21 01:42
*/
@Configuration
public class QueueConfig {
@Bean
public Queue myQueue() {
return new Queue(TEST.queueName(), true);
}
@Bean
public Queue productAddQueue() {
return new Queue(QueueEnum.PRODUCT_ADD.queueName(), true);
}
}

View File

@ -1,39 +0,0 @@
package com.ruoyi.mall.search.rabbit;
import com.ruoyi.common.rabbit.constant.QueueConstant;
import com.ruoyi.common.rabbit.domain.Message;
import com.ruoyi.common.rabbit.enums.QueueEnum;
import com.ruoyi.mall.search.service.SearchService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* @author DongZl
* @description: rabbit
* @Date 2022-10-21 02:48
*/
@Component
public class RabbitProductMsg {
/**
*
*/
private final static Logger log = LoggerFactory.getLogger(RabbitProductMsg.class);
@Autowired
private SearchService searchService;
/**
*
* @param message
*/
@RabbitListener( queues = QueueConstant.PRODUCT_ADD)
public void productAdd(Message<Long> message){
log.info("消息队列:[{}],接受到消息:[{}]", QueueEnum.PRODUCT_ADD.queueStr(),
message);
searchService.syncProductInfo(message.getBody());
}
}

View File

@ -1,33 +0,0 @@
package com.ruoyi.mall.search.rabbit;
import com.alibaba.fastjson2.JSONObject;
import com.ruoyi.common.rabbit.constant.QueueConstant;
import com.ruoyi.common.rabbit.domain.Message;
import com.ruoyi.mall.product.domain.reponse.ProductInfoResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.context.annotation.Configuration;
/**
* @author DongZl
* @description: rabbit
* @Date 2022-10-21 01:56
*/
@Configuration
public class RabbitTest {
/**
*
*/
private static final Logger log = LoggerFactory.getLogger(RabbitTest.class);
/**
*
* @param msg
*/
@RabbitListener(queues = QueueConstant.TEST_NAME)
public void listen(Message<ProductInfoResponse> msg) {
log.info(JSONObject.toJSONString(msg));
}
}

View File

@ -1,22 +0,0 @@
package com.ruoyi.mall.search.service;
import com.ruoyi.mall.search.domain.request.SearchReq;
/**
* @author DongZl
* @description:
* @Date 2022-10-21 02:52
*/
public interface SearchService {
/**
* ID
* @param productId
*/
public void syncProductInfo(Long productId);
void search (SearchReq searchReq);
Object suggestion(String keyWord);
}

View File

@ -1,138 +0,0 @@
package com.ruoyi.mall.search.service.impl;
import com.alibaba.fastjson2.JSONObject;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.exception.ServiceException;
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.mall.product.domain.reponse.ProductInfoResponse;
import com.ruoyi.mall.product.remote.RemoteProductInfo;
import com.ruoyi.mall.search.domain.request.SearchReq;
import com.ruoyi.mall.search.es.instance.EsInstance;
import com.ruoyi.mall.search.es.service.EsDataService;
import com.ruoyi.mall.search.service.SearchService;
import com.ruoyi.mall.search.utils.SearchResultUtils;
import org.apache.lucene.search.TotalHits;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.common.text.Text;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.MatchQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightField;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* @author DongZl
* @description:
* @Date 2022-10-21 02:53
*/
@Service
public class SearchServiceImpl implements SearchService {
private static final Logger log = LoggerFactory.getLogger(SearchServiceImpl.class);
@Autowired
private RemoteProductInfo remoteProductInfo;
@Autowired
private EsDataService esDataService;
@Autowired
private EsInstance esInstance;
@Override
public void syncProductInfo (Long productId) {
R<ProductInfoResponse> resultInfo = remoteProductInfo.getResultInfo(productId);
esDataService.insertOrUpdate("shop_item", resultInfo.getData());
log.info("商品:[{}]同步完成", productId);
}
/**
*
*
* @param searchReq
*/
@Override
public void search (SearchReq searchReq) {
if (StringUtils.isEmpty(searchReq.getKeyWord())){
throw new ServiceException("搜索参数不可以为空");
}
SearchRequest searchRequest = esInstance.SearchRequestBuilder("shop_item");
SearchSourceBuilder searchSourceBuilder = SearchSourceBuilder.searchSource();
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
// 商品名称搜索
MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchQuery(
"name", searchReq.getKeyWord()
);
boolQueryBuilder.must(matchQueryBuilder);
// 分页
searchSourceBuilder.from((searchReq.getPageNum() - 1) * searchReq.getPageSize());
searchSourceBuilder.size(searchReq.getPageSize());
searchSourceBuilder.query(boolQueryBuilder);
HighlightBuilder highlightBuilder = new HighlightBuilder();
highlightBuilder.field("name");
highlightBuilder.preTags("<span style='color:red'>");
highlightBuilder.postTags("</span>");
searchSourceBuilder.highlighter(highlightBuilder);
searchRequest.source(searchSourceBuilder);
try {
SearchResponse searchResponse = esInstance.getClient().search(searchRequest, RequestOptions.DEFAULT);
SearchHits searchResponseHits = searchResponse.getHits();
TotalHits totalHits = searchResponseHits.getTotalHits();
// 若未查询到数量结果,直接进行返回
if (totalHits.value != 0){
SearchResultUtils.setTotal(totalHits.value);
}
List<ProductInfoResponse> productInfoResponseList = new ArrayList<>();
SearchHit[] searchHits = searchResponseHits.getHits();
for (SearchHit searchHit : searchHits) {
// 源数据
String sourceAsString = searchHit.getSourceAsString();
ProductInfoResponse productInfoResponse =
JSONObject.parseObject(sourceAsString, ProductInfoResponse.class);
// 高亮
Map<String, HighlightField> highlightFields =
searchHit.getHighlightFields();
if (highlightFields != null){
HighlightField highlightField = highlightFields.get("name");
if (highlightField != null){
// 拼装
Text[] fragments = highlightField.getFragments();
StringBuilder sb = new StringBuilder();
for (Text fragment : fragments) {
sb.append(fragment);
}
productInfoResponse.setName(sb.toString());
}
}
productInfoResponseList.add(productInfoResponse);
}
SearchResultUtils.setList(productInfoResponseList);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
@Override
public Object suggestion(String keyWord) {
return null;
}
}

View File

@ -1,69 +0,0 @@
package com.ruoyi.mall.search.sync;
import com.alibaba.fastjson2.JSONObject;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.exception.ServiceException;
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.common.core.web.page.TableDataInfo;
import com.ruoyi.mall.product.domain.MallProductInfo;
import com.ruoyi.mall.product.remote.RemoteProductInfo;
import com.ruoyi.mall.search.domain.ProductSearch;
import com.ruoyi.mall.search.es.service.EsDataService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
/**
* @author DongZl
* @description:
* @Date 2022-10-15 08:32
*/
@Component
public class ShopItemSync {
private static final Logger log = LoggerFactory.getLogger(ShopItemSync.class);
private static int syncSize = 10;
@Autowired
private RemoteProductInfo remoteProductInfo;
@Autowired
private EsDataService esDataService;
/**
*
*/
public void productSync(){
long startTime = System.currentTimeMillis();
log.info("商品搜索同步开始");
// 获取商品总条数
R<Long> resultCount = remoteProductInfo.count("内部请求",new MallProductInfo());
log.info("远程调用商品总数结果:{}", JSONObject.toJSONString(resultCount));
if (resultCount.isError()){
log.error("查询商品总数失败,错误信息:{}",resultCount.getMsg());
throw new ServiceException(StringUtils.format("查询商品总数失败,错误信息:{}",resultCount.getMsg()));
}
Long productCount = resultCount.getData();
// 计算分页条数
int productPage = (int) ((productCount / syncSize) + (productCount % syncSize == 0 ? 0 : 1));
log.info("商品分段调用,分段条数:[{}]", productPage);
for (int productIndex = 0 ; productIndex < productPage ; productIndex++) {
log.info("第{}段同步开始", productIndex + 1);
MallProductInfo mallProductInfo = new MallProductInfo();
TableDataInfo tableDataInfo = remoteProductInfo.syncList(syncSize, productIndex + 1, mallProductInfo);
List<ProductSearch> productSearchList = new ArrayList<>();
List<?> rows = tableDataInfo.getRows();
for (Object row : rows) {
productSearchList.add(JSONObject.parseObject(JSONObject.toJSONString(row), ProductSearch.class));
}
esDataService.bulkInsertOrUpdate("shop_item",productSearchList);
log.info("第{}段同步结束", productIndex + 1);
}
log.info("商品同步完成,耗时:[{}MS]", System.currentTimeMillis() - startTime);
}
}

View File

@ -6,13 +6,6 @@ import lombok.Data;
import java.util.Date;
/**
* @Authorsheyudie
* @Packagecom.bawei.mall.user.domain
* @Projectmall_cloud
* @nameCusUser
* @Date2024/6/27 15:31
*/
@ApiModel(description = "C端用户表")
@Data
public class CusUser {

View File

@ -4,7 +4,7 @@ import com.ruoyi.mall.user.domain.CusUser;
/**
* @Authorsheyudie
* @Packagecom.bawei.mall.user.service
* @Packagecom.ruoyi.mall.user.service
* @Projectmall_cloud
* @nameUserService
* @Date2024/6/27 15:28

View File

@ -9,7 +9,7 @@ import org.springframework.stereotype.Service;
/**
* @Authorsheyudie
* @Packagecom.bawei.mall.user.service.impl
* @Packagecom.ruoyi.mall.user.service.impl
* @Projectmall_cloud
* @nameUserServiceImpl
* @Date2024/6/27 15:28