diff --git a/ysy-auth/src/main/java/com/ysy/auth/controller/AuthController.java b/ysy-auth/src/main/java/com/ysy/auth/controller/AuthController.java index f957e48..ac9f17f 100644 --- a/ysy-auth/src/main/java/com/ysy/auth/controller/AuthController.java +++ b/ysy-auth/src/main/java/com/ysy/auth/controller/AuthController.java @@ -1,6 +1,11 @@ package com.ysy.auth.controller; import com.ysy.auth.service.AuthService; +import com.ysy.common.domain.result.Result; +import com.ysy.common.domain.vo.UserVO; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -12,4 +17,10 @@ public class AuthController { public AuthController(AuthService authService) { this.authService = authService; } + + @PostMapping("/login") + public Result login(@RequestBody @Validated UserVO userVO) { + String token = authService.loginByUserVO(userVO); + return Result.success("登录成功", token); + } } diff --git a/ysy-auth/src/main/java/com/ysy/auth/service/AuthService.java b/ysy-auth/src/main/java/com/ysy/auth/service/AuthService.java index 87e0832..5081145 100644 --- a/ysy-auth/src/main/java/com/ysy/auth/service/AuthService.java +++ b/ysy-auth/src/main/java/com/ysy/auth/service/AuthService.java @@ -1,4 +1,7 @@ package com.ysy.auth.service; +import com.ysy.common.domain.vo.UserVO; + public interface AuthService { + String loginByUserVO(UserVO userVO); } diff --git a/ysy-auth/src/main/java/com/ysy/auth/service/impl/AuthServiceImpl.java b/ysy-auth/src/main/java/com/ysy/auth/service/impl/AuthServiceImpl.java index 3f208fc..f35bb98 100644 --- a/ysy-auth/src/main/java/com/ysy/auth/service/impl/AuthServiceImpl.java +++ b/ysy-auth/src/main/java/com/ysy/auth/service/impl/AuthServiceImpl.java @@ -1,8 +1,37 @@ package com.ysy.auth.service.impl; +import cn.hutool.core.bean.BeanUtil; +import com.alibaba.fastjson2.JSON; import com.ysy.auth.service.AuthService; +import com.ysy.common.domain.po.User; +import com.ysy.common.domain.vo.UserVO; +import com.ysy.common.remote.SystemServiceClient; +import com.ysy.common.utils.jwt.JwtUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.stereotype.Service; +import org.springframework.util.Assert; + +import java.util.HashMap; +import java.util.concurrent.TimeUnit; @Service public class AuthServiceImpl implements AuthService { + @Autowired + private SystemServiceClient systemServiceClient; + + @Autowired + private StringRedisTemplate stringRedisTemplate; + + @Override + public String loginByUserVO(UserVO userVO) { + User user = systemServiceClient.getByPhone(userVO.getPhone()).getData(); + Assert.notNull(user, "该账户不存在"); + boolean equals = user.getPassword().equals(userVO.getPassword()); + Assert.isTrue(equals, "密码错误"); + + String token = JwtUtil.createToken(BeanUtil.beanToMap(user, new HashMap<>(), false, false)); + stringRedisTemplate.opsForValue().set(user.getUserId().toString(), JSON.toJSONString(user), 20, TimeUnit.MINUTES); + return token; + } } diff --git a/ysy-common/src/main/java/com/ysy/common/domain/dto/GoodDTO.java b/ysy-common/src/main/java/com/ysy/common/domain/dto/GoodDTO.java new file mode 100644 index 0000000..c019362 --- /dev/null +++ b/ysy-common/src/main/java/com/ysy/common/domain/dto/GoodDTO.java @@ -0,0 +1,19 @@ +package com.ysy.common.domain.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class GoodDTO { + private String goodNum; + private String goodName; + private String brand; + private String info; + private Integer price; + private Boolean isSecured; +} diff --git a/ysy-common/src/main/java/com/ysy/common/domain/po/Cart.java b/ysy-common/src/main/java/com/ysy/common/domain/po/Cart.java new file mode 100644 index 0000000..63b72e3 --- /dev/null +++ b/ysy-common/src/main/java/com/ysy/common/domain/po/Cart.java @@ -0,0 +1,31 @@ +package com.ysy.common.domain.po; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +@TableName("tb_cart") +public class Cart { + @TableId(value = "cart_id", type = IdType.AUTO) + private Long cartId; + @TableField("good_id") + private Long goodId; + @TableField("number") + private Integer number; + @TableField("is_deleted") + private Boolean isDeleted; + @TableField("user_id") + private Long userId; + + @TableField(exist = false) + private Good good; +} diff --git a/ysy-common/src/main/java/com/ysy/common/domain/po/Good.java b/ysy-common/src/main/java/com/ysy/common/domain/po/Good.java new file mode 100644 index 0000000..2d1588c --- /dev/null +++ b/ysy-common/src/main/java/com/ysy/common/domain/po/Good.java @@ -0,0 +1,30 @@ +package com.ysy.common.domain.po; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +@TableName("tb_good") +public class Good { + @TableId(value = "good_id", type = IdType.AUTO) + private Long goodId; + @TableField("good_num") + private String goodNum; + @TableField("good_name") + private String goodName; + private String brand; + private String info; + private Integer price; + @TableField("is_secured") + private Boolean isSecured; + +} diff --git a/ysy-common/src/main/java/com/ysy/common/domain/po/Order.java b/ysy-common/src/main/java/com/ysy/common/domain/po/Order.java new file mode 100644 index 0000000..3394c2a --- /dev/null +++ b/ysy-common/src/main/java/com/ysy/common/domain/po/Order.java @@ -0,0 +1,32 @@ +package com.ysy.common.domain.po; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Date; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +@TableName("tb_order") +public class Order { + @TableId(value = "order_id", type = IdType.AUTO) + private Long orderId; + @TableField("order_num") + private String orderNum; + @TableField("cart_id") + private Long cartId; + @TableField("buy_time") + private Date buyTime; + @TableField("refund_time") + private Date refundTime; + @TableField("isRefund") + private Boolean is_refund; +} diff --git a/ysy-common/src/main/java/com/ysy/common/domain/po/User.java b/ysy-common/src/main/java/com/ysy/common/domain/po/User.java new file mode 100644 index 0000000..4128787 --- /dev/null +++ b/ysy-common/src/main/java/com/ysy/common/domain/po/User.java @@ -0,0 +1,22 @@ +package com.ysy.common.domain.po; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +@TableName("tb_user") +public class User { + @TableId(value = "user_id", type = IdType.AUTO) + private Long userId; + private String username; + private String phone; + private String password; +} diff --git a/ysy-common/src/main/java/com/ysy/common/domain/vo/GoodVO.java b/ysy-common/src/main/java/com/ysy/common/domain/vo/GoodVO.java new file mode 100644 index 0000000..40dc795 --- /dev/null +++ b/ysy-common/src/main/java/com/ysy/common/domain/vo/GoodVO.java @@ -0,0 +1,16 @@ +package com.ysy.common.domain.vo; + +import jakarta.validation.constraints.NotBlank; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class GoodVO { + private String goodName; + private String brand; +} diff --git a/ysy-common/src/main/java/com/ysy/common/domain/vo/UserVO.java b/ysy-common/src/main/java/com/ysy/common/domain/vo/UserVO.java new file mode 100644 index 0000000..fb32b0e --- /dev/null +++ b/ysy-common/src/main/java/com/ysy/common/domain/vo/UserVO.java @@ -0,0 +1,21 @@ +package com.ysy.common.domain.vo; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import jakarta.validation.constraints.NotBlank; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class UserVO { + @NotBlank(message = "手机号不能为空") + private String phone; + @NotBlank(message = "密码不能为空") + private String password; +} diff --git a/ysy-common/src/main/java/com/ysy/common/exception/GlobalExceptionHandler.java b/ysy-common/src/main/java/com/ysy/common/exception/GlobalExceptionHandler.java index 40aa988..caa2133 100644 --- a/ysy-common/src/main/java/com/ysy/common/exception/GlobalExceptionHandler.java +++ b/ysy-common/src/main/java/com/ysy/common/exception/GlobalExceptionHandler.java @@ -16,6 +16,7 @@ public class GlobalExceptionHandler { public Result illegalArgumentExceptionHandler(IllegalArgumentException e) { log.error("服务端报错:[{}]", e.getMessage(), e.getLocalizedMessage(), e); return Result.fail( + e.getMessage() // JSON.toJSONString() ); } @@ -23,6 +24,6 @@ public class GlobalExceptionHandler { @ExceptionHandler(MethodArgumentNotValidException.class) public Result methodArgumentNotValidExceptionHandler(MethodArgumentNotValidException e) { log.error("服务端报错:[{}]", e.getMessage(), e.getLocalizedMessage(), e); - return Result.fail(JSON.toJSONString(e.getBindingResult())); + return Result.fail(e.getMessage()); } } diff --git a/ysy-common/src/main/java/com/ysy/common/remote/GoodServiceClient.java b/ysy-common/src/main/java/com/ysy/common/remote/GoodServiceClient.java new file mode 100644 index 0000000..0fbdff3 --- /dev/null +++ b/ysy-common/src/main/java/com/ysy/common/remote/GoodServiceClient.java @@ -0,0 +1,14 @@ +package com.ysy.common.remote; + +import com.ysy.common.domain.po.Good; +import com.ysy.common.domain.po.User; +import com.ysy.common.domain.result.Result; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; + +@FeignClient(value = "goodService", path = "good") +public interface GoodServiceClient { + @GetMapping("/get/{id}") + public Result getById(@PathVariable String id); +} diff --git a/ysy-common/src/main/java/com/ysy/common/remote/SystemServiceClient.java b/ysy-common/src/main/java/com/ysy/common/remote/SystemServiceClient.java new file mode 100644 index 0000000..7b8e8b0 --- /dev/null +++ b/ysy-common/src/main/java/com/ysy/common/remote/SystemServiceClient.java @@ -0,0 +1,13 @@ +package com.ysy.common.remote; + +import com.ysy.common.domain.po.User; +import com.ysy.common.domain.result.Result; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; + +@FeignClient(value = "systemService", path = "user") +public interface SystemServiceClient { + @GetMapping("/get/{phone}") + public Result getByPhone(@PathVariable String phone); +} diff --git a/ysy-gateway/src/main/java/com/ysy/gateway/filter/GlobalAuthFilter.java b/ysy-gateway/src/main/java/com/ysy/gateway/filter/GlobalAuthFilter.java new file mode 100644 index 0000000..d12e4c8 --- /dev/null +++ b/ysy-gateway/src/main/java/com/ysy/gateway/filter/GlobalAuthFilter.java @@ -0,0 +1,73 @@ +package com.ysy.gateway.filter; + +import com.auth0.jwt.interfaces.Claim; +import com.ysy.common.utils.gateway.GatewayUtils; +import com.ysy.common.utils.jwt.JwtUtil; +import com.ysy.common.utils.tools.StringUtils; +import com.ysy.gateway.white.AuthProperties; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cloud.gateway.filter.GatewayFilterChain; +import org.springframework.cloud.gateway.filter.GlobalFilter; +import org.springframework.core.annotation.Order; +import org.springframework.data.redis.core.StringRedisTemplate; +import org.springframework.http.HttpMethod; +import org.springframework.http.server.reactive.ServerHttpRequest; +import org.springframework.stereotype.Component; +import org.springframework.web.server.ServerWebExchange; +import reactor.core.publisher.Mono; + +import java.util.Map; + +@Component +@Order(1) +@Slf4j +public class GlobalAuthFilter implements GlobalFilter { + @Autowired + private AuthProperties authProperties; + + @Autowired + private StringRedisTemplate stringRedisTemplate; + + @Override + public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) { + ServerHttpRequest request = exchange.getRequest(); + String path = request.getPath().toString(); + HttpMethod method = request.getMethod(); + + log.info("请求方式:{},请求路径:{}", method, path); + + boolean matches = StringUtils.matches(path, authProperties.getExcludePaths()); + + if (matches) { + log.info("请求白名单:{}", request.getPath()); + return chain.filter(exchange); + } + + String token = request.getHeaders().get("token").get(0); + Claim claim = null; + try { + claim = JwtUtil.getClaim(token); + } catch (Exception e) { + return GatewayUtils.errorResponse(exchange, "令牌异常,请重新登录"); + } + + Map map = claim.asMap(); + Integer userId = (Integer) map.get("userId"); + Object username = map.get("username"); + Object phone = map.get("phone"); + + if (Boolean.FALSE.equals(stringRedisTemplate.hasKey(String.valueOf(userId)))) { + return GatewayUtils.errorResponse(exchange, "令牌已过期,请重新登录"); + } + + ServerHttpRequest.Builder mutate = request.mutate(); + GatewayUtils.removeHeader(mutate, "token"); + + GatewayUtils.addHeader(mutate, "userId", userId); + GatewayUtils.addHeader(mutate, "username", username); + GatewayUtils.addHeader(mutate, "phone", phone); + + return chain.filter(exchange); + } +} diff --git a/ysy-modules/pom.xml b/ysy-modules/pom.xml index d6a17dd..a903b0a 100644 --- a/ysy-modules/pom.xml +++ b/ysy-modules/pom.xml @@ -10,6 +10,11 @@ ysy-modules + pom + + ysy-good + ysy-order + 17 diff --git a/ysy-modules/ysy-good/pom.xml b/ysy-modules/ysy-good/pom.xml new file mode 100644 index 0000000..dc5de0f --- /dev/null +++ b/ysy-modules/ysy-good/pom.xml @@ -0,0 +1,41 @@ + + + 4.0.0 + + com.ysy + ysy-modules + 3.0.2 + + + ysy-good + + + 17 + 17 + UTF-8 + + + + + + com.ysy + ysy-common + + + + + org.projectlombok + lombok + true + + + + + org.springframework.boot + spring-boot-starter-test + test + + + \ No newline at end of file diff --git a/ysy-modules/ysy-good/src/main/java/com/ysy/good/GoodApplication.java b/ysy-modules/ysy-good/src/main/java/com/ysy/good/GoodApplication.java new file mode 100644 index 0000000..6e12e4a --- /dev/null +++ b/ysy-modules/ysy-good/src/main/java/com/ysy/good/GoodApplication.java @@ -0,0 +1,44 @@ +package com.ysy.good; + +import co.elastic.clients.elasticsearch.ElasticsearchClient; +import co.elastic.clients.elasticsearch.core.BulkRequest; +import co.elastic.clients.elasticsearch.core.bulk.BulkOperation; +import com.ysy.common.domain.po.Good; +import com.ysy.good.mapper.GoodMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.ApplicationArguments; +import org.springframework.boot.ApplicationRunner; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +import java.util.ArrayList; +import java.util.List; + +@SpringBootApplication +public class GoodApplication implements ApplicationRunner { + public static void main(String[] args) { + SpringApplication.run(GoodApplication.class); + } + + @Autowired + private ElasticsearchClient elasticsearchClient; + + @Autowired + private GoodMapper goodMapper; + + @Override + public void run(ApplicationArguments args) throws Exception { + List goodList = goodMapper.selectList(null); + List bulkOperations = new ArrayList<>(); + + goodList.forEach(good -> bulkOperations.add(BulkOperation.of(builder -> builder + .create(c -> c + .id(String.valueOf(good.getGoodId())) + .document(good) + ))) + ); + + BulkRequest bulkRequest = new BulkRequest.Builder().operations(bulkOperations).index("good_index").build(); + elasticsearchClient.bulk(bulkRequest); + } +} \ No newline at end of file diff --git a/ysy-modules/ysy-good/src/main/java/com/ysy/good/controller/GoodController.java b/ysy-modules/ysy-good/src/main/java/com/ysy/good/controller/GoodController.java new file mode 100644 index 0000000..091a798 --- /dev/null +++ b/ysy-modules/ysy-good/src/main/java/com/ysy/good/controller/GoodController.java @@ -0,0 +1,56 @@ +package com.ysy.good.controller; + +import cn.hutool.core.bean.BeanUtil; +import co.elastic.clients.elasticsearch.ElasticsearchClient; +import co.elastic.clients.elasticsearch.core.CreateResponse; +import com.ysy.common.domain.dto.GoodDTO; +import com.ysy.common.domain.po.Good; +import com.ysy.common.domain.result.Result; +import com.ysy.common.domain.vo.GoodVO; +import com.ysy.good.service.GoodService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.List; +import java.util.UUID; + +@RestController +@RequestMapping("/good") +@Slf4j +public class GoodController { + @Autowired + private GoodService goodService; + + @Autowired + private ElasticsearchClient elasticsearchClient; + + @PostMapping("/list") + public Result> list(@RequestBody GoodVO goodVO) { + List goodList = goodService.getListByGoodVO(goodVO); + return Result.success(goodList); + } + + @PostMapping("/add") + public Result add(@RequestBody GoodDTO goodDTO) { + Good good = new Good(); + goodDTO.setGoodNum(new UUID(32, 16).toString()); + BeanUtil.copyProperties(goodDTO, good); + goodService.save(good); + CreateResponse createResponse = null; + try { + createResponse = elasticsearchClient.create(c -> c.id(String.valueOf(good.getGoodId())).document(good).index("good_index")); + } catch (IOException e) { + log.info("添加es出现错误:{}", createResponse.result()); + } + + return Result.success("添加商品成功"); + } + + @GetMapping("/get/{id}") + public Result getById(@PathVariable String id) { + Good good = goodService.getById(id); + return Result.success(good); + } +} diff --git a/ysy-modules/ysy-good/src/main/java/com/ysy/good/mapper/GoodMapper.java b/ysy-modules/ysy-good/src/main/java/com/ysy/good/mapper/GoodMapper.java new file mode 100644 index 0000000..09cbd9e --- /dev/null +++ b/ysy-modules/ysy-good/src/main/java/com/ysy/good/mapper/GoodMapper.java @@ -0,0 +1,9 @@ +package com.ysy.good.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ysy.common.domain.po.Good; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface GoodMapper extends BaseMapper { +} diff --git a/ysy-modules/ysy-good/src/main/java/com/ysy/good/service/GoodService.java b/ysy-modules/ysy-good/src/main/java/com/ysy/good/service/GoodService.java new file mode 100644 index 0000000..34e4467 --- /dev/null +++ b/ysy-modules/ysy-good/src/main/java/com/ysy/good/service/GoodService.java @@ -0,0 +1,11 @@ +package com.ysy.good.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.ysy.common.domain.po.Good; +import com.ysy.common.domain.vo.GoodVO; + +import java.util.List; + +public interface GoodService extends IService { + List getListByGoodVO(GoodVO goodVO); +} diff --git a/ysy-modules/ysy-good/src/main/java/com/ysy/good/service/impl/GoodServiceImpl.java b/ysy-modules/ysy-good/src/main/java/com/ysy/good/service/impl/GoodServiceImpl.java new file mode 100644 index 0000000..ee9f7bb --- /dev/null +++ b/ysy-modules/ysy-good/src/main/java/com/ysy/good/service/impl/GoodServiceImpl.java @@ -0,0 +1,71 @@ +package com.ysy.good.service.impl; + +import co.elastic.clients.elasticsearch.ElasticsearchClient; +import co.elastic.clients.elasticsearch._types.query_dsl.Query; +import co.elastic.clients.elasticsearch.core.SearchRequest; +import co.elastic.clients.elasticsearch.core.SearchResponse; +import co.elastic.clients.elasticsearch.core.search.HighlightField; +import co.elastic.clients.elasticsearch.core.search.Hit; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ysy.common.domain.po.Good; +import com.ysy.common.domain.vo.GoodVO; +import com.ysy.good.mapper.GoodMapper; +import com.ysy.good.service.GoodService; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +@Service +@Slf4j +public class GoodServiceImpl extends ServiceImpl + implements GoodService { + @Autowired + private ElasticsearchClient elasticsearchClient; + + @Override + public List getListByGoodVO(GoodVO goodVO) { + SearchRequest.Builder searchRequestBuilder = new SearchRequest.Builder().index("good_index"); + Query.Builder queryBuilder = new Query.Builder(); + List queryList = new ArrayList<>(); + + if (StringUtils.isNotBlank(goodVO.getGoodName())) { + Query query = new Query.Builder().match(m -> m.field("goodName").query(goodVO.getGoodName())).build(); + queryList.add(query); + } + + if (StringUtils.isNotBlank(goodVO.getBrand())) { + Query query = new Query.Builder().term(t -> t.field("brand").value(goodVO.getBrand())).build(); + queryList.add(query); + } + + Query query = queryBuilder.bool(builder -> builder.must(queryList)).build(); + SearchRequest searchRequest = searchRequestBuilder.query(query) + .highlight(h -> h.fields("goodName", HighlightField.of(f -> f.matchedFields("goodName"))).preTags("").postTags("")) + .build(); + + SearchResponse search = null; + try { + search = elasticsearchClient.search(searchRequest, Good.class); + } catch (IOException e) { + throw new RuntimeException(e); + } + + List goodList = new ArrayList<>(); + for (Hit hit : search.hits().hits()) { + Good source = hit.source(); + if (!hit.highlight().isEmpty()) { + String highlight = hit.highlight().get("goodName").get(0); + source.setGoodName(highlight); + } + goodList.add(source); + } + + log.info("商品列表:" + goodList); + return goodList; + } +} diff --git a/ysy-modules/ysy-good/src/main/resources/banner.txt b/ysy-modules/ysy-good/src/main/resources/banner.txt new file mode 100644 index 0000000..9a830ab --- /dev/null +++ b/ysy-modules/ysy-good/src/main/resources/banner.txt @@ -0,0 +1,9 @@ + ██ ██ ████████ ██ ██ +░░██ ██ ██░░░░░░ ░░██ ██ + ░░████ ░██ ░░████ + ░░██ ░█████████ ░░██ + ░██ ░░░░░░░░██ ░██ + ░██ ░██ ░██ + ░██ ████████ ░██ + ░░ ░░░░░░░░ ░░ +:: ysy boot :: version 1.0 \ No newline at end of file diff --git a/ysy-modules/ysy-good/src/main/resources/bootstrap.yml b/ysy-modules/ysy-good/src/main/resources/bootstrap.yml new file mode 100644 index 0000000..fd2e3d8 --- /dev/null +++ b/ysy-modules/ysy-good/src/main/resources/bootstrap.yml @@ -0,0 +1,39 @@ +server: + #服务端口 + port: 10003 + +spring: + application: + #服务名称 + name: goodService + profiles: + #配置文件生效环境 + active: dev + + cloud: + nacos: + #nacos服务器地址 + server-addr: http://124.70.132.13:8848 + #nacos服务发现配置 + discovery: + #nacos服务注册命名空间ID,默认为public + namespace: 2e6a4975-46b3-4035-b77d-92b05ae48a66 + #cluster-name: SH #服务集群设置 + config: + #指定读取命名空间配置,默认为public + namespace: ${spring.cloud.nacos.discovery.namespace} + #nacos配置文件类型 + file-extension: yaml + #共享配置 + shared-configs: + - data-id: common.yaml + group: SPRING_CLOUD_COMMONS + refresh: true + + - data-id: common-mysql.yaml + group: SPRING_CLOUD_COMMONS + refresh: true + + - data-id: common-redis.yaml + group: SPRING_CLOUD_COMMONS + refresh: true \ No newline at end of file diff --git a/ysy-modules/ysy-order/pom.xml b/ysy-modules/ysy-order/pom.xml new file mode 100644 index 0000000..3c010df --- /dev/null +++ b/ysy-modules/ysy-order/pom.xml @@ -0,0 +1,20 @@ + + + 4.0.0 + + com.ysy + ysy-modules + 3.0.2 + + + ysy-order + + + 17 + 17 + UTF-8 + + + \ No newline at end of file diff --git a/ysy-modules/ysy-order/src/main/java/com/ysy/Main.java b/ysy-modules/ysy-order/src/main/java/com/ysy/Main.java new file mode 100644 index 0000000..568a211 --- /dev/null +++ b/ysy-modules/ysy-order/src/main/java/com/ysy/Main.java @@ -0,0 +1,7 @@ +package com.ysy; + +public class Main { + public static void main(String[] args) { + System.out.println("Hello world!"); + } +} \ No newline at end of file diff --git a/ysy-modules/ysy-system/src/main/java/com/ysy/system/controller/UserController.java b/ysy-modules/ysy-system/src/main/java/com/ysy/system/controller/UserController.java index c9c9d79..a79622a 100644 --- a/ysy-modules/ysy-system/src/main/java/com/ysy/system/controller/UserController.java +++ b/ysy-modules/ysy-system/src/main/java/com/ysy/system/controller/UserController.java @@ -1,9 +1,75 @@ package com.ysy.system.controller; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.ysy.common.domain.po.Cart; +import com.ysy.common.domain.po.Good; +import com.ysy.common.domain.po.User; +import com.ysy.common.domain.result.Result; +import com.ysy.common.remote.GoodServiceClient; +import com.ysy.system.mapper.CartMapper; +import com.ysy.system.service.UserService; +import jakarta.servlet.http.HttpServletRequest; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.List; + @RestController @RequestMapping("/user") public class UserController { + @Autowired + private UserService userService; + + @Autowired + private CartMapper cartMapper; + + @Autowired + private HttpServletRequest request; + + @Autowired + private GoodServiceClient goodServiceClient; + + @GetMapping("/get/{phone}") + public Result getByPhone(@PathVariable String phone) { + User user = userService.getOne( + new LambdaQueryWrapper() + .eq(User::getPhone, phone) + ); + return Result.success(user); + } + + @GetMapping("/cart") + public Result> cart() { + String userId = request.getHeader("userId"); + List cartList = cartMapper.selectList(new LambdaQueryWrapper().eq(Cart::getUserId, userId).eq(Cart::getIsDeleted, false)); + cartList.forEach(cart -> { + Good good = goodServiceClient.getById(String.valueOf(cart.getGoodId())).getData(); + cart.setGood(good); + }); + return Result.success(cartList); + } + + @GetMapping("/cart/{id}") + public Result cartById(@PathVariable String id) { + Cart cart = cartMapper.selectById(id); + cart.setIsDeleted(true); + cartMapper.updateById(cart); + return Result.success("移除成功"); + } + + @GetMapping("/cart/add/{id}") + public Result cartAddById(@PathVariable String id) { + String userId = request.getHeader("userId"); + Cart build = Cart.builder() + .userId(Long.valueOf(userId)) + .goodId(Long.valueOf(id)) + .number(1) + .isDeleted(false) + .build(); + cartMapper.insert(build); + return Result.success("添加购物车成功"); + } } diff --git a/ysy-modules/ysy-system/src/main/java/com/ysy/system/mapper/CartMapper.java b/ysy-modules/ysy-system/src/main/java/com/ysy/system/mapper/CartMapper.java new file mode 100644 index 0000000..07c3831 --- /dev/null +++ b/ysy-modules/ysy-system/src/main/java/com/ysy/system/mapper/CartMapper.java @@ -0,0 +1,9 @@ +package com.ysy.system.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ysy.common.domain.po.Cart; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface CartMapper extends BaseMapper { +} diff --git a/ysy-modules/ysy-system/src/main/java/com/ysy/system/mapper/UserMapper.java b/ysy-modules/ysy-system/src/main/java/com/ysy/system/mapper/UserMapper.java new file mode 100644 index 0000000..70627d9 --- /dev/null +++ b/ysy-modules/ysy-system/src/main/java/com/ysy/system/mapper/UserMapper.java @@ -0,0 +1,9 @@ +package com.ysy.system.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ysy.common.domain.po.User; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface UserMapper extends BaseMapper { +} diff --git a/ysy-modules/ysy-system/src/main/java/com/ysy/system/service/UserService.java b/ysy-modules/ysy-system/src/main/java/com/ysy/system/service/UserService.java new file mode 100644 index 0000000..fe646e8 --- /dev/null +++ b/ysy-modules/ysy-system/src/main/java/com/ysy/system/service/UserService.java @@ -0,0 +1,7 @@ +package com.ysy.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.ysy.common.domain.po.User; + +public interface UserService extends IService { +} diff --git a/ysy-modules/ysy-system/src/main/java/com/ysy/system/service/impl/UserServiceImpl.java b/ysy-modules/ysy-system/src/main/java/com/ysy/system/service/impl/UserServiceImpl.java new file mode 100644 index 0000000..74b94ec --- /dev/null +++ b/ysy-modules/ysy-system/src/main/java/com/ysy/system/service/impl/UserServiceImpl.java @@ -0,0 +1,12 @@ +package com.ysy.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ysy.common.domain.po.User; +import com.ysy.system.mapper.UserMapper; +import com.ysy.system.service.UserService; +import org.springframework.stereotype.Service; + +@Service +public class UserServiceImpl extends ServiceImpl + implements UserService { +}