提交 517203b8 编写于 作者: H haoxr

refactor: 💫 升级SpringBoot3+SAS(临时提交勿clone)

上级 4e06358d
# 3.0.0
# 2.2.0 (2022/12/5)
### 🍏 feat
......
......@@ -5,7 +5,7 @@
<parent>
<artifactId>youlai-mall</artifactId>
<groupId>com.youlai</groupId>
<version>2.2.0</version>
<version>3.0.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
......@@ -61,12 +61,6 @@
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!-- Api文档 -->
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-micro-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.youlai</groupId>
<artifactId>oms-api</artifactId>
......
......@@ -12,7 +12,7 @@ import org.springframework.cloud.openfeign.EnableFeignClients;
* 实验室启动类
*
* @author <a href="mailto:2256222053@qq.com">zc</a>
* @date 2021/11/29 0029 22:50
* @since 2021/11/29 0029 22:50
*/
@SpringBootApplication
@EnableFeignClients(basePackageClasses = {OrderFeignClient.class, SkuFeignClient.class, MemberFeignClient.class})
......
......@@ -4,8 +4,8 @@ import com.youlai.common.result.Result;
import com.youlai.laboratory.seata.pojo.form.SeataForm;
import com.youlai.laboratory.seata.pojo.vo.SeataVO;
import com.youlai.laboratory.seata.service.SeataService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Operation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
......@@ -14,9 +14,9 @@ import org.springframework.web.bind.annotation.*;
* Seata 控制层
*
* @author haoxr
* @date 2022/4/16 20:46
* @since 2022/4/16 20:46
*/
@Api(tags = "「实验室」Seata接口")
@Tag(name = "「实验室」Seata接口")
@RestController
@RequestMapping("/api/v1/seata")
@RequiredArgsConstructor
......@@ -25,21 +25,21 @@ public class SeataController {
private final SeataService seataService;
@ApiOperation("获取模拟数据")
@Operation(summary ="获取模拟数据")
@GetMapping("/data")
public Result getData() {
SeataVO result = seataService.getData();
return Result.success(result);
}
@ApiOperation("重置模拟数据")
@Operation(summary ="重置模拟数据")
@PutMapping("/data/_reset")
public Result resetData() {
boolean result = seataService.resetData();
return Result.success(result);
}
@ApiOperation("订单支付")
@Operation(summary ="订单支付")
@PostMapping("/_pay")
public Result payOrder(@RequestBody SeataForm seataForm) {
boolean openTx = seataForm.isOpenTx();
......
......@@ -6,7 +6,7 @@ import lombok.Data;
* Seata 表单数据
*
* @author haoxr
* @date 2022/4/21 23:16
* @since 2022/4/21 23:16
*/
@Data
public class SeataForm {
......
package com.youlai.laboratory.seata.pojo.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
/**
* Seata模拟数据视图对象
*
* @author haoxr
* @date 2022/4/17 16:51
* @since 2022/4/17 16:51
*/
@ApiModel("Seata模拟数据视图对象")
@Schema(description = "Seata模拟数据视图对象")
@Data
public class SeataVO {
@ApiModelProperty("商品库存信息")
@Schema(description="商品库存信息")
private StockInfo stockInfo;
@ApiModelProperty("会员信息")
@Schema(description="会员信息")
private AccountInfo accountInfo;
@ApiModelProperty("订单信息")
@Schema(description="订单信息")
private OrderInfo orderInfo;
@ApiModel("商品库存信息")
@Schema(description = "商品库存信息")
@Data
public static class StockInfo{
@ApiModelProperty("商品名称")
@Schema(description="商品名称")
private String name;
@ApiModelProperty("商品图片")
@Schema(description="商品图片")
private String picUrl;
@ApiModelProperty("库存数量")
@Schema(description="库存数量")
private Integer stockNum;
}
@ApiModel("订单信息")
@Schema(description = "订单信息")
@Data
public static class OrderInfo{
@ApiModelProperty("订单编号")
@Schema(description="订单编号")
private String orderSn;
@ApiModelProperty("订单状态")
@Schema(description="订单状态")
private Integer status;
}
@ApiModel("会员信息")
@Schema(description = "会员信息")
@Data
public static class AccountInfo{
@ApiModelProperty("会员")
@Schema(description="会员")
private String nickName;
@ApiModelProperty("订单状态")
@Schema(description="订单状态")
private String avatarUrl;
@ApiModelProperty("订单状态")
@Schema(description="订单状态")
private Long balance;
}
......
......@@ -7,7 +7,7 @@ import com.youlai.laboratory.seata.pojo.vo.SeataVO;
* Seata 实验室接口层
*
* @author haoxr
* @date 2022/4/16 20:49
* @since 2022/4/16 20:49
*/
public interface SeataService {
......
......@@ -8,7 +8,7 @@ import com.youlai.mall.oms.api.OrderFeignClient;
import com.youlai.mall.oms.dto.OrderInfoDTO;
import com.youlai.mall.oms.dto.SeataOrderDTO;
import com.youlai.mall.pms.api.SkuFeignClient;
import com.youlai.mall.pms.pojo.dto.SkuDTO;
import com.youlai.mall.pms.model.dto.SkuDTO;
import com.youlai.mall.ums.api.MemberFeignClient;
import com.youlai.mall.ums.dto.MemberInfoDTO;
import io.seata.spring.annotation.GlobalTransactional;
......@@ -20,7 +20,7 @@ import org.springframework.stereotype.Service;
* Seata 实验室业务类接口
*
* @author haoxr
* @date 2022/4/16 20:49
* @since 2022/4/16 20:49
*/
@Service
@Slf4j
......
package com.youlai.laboratory.sentinel.controller;
import com.youlai.common.result.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Operation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@Api(tags = "「实验室」Sentinel接口")
@Tag(name = "「实验室」Sentinel接口")
@RestController
@RequestMapping("/api/v1/sentinel")
@RequiredArgsConstructor
@Slf4j
public class SentinelController {
@ApiOperation("【普通流控】获取数据")
@Operation(summary ="【普通流控】获取数据")
@GetMapping("/flow_limiting/data")
public Result getFlowLimitingData() {
return Result.success("正常数据");
}
@ApiOperation("【网关流控-RouteID】获取数据")
@Operation(summary ="【网关流控-RouteID】获取数据")
@GetMapping("/gateway_route_flow_limiting/data")
public Result getGatewayRouteFlowLimitingData() {
return Result.success("正常数据");
}
@ApiOperation("【网关流控-API分组】获取数据")
@Operation(summary ="【网关流控-API分组】获取数据")
@GetMapping("/gateway_api_flow_limiting/data")
public Result getGatewayApiFlowLimitingData() {
return Result.success("正常数据");
......
......@@ -9,8 +9,8 @@ import com.youlai.common.result.ResultCode;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Component;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
@Component
public class DefaultBlockExceptionHandler implements BlockExceptionHandler {
......
......@@ -5,7 +5,7 @@
<parent>
<artifactId>mall-oms</artifactId>
<groupId>com.youlai</groupId>
<version>2.2.0</version>
<version>3.0.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
......@@ -38,12 +38,6 @@
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
<!-- api文档 -->
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-micro-spring-boot-starter</artifactId>
</dependency>
</dependencies>
</project>
......@@ -10,7 +10,7 @@ import org.springframework.web.bind.annotation.*;
* 订单Feign Client
*
* @author haoxr
* @date 2021/3/13
* @since 2021/3/13
*/
@FeignClient(value = "mall-oms", contextId = "order")
public interface OrderFeignClient {
......
......@@ -5,7 +5,7 @@
<parent>
<artifactId>mall-oms</artifactId>
<groupId>com.youlai</groupId>
<version>2.2.0</version>
<version>3.0.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
......
......@@ -4,7 +4,7 @@ package com.youlai.mall.oms.common.constant;
* 订单常量
*
* @author haoxr
* @date 2021/03/16
* @since 2021/03/16
*/
public interface OmsConstants {
......
......@@ -8,7 +8,7 @@ import lombok.Getter;
*
* @author huawei
* @email huawei_code@163.com
* @date 2021/1/16
* @since 2021/1/16
*/
public enum OrderSourceTypeEnum implements IBaseEnum<Integer> {
......
......@@ -7,7 +7,7 @@ import lombok.Getter;
* 订单状态枚举
*
* @author haoxr
* @date 2022/11/28
* @since 2022/11/28
*/
public enum OrderStatusEnum implements IBaseEnum<Integer> {
......
......@@ -9,7 +9,7 @@ import lombok.Getter;
*
* @author huawei
* @email huawei_code@163.com
* @date 2021/1/16
* @since 2021/1/16
*/
public enum PayTypeEnum implements IBaseEnum<Integer> {
......
......@@ -15,7 +15,7 @@ import java.util.Map;
* 订单超时关单延时队列
*
* @author haoxr
* @date 2022/2/4 23:21
* @since 2022/2/4 23:21
*/
@Component
......
package com.youlai.mall.oms.config;
import io.swagger.v3.oas.models.Components;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Info;
import io.swagger.v3.oas.models.info.License;
import io.swagger.v3.oas.models.security.SecurityScheme;
import org.springdoc.core.models.GroupedOpenApi;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* Swagger 配置
* <p>
* Spring Doc FAQ: https://springdoc.org/#faq
*
* @author haoxr
* @since 2023/2/17
*/
@Configuration
public class SwaggerConfig {
/**
* 接口信息
*/
@Bean
public OpenAPI apiInfo() {
return new OpenAPI()
.components(new Components()
.addSecuritySchemes("Authorization",
new SecurityScheme().type(SecurityScheme.Type.HTTP)
.scheme("bearer").bearerFormat("JWT")
)
)
.info(new Info()
.title("订单服务")
.version("3.0.0")
.description("订单服务接口文档")
.license(new License().name("Apache 2.0")
.url("https://www.apache.org/licenses/LICENSE-2.0"))
);
}
/**
* 接口分组
*/
@Bean
public GroupedOpenApi omsApi() {
String[] paths = {"/**"};
String[] packagesToScan = {"com.youlai.mall.oms.controller"};
return GroupedOpenApi.builder()
.group("订单服务")
.packagesToScan(packagesToScan)
.pathsToMatch(paths)
.build();
}
}
package com.youlai.mall.oms.config;
import com.google.common.collect.Lists;
import io.swagger.annotations.Api;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import springfox.bean.validators.configuration.BeanValidatorPluginsConfiguration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.OAuthBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.*;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spi.service.contexts.SecurityContext;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2WebMvc;
import java.util.ArrayList;
import java.util.List;
/**
* @Author haoxr
* @Date 2021/02/25
*/
@Configuration
@EnableSwagger2WebMvc
@Import(BeanValidatorPluginsConfiguration.class)
public class SwaggerConfiguration {
@Value("${knife4j.password_token_url}")
private String passwordTokenUrl;
@Bean
public Docket restApi() {
//schema
List<GrantType> grantTypes=new ArrayList<>();
//密码模式
ResourceOwnerPasswordCredentialsGrant resourceOwnerPasswordCredentialsGrant=new ResourceOwnerPasswordCredentialsGrant(passwordTokenUrl);
grantTypes.add(resourceOwnerPasswordCredentialsGrant);
OAuth oAuth=new OAuthBuilder().name("oauth2")
.grantTypes(grantTypes).build();
//context
//scope方位
List<AuthorizationScope> scopes=new ArrayList<>();
scopes.add(new AuthorizationScope("read","read resources"));
scopes.add(new AuthorizationScope("write","write resources"));
scopes.add(new AuthorizationScope("reads","read all resources"));
scopes.add(new AuthorizationScope("writes","write all resources"));
SecurityReference securityReference=new SecurityReference("oauth2",scopes.toArray(new AuthorizationScope[]{}));
SecurityContext securityContext=new SecurityContext(Lists.newArrayList(securityReference),PathSelectors.ant("/**"));
//schemas
List<SecurityScheme> securitySchemes=Lists.newArrayList(oAuth);
//securityContext
List<SecurityContext> securityContexts=Lists.newArrayList(securityContext);
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.withClassAnnotation(Api.class))
.paths(PathSelectors.any())
.build()
.securityContexts(securityContexts)
.securitySchemes(securitySchemes)
.apiInfo(apiInfo());
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("订单中心")
.description("<div style='font-size:14px;color:red;'>订单提交、秒杀接口</div>")
.termsOfServiceUrl("https://www.youlai.tech")
.contact(new Contact("有来开源组织", "https://gitee.com/youlaiorg", "youlaitech@163.com"))
.license("Apache-2.0")
.licenseUrl("https://www.apache.org/licenses/LICENSE-2.0")
.version("1.0.0")
.build();
}
}
......@@ -14,7 +14,7 @@ import java.util.concurrent.TimeUnit;
* 自定义订单线程池
*
* @author haoxr
* @date 2022/2/13
* @since 2022/2/13
*/
@Configuration
@Slf4j
......
......@@ -8,15 +8,15 @@ import com.youlai.common.result.Result;
import com.youlai.mall.oms.dto.OrderInfoDTO;
import com.youlai.mall.oms.dto.SeataOrderDTO;
import com.youlai.mall.oms.common.enums.OrderStatusEnum;
import com.youlai.mall.oms.pojo.dto.OrderDTO;
import com.youlai.mall.oms.pojo.entity.OmsOrder;
import com.youlai.mall.oms.pojo.entity.OmsOrderItem;
import com.youlai.mall.oms.pojo.query.OrderPageQuery;
import com.youlai.mall.oms.model.dto.OrderDTO;
import com.youlai.mall.oms.model.entity.OmsOrder;
import com.youlai.mall.oms.model.entity.OmsOrderItem;
import com.youlai.mall.oms.model.query.OrderPageQuery;
import com.youlai.mall.oms.service.OrderItemService;
import com.youlai.mall.oms.service.admin.OmsOrderService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
......@@ -28,9 +28,9 @@ import java.util.Optional;
* 「管理端」订单控制层
*
* @author huawei
* @date 2020/12/30
* @since 2020/12/30
*/
@Api(tags = "「管理端」订单管理")
@Tag(name = "「管理端」订单管理")
@RestController
@RequestMapping("/api/v1/orders")
@RequiredArgsConstructor
......@@ -40,17 +40,17 @@ public class OmsOrderController {
private final OrderItemService orderItemService;
@ApiOperation("订单分页列表")
@Operation(summary ="订单分页列表")
@GetMapping
public PageResult listOrderPages(OrderPageQuery queryParams) {
IPage<OmsOrder> result = orderService.listOrderPages(queryParams);
return PageResult.success(result);
}
@ApiOperation(value = "订单详情")
@Operation(summary= "订单详情")
@GetMapping("/{orderId}")
public Result getOrderDetail(
@ApiParam("订单ID") @PathVariable Long orderId
@Parameter(name = "订单ID") @PathVariable Long orderId
) {
OrderDTO orderDTO = new OrderDTO();
// 订单
......@@ -66,10 +66,10 @@ public class OmsOrderController {
return Result.success(orderDTO);
}
@ApiOperation(value = "「实验室」获取订单信息", hidden = true)
@Operation(summary= "「实验室」获取订单信息", hidden = true)
@GetMapping("/{orderId}/orderInfo")
public Result<OrderInfoDTO> getOrderInfo(
@ApiParam("订单ID") @PathVariable Long orderId
@Parameter(name = "订单ID") @PathVariable Long orderId
) {
OrderInfoDTO orderInfo = new OrderInfoDTO();
......@@ -81,20 +81,20 @@ public class OmsOrderController {
return Result.success(orderInfo);
}
@ApiOperation(value = "「实验室」订单支付", hidden = true)
@Operation(summary= "「实验室」订单支付", hidden = true)
@PutMapping("/{orderId}/_pay")
public Result payOrder(
@ApiParam("订单ID") @PathVariable Long orderId,
@Parameter(name = "订单ID") @PathVariable Long orderId,
@RequestBody SeataOrderDTO orderDTO
) {
Boolean result = orderService.payOrder(orderId, orderDTO);
return Result.judge(result);
}
@ApiOperation(value = "「实验室」订单重置", hidden = true)
@Operation(summary= "「实验室」订单重置", hidden = true)
@PutMapping("/{orderId}/_reset")
public Result resetOrder(
@ApiParam("订单ID") @PathVariable Long orderId
@Parameter(name = "订单ID") @PathVariable Long orderId
) {
boolean result = orderService.update(new LambdaUpdateWrapper<OmsOrder>()
.eq(OmsOrder::getId, orderId)
......
......@@ -2,11 +2,11 @@ package com.youlai.mall.oms.controller.app;
import com.youlai.common.result.Result;
import com.youlai.common.security.util.SecurityUtils;
import com.youlai.mall.oms.pojo.dto.CartItemDTO;
import com.youlai.mall.oms.model.dto.CartItemDTO;
import com.youlai.mall.oms.service.CartService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
......@@ -17,10 +17,10 @@ import java.util.List;
*
* @author huawei
* @email huawei_code@163.com
* @date 2020-12-30 22:31:10
* @since 2020-12-30 22:31:10
*/
@Api(tags = "「移动端」购物车接口")
@Tag(name = "「移动端」购物车接口")
@RestController
@RequestMapping("/app-api/v1/carts")
@RequiredArgsConstructor
......@@ -28,28 +28,28 @@ public class CartController {
private final CartService cartService;
@ApiOperation(value = "查询购物车")
@Operation(summary= "查询购物车")
@GetMapping
public <T> Result<T> getCart() {
List<CartItemDTO> result = cartService.listCartItems(SecurityUtils.getMemberId());
return Result.success((T) result);
}
@ApiOperation(value = "删除购物车")
@Operation(summary= "删除购物车")
@DeleteMapping
public <T> Result<T> deleteCart() {
boolean result = cartService.deleteCart();
return Result.judge(result);
}
@ApiOperation(value = "添加购物车商品")
@Operation(summary= "添加购物车商品")
@PostMapping
public <T> Result<T> addCartItem(@RequestParam Long skuId) {
cartService.addCartItem(skuId);
return Result.success();
}
@ApiOperation(value = "更新购物车商品")
@Operation(summary= "更新购物车商品")
@PutMapping("/skuId/{skuId}")
public <T> Result<T> updateCartItem(
@PathVariable Long skuId,
......@@ -60,17 +60,17 @@ public class CartController {
return Result.judge(result);
}
@ApiOperation(value = "删除购物车商品")
@Operation(summary= "删除购物车商品")
@DeleteMapping("/skuId/{skuId}")
public <T> Result<T> removeCartItem(@PathVariable Long skuId) {
boolean result = cartService.removeCartItem(skuId);
return Result.judge(result);
}
@ApiOperation(value = "全选/全不选购物车商品")
@Operation(summary= "全选/全不选购物车商品")
@PatchMapping("/_check")
public <T> Result<T> check(
@ApiParam("全选/全不选") boolean checked
@Parameter(name = "全选/全不选") boolean checked
) {
boolean result = cartService.checkAll(checked);
return Result.judge(result);
......
......@@ -3,14 +3,14 @@ package com.youlai.mall.oms.controller.app;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.youlai.common.result.PageResult;
import com.youlai.common.result.Result;
import com.youlai.mall.oms.pojo.entity.OmsOrder;
import com.youlai.mall.oms.pojo.form.OrderSubmitForm;
import com.youlai.mall.oms.pojo.query.OrderPageQuery;
import com.youlai.mall.oms.pojo.vo.OrderConfirmVO;
import com.youlai.mall.oms.pojo.vo.OrderSubmitResultVO;
import com.youlai.mall.oms.model.entity.OmsOrder;
import com.youlai.mall.oms.model.form.OrderSubmitForm;
import com.youlai.mall.oms.model.query.OrderPageQuery;
import com.youlai.mall.oms.model.vo.OrderConfirmVO;
import com.youlai.mall.oms.model.vo.OrderSubmitResultVO;
import com.youlai.mall.oms.service.OrderService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Operation;
import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
......@@ -19,9 +19,9 @@ import org.springframework.web.bind.annotation.*;
* 「移动端」订单控制层
*
* @author huawei
* @date 2020/12/30
* @since 2020/12/30
*/
@Api(tags = "「移动端」订单接口")
@Tag(name = "「移动端」订单接口")
@RestController
@RequestMapping("/app-api/v1/orders")
@RequiredArgsConstructor
......@@ -29,7 +29,7 @@ public class OrderController {
final OrderService orderService;
@ApiOperation("分页列表")
@Operation(summary ="分页列表")
@GetMapping
public PageResult listOrderPages(OrderPageQuery queryParams) {
IPage<OmsOrder> result = orderService.listOrderPages(queryParams);
......@@ -45,28 +45,28 @@ public class OrderController {
* @param skuId 直接购买必填,购物车结算不填
* @return
*/
@ApiOperation("订单确认")
@Operation(summary ="订单确认")
@PostMapping("/_confirm")
public Result<OrderConfirmVO> confirmOrder(@RequestParam(required = false) Long skuId) {
OrderConfirmVO result = orderService.confirmOrder(skuId);
return Result.success(result);
}
@ApiOperation("订单提交")
@Operation(summary ="订单提交")
@PostMapping("/_submit")
public Result submitOrder(@RequestBody @Validated OrderSubmitForm orderSubmitForm) {
OrderSubmitResultVO result = orderService.submitOrder(orderSubmitForm);
return Result.success(result);
}
@ApiOperation("订单支付")
@Operation(summary ="订单支付")
@PostMapping("/{orderId}/_pay")
public Result payOrder(@PathVariable Long orderId) {
boolean result = orderService.payOrder(orderId);
return Result.judge(result);
}
@ApiOperation("订单删除")
@Operation(summary ="订单删除")
@DeleteMapping("/{orderId}")
public Result deleteOrder(@PathVariable Long orderId) {
boolean result = orderService.deleteOrder(orderId);
......
......@@ -3,9 +3,9 @@ package com.youlai.mall.oms.controller.app;
import com.github.binarywang.wxpay.bean.notify.SignatureHeader;
import com.github.binarywang.wxpay.constant.WxPayConstants;
import com.github.binarywang.wxpay.exception.WxPayException;
import com.youlai.mall.oms.pojo.vo.WxPayResponseVO;
import com.youlai.mall.oms.model.vo.WxPayResponseVO;
import com.youlai.mall.oms.service.OrderService;
import io.swagger.annotations.Api;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpHeaders;
......@@ -18,7 +18,7 @@ import org.springframework.web.bind.annotation.*;
* @author Gadfly
* @since 2021-05-27 14:24
*/
@Api(tags = "「移动端」微信支付回调接口")
@Tag(name = "「移动端」微信支付回调接口")
@Slf4j
@Validated
@RestController
......
package com.youlai.mall.oms.converter;
import com.youlai.mall.oms.pojo.entity.OmsOrder;
import com.youlai.mall.oms.pojo.form.OrderSubmitForm;
import com.youlai.mall.oms.model.entity.OmsOrder;
import com.youlai.mall.oms.model.form.OrderSubmitForm;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Mappings;
......@@ -11,7 +11,7 @@ import org.mapstruct.Mappings;
* 订单转化器
*
* @author haoxr
* @date 2022/12/21
* @since 2022/12/21
*/
@Mapper(componentModel = "spring")
public interface OrderConverter {
......
......@@ -2,8 +2,8 @@
package com.youlai.mall.oms.converter;
import cn.hutool.core.collection.CollectionUtil;
import com.youlai.mall.oms.pojo.dto.OrderItemDTO;
import com.youlai.mall.oms.pojo.entity.OmsOrderItem;
import com.youlai.mall.oms.model.dto.OrderItemDTO;
import com.youlai.mall.oms.model.entity.OmsOrderItem;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Mappings;
......@@ -17,7 +17,7 @@ import java.util.stream.Collectors;
* 订单对象转化器
*
* @author haoxr
* @date 2022/12/21
* @since 2022/12/21
*/
@Mapper(componentModel = "spring")
public interface OrderItemConverter {
......
......@@ -14,7 +14,7 @@ import java.io.IOException;
* 订单超时未支付取消
*
* @author haoxr
* @date 2022/12/19
* @since 2022/12/19
*/
//@Component
@RequiredArgsConstructor
......
package com.youlai.mall.oms.mapper;
import com.youlai.mall.oms.pojo.entity.OmsOrderDelivery;
import com.youlai.mall.oms.model.entity.OmsOrderDelivery;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
......@@ -9,7 +9,7 @@ import org.apache.ibatis.annotations.Mapper;
*
* @author huawei
* @email huawei_code@163.com
* @date 2020-12-30 22:31:10
* @since 2020-12-30 22:31:10
*/
@Mapper
public interface OrderDeliveryMapper extends BaseMapper<OmsOrderDelivery> {
......
package com.youlai.mall.oms.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.youlai.mall.oms.pojo.entity.OmsOrderItem;
import com.youlai.mall.oms.model.entity.OmsOrderItem;
import org.apache.ibatis.annotations.Mapper;
/**
* 订单商品明细表
*
* @author huawei
* @date 2020-12-30
* @since 2020-12-30
*/
@Mapper
public interface OrderItemMapper extends BaseMapper<OmsOrderItem> {
......
package com.youlai.mall.oms.mapper;
import com.youlai.mall.oms.pojo.entity.OmsOrderLog;
import com.youlai.mall.oms.model.entity.OmsOrderLog;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
......@@ -9,7 +9,7 @@ import org.apache.ibatis.annotations.Mapper;
*
* @author huawei
* @email huawei_code@163.com
* @date 2020-12-30 22:31:10
* @since 2020-12-30 22:31:10
*/
@Mapper
public interface OrderLogMapper extends BaseMapper<OmsOrderLog> {
......
......@@ -2,8 +2,8 @@ package com.youlai.mall.oms.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.youlai.mall.oms.pojo.entity.OmsOrder;
import com.youlai.mall.oms.pojo.query.OrderPageQuery;
import com.youlai.mall.oms.model.entity.OmsOrder;
import com.youlai.mall.oms.model.query.OrderPageQuery;
import org.apache.ibatis.annotations.*;
import java.util.List;
......@@ -13,7 +13,7 @@ import java.util.List;
*
* @author huawei
* @email huawei_code@163.com
* @date 2020-12-30 22:31:10
* @since 2020-12-30 22:31:10
*/
@Mapper
public interface OrderMapper extends BaseMapper<OmsOrder> {
......
package com.youlai.mall.oms.mapper;
import com.youlai.mall.oms.pojo.entity.OmsOrderPay;
import com.youlai.mall.oms.model.entity.OmsOrderPay;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
......@@ -9,7 +9,7 @@ import org.apache.ibatis.annotations.Mapper;
*
* @author huawei
* @email huawei_code@163.com
* @date 2020-12-30 22:31:10
* @since 2020-12-30 22:31:10
*/
@Mapper
public interface OrderPayMapper extends BaseMapper<OmsOrderPay> {
......
package com.youlai.mall.oms.mapper;
import com.youlai.mall.oms.pojo.entity.OmsOrderSetting;
import com.youlai.mall.oms.model.entity.OmsOrderSetting;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
......@@ -9,7 +9,7 @@ import org.apache.ibatis.annotations.Mapper;
*
* @author huawei
* @email huawei_code@163.com
* @date 2020-12-30 22:31:10
* @since 2020-12-30 22:31:10
*/
@Mapper
public interface OrderSettingMapper extends BaseMapper<OmsOrderSetting> {
......
package com.youlai.mall.oms.pojo.dto;
package com.youlai.mall.oms.model.dto;
import com.youlai.mall.oms.pojo.entity.OmsOrder;
import com.youlai.mall.oms.pojo.entity.OmsOrderItem;
import com.youlai.mall.oms.model.entity.OmsOrder;
import com.youlai.mall.oms.model.entity.OmsOrderItem;
import com.youlai.mall.ums.dto.MemberDTO;
import lombok.Data;
import lombok.experimental.Accessors;
......@@ -12,7 +12,7 @@ import java.util.List;
* @author huawei
* @desc
* @email huawei_code@163.com
* @date 2021/1/19
* @since 2021/1/19
*/
@Data
@Accessors(chain = true)
......
package com.youlai.mall.oms.pojo.dto;
package com.youlai.mall.oms.model.dto;
import lombok.*;
......@@ -6,7 +6,7 @@ import lombok.*;
* 订单商品
*
* @author haoxr
* @date 2022/12/21
* @since 2022/12/21
*/
@Data
public class OrderItemDTO {
......
package com.youlai.mall.oms.pojo.entity;
package com.youlai.mall.oms.model.entity;
import com.baomidou.mybatisplus.annotation.FieldStrategy;
import com.baomidou.mybatisplus.annotation.IdType;
......@@ -16,7 +16,7 @@ import java.util.List;
*
* @author huawei
* @email huawei_code@163.com
* @date 2020-12-30 22:31:10
* @since 2020-12-30 22:31:10
*/
@Data
@Accessors(chain = true)
......
package com.youlai.mall.oms.pojo.entity;
package com.youlai.mall.oms.model.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
......@@ -13,7 +13,7 @@ import java.util.Date;
*
* @author huawei
* @email huawei_code@163.com
* @date 2020-12-30 22:31:10
* @since 2020-12-30 22:31:10
*/
@Data
@Builder
......
package com.youlai.mall.oms.pojo.entity;
package com.youlai.mall.oms.model.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
......@@ -11,7 +11,7 @@ import lombok.experimental.Accessors;
*
* @author huawei
* @email huawei_code@163.com
* @date 2020-12-30 22:31:10
* @since 2020-12-30 22:31:10
*/
@Data
@Accessors(chain = true)
......
package com.youlai.mall.oms.pojo.entity;
package com.youlai.mall.oms.model.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
......@@ -10,7 +10,7 @@ import lombok.Data;
*
* @author huawei
* @email huawei_code@163.com
* @date 2020-12-30 22:31:10
* @since 2020-12-30 22:31:10
*/
@Data
public class OmsOrderLog extends BaseEntity {
......
package com.youlai.mall.oms.pojo.entity;
package com.youlai.mall.oms.model.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
......@@ -13,7 +13,7 @@ import java.util.Date;
*
* @author huawei
* @email huawei_code@163.com
* @date 2020-12-30 22:31:10
* @since 2020-12-30 22:31:10
*/
@Data
@Builder
......
package com.youlai.mall.oms.pojo.entity;
package com.youlai.mall.oms.model.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
......@@ -10,7 +10,7 @@ import lombok.Data;
*
* @author huawei
* @email huawei_code@163.com
* @date 2020-12-30 22:31:10
* @since 2020-12-30 22:31:10
*/
@Data
public class OmsOrderSetting extends BaseEntity {
......
package com.youlai.mall.oms.pojo.form;
package com.youlai.mall.oms.model.form;
import com.youlai.mall.oms.common.enums.OrderSourceTypeEnum;
import com.youlai.mall.oms.pojo.dto.OrderItemDTO;
import com.youlai.mall.oms.model.dto.OrderItemDTO;
import com.youlai.mall.ums.dto.MemberAddressDTO;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.ToString;
import javax.validation.constraints.Size;
import jakarta.validation.constraints.Size;
import java.util.List;
/**
......@@ -15,7 +15,7 @@ import java.util.List;
*
* @author huawei
* @email huawei_code@163.com
* @date 2021/1/16
* @since 2021/1/16
*/
@Data
@ToString
......@@ -27,29 +27,29 @@ public class OrderSubmitForm {
*
* @see OrderSourceTypeEnum
*/
@ApiModelProperty("订单来源")
@Schema(description="订单来源")
private Integer sourceType;
@ApiModelProperty("提交订单确认页面签发的令牌(防止订单重复提交,订单提交成功转为订单编号)")
@Schema(description="提交订单确认页面签发的令牌(防止订单重复提交,订单提交成功转为订单编号)")
private String orderToken;
@ApiModelProperty("订单总金额-用于验价(单位:分)")
@Schema(description="订单总金额-用于验价(单位:分)")
private Long totalAmount;
@ApiModelProperty("支付金额(单位:分)")
@Schema(description="支付金额(单位:分)")
private Long payAmount;
@ApiModelProperty("订单的商品明细")
@Schema(description="订单的商品明细")
private List<OrderItemDTO> orderItems;
@ApiModelProperty("订单备注")
@Schema(description="订单备注")
@Size(max = 500, message = "订单备注长度不能超过500")
private String remark;
@ApiModelProperty("优惠券ID")
@Schema(description="优惠券ID")
private String couponId;
@ApiModelProperty("收获地址")
@Schema(description="收获地址")
private MemberAddressDTO deliveryAddress;
}
package com.youlai.mall.oms.pojo.query;
package com.youlai.mall.oms.model.query;
import com.youlai.common.base.BasePageQuery;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
/**
* @author haoxr
* @date 2022/2/1 19:14
* @since 2022/2/1 19:14
*/
@Data
@ApiModel("订单分页查询对象")
@Schema(description = "订单分页查询对象")
public class OrderPageQuery extends BasePageQuery {
@ApiModelProperty("订单状态")
@Schema(description="订单状态")
private Integer status;
@ApiModelProperty("会员ID")
@Schema(description="会员ID")
private Long memberId;
@ApiModelProperty("订单编号")
@Schema(description="订单编号")
private String orderSn;
@ApiModelProperty(value = "开始时间(格式:yyyy-MM-dd)")
@Schema(description = "开始时间(格式:yyyy-MM-dd)")
private String beginDate;
@ApiModelProperty(value = "截止时间(格式:yyyy-MM-dd)")
@Schema(description = "截止时间(格式:yyyy-MM-dd)")
private String endDate;
}
package com.youlai.mall.oms.pojo.vo;
package com.youlai.mall.oms.model.vo;
import com.youlai.common.base.BaseVO;
import com.youlai.mall.oms.pojo.dto.OrderItemDTO;
import com.youlai.mall.oms.model.dto.OrderItemDTO;
import com.youlai.mall.ums.dto.MemberAddressDTO;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.List;
@ApiModel("订单确认视图层对象")
@Schema(description = "订单确认视图层对象")
@Data
public class OrderConfirmVO {
@ApiModelProperty("订单token")
@Schema(description="订单token")
private String orderToken;
@ApiModelProperty("订单明细")
@Schema(description="订单明细")
private List<OrderItemDTO> orderItems;
@ApiModelProperty("会员收获地址列表")
@Schema(description="会员收获地址列表")
private List<MemberAddressDTO> addresses;
}
package com.youlai.mall.oms.pojo.vo;
package com.youlai.mall.oms.model.vo;
import lombok.Data;
......@@ -9,7 +9,7 @@ import java.util.List;
* 订单分页视图对象
*
* @author haoxr
* @date 2022/2/1 20:58
* @since 2022/2/1 20:58
*/
@Data
public class OrderPageVO {
......
package com.youlai.mall.oms.pojo.vo;
package com.youlai.mall.oms.model.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
......@@ -10,18 +9,18 @@ import lombok.NoArgsConstructor;
* 订单提交结果
*
* @author huawei
* @date 2021/1/21
* @since 2021/1/21
*/
@ApiModel("订单提交结果")
@Schema(description = "订单提交结果")
@Data
@AllArgsConstructor
@NoArgsConstructor
public class OrderSubmitResultVO {
@ApiModelProperty("订单ID")
@Schema(description="订单ID")
private Long orderId;
@ApiModelProperty("订单编号,进入支付页面显示")
@Schema(description="订单编号,进入支付页面显示")
private String orderSn;
}
package com.youlai.mall.oms.pojo.vo;
package com.youlai.mall.oms.model.vo;
import lombok.Builder;
import lombok.Data;
import lombok.experimental.Accessors;
......
package com.youlai.mall.oms.service;
import com.youlai.mall.oms.pojo.dto.CartItemDTO;
import com.youlai.mall.oms.model.dto.CartItemDTO;
import java.util.List;
......@@ -8,7 +8,7 @@ import java.util.List;
* 购物车业务接口
*
* @author haoxr
* @date 2022/11/13
* @since 2022/11/13
*/
public interface CartService {
......
......@@ -2,14 +2,14 @@ package com.youlai.mall.oms.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.youlai.mall.oms.pojo.entity.OmsOrderDelivery;
import com.youlai.mall.oms.model.entity.OmsOrderDelivery;
/**
* 订单物流记录表
*
* @author huawei
* @email huawei_code@163.com
* @date 2020-12-30 22:31:10
* @since 2020-12-30 22:31:10
*/
public interface OrderDeliveryService extends IService<OmsOrderDelivery> {
}
......
package com.youlai.mall.oms.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.youlai.mall.oms.pojo.entity.OmsOrderItem;
import com.youlai.mall.oms.model.entity.OmsOrderItem;
/**
......@@ -9,7 +9,7 @@ import com.youlai.mall.oms.pojo.entity.OmsOrderItem;
*
* @author huawei
* @email huawei_code@163.com
* @date 2020-12-30 22:31:10
* @since 2020-12-30 22:31:10
*/
public interface OrderItemService extends IService<OmsOrderItem> {
......
......@@ -2,14 +2,14 @@ package com.youlai.mall.oms.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.youlai.mall.oms.pojo.entity.OmsOrderLog;
import com.youlai.mall.oms.model.entity.OmsOrderLog;
/**
* 订单操作历史记录
*
* @author huawei
* @email huawei_code@163.com
* @date 2020-12-30 22:31:10
* @since 2020-12-30 22:31:10
*/
public interface OrderLogService extends IService<OmsOrderLog> {
......
......@@ -5,18 +5,18 @@ import com.baomidou.mybatisplus.extension.service.IService;
import com.github.binarywang.wxpay.bean.notify.SignatureHeader;
import com.github.binarywang.wxpay.exception.WxPayException;
import com.youlai.mall.oms.pojo.entity.OmsOrder;
import com.youlai.mall.oms.pojo.query.OrderPageQuery;
import com.youlai.mall.oms.pojo.vo.OrderConfirmVO;
import com.youlai.mall.oms.pojo.vo.OrderSubmitResultVO;
import com.youlai.mall.oms.pojo.form.OrderSubmitForm;
import com.youlai.mall.oms.model.entity.OmsOrder;
import com.youlai.mall.oms.model.query.OrderPageQuery;
import com.youlai.mall.oms.model.vo.OrderConfirmVO;
import com.youlai.mall.oms.model.vo.OrderSubmitResultVO;
import com.youlai.mall.oms.model.form.OrderSubmitForm;
/**
* 订单业务接口
*
* @author huawei
* @email huawei_code@163.com
* @date 2020-12-30 22:31:10
* @since 2020-12-30 22:31:10
*/
public interface OrderService extends IService<OmsOrder> {
......
......@@ -2,14 +2,14 @@ package com.youlai.mall.oms.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.youlai.mall.oms.pojo.entity.OmsOrderSetting;
import com.youlai.mall.oms.model.entity.OmsOrderSetting;
/**
* 订单配置信息
*
* @author huawei
* @email huawei_code@163.com
* @date 2020-12-30 22:31:10
* @since 2020-12-30 22:31:10
*/
public interface OrderSettingService extends IService<OmsOrderSetting> {
}
......
......@@ -3,14 +3,14 @@ package com.youlai.mall.oms.service.admin;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.youlai.mall.oms.dto.SeataOrderDTO;
import com.youlai.mall.oms.pojo.entity.OmsOrder;
import com.youlai.mall.oms.pojo.query.OrderPageQuery;
import com.youlai.mall.oms.model.entity.OmsOrder;
import com.youlai.mall.oms.model.query.OrderPageQuery;
/**
* 「管理端」订单业务接口
*
* @author haoxr
* @date 2020/12/30
* @since 2020/12/30
*/
public interface OmsOrderService extends IService<OmsOrder> {
/**
......
......@@ -8,8 +8,8 @@ import com.youlai.common.redis.BusinessSnGenerator;
import com.youlai.mall.oms.common.enums.OrderStatusEnum;
import com.youlai.mall.oms.dto.SeataOrderDTO;
import com.youlai.mall.oms.mapper.OrderMapper;
import com.youlai.mall.oms.pojo.entity.OmsOrder;
import com.youlai.mall.oms.pojo.query.OrderPageQuery;
import com.youlai.mall.oms.model.entity.OmsOrder;
import com.youlai.mall.oms.model.query.OrderPageQuery;
import com.youlai.mall.oms.service.admin.OmsOrderService;
import com.youlai.mall.ums.api.MemberFeignClient;
import lombok.RequiredArgsConstructor;
......@@ -22,7 +22,7 @@ import java.util.List;
* 「管理端」订单业务实现类
*
* @author haoxr
* @date 2022/2/12
* @since 2022/2/12
*/
@Service
@RequiredArgsConstructor
......
......@@ -6,10 +6,10 @@ import com.youlai.common.result.ResultCode;
import com.youlai.common.security.util.SecurityUtils;
import com.youlai.common.web.exception.BizException;
import com.youlai.mall.oms.common.constant.OmsConstants;
import com.youlai.mall.oms.pojo.dto.CartItemDTO;
import com.youlai.mall.oms.model.dto.CartItemDTO;
import com.youlai.mall.oms.service.CartService;
import com.youlai.mall.pms.api.SkuFeignClient;
import com.youlai.mall.pms.pojo.dto.SkuDTO;
import com.youlai.mall.pms.model.dto.SkuDTO;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.redis.core.BoundHashOperations;
......
......@@ -2,7 +2,7 @@ package com.youlai.mall.oms.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.youlai.mall.oms.mapper.OrderDeliveryMapper;
import com.youlai.mall.oms.pojo.entity.OmsOrderDelivery;
import com.youlai.mall.oms.model.entity.OmsOrderDelivery;
import com.youlai.mall.oms.service.OrderDeliveryService;
import org.springframework.stereotype.Service;
......
......@@ -2,7 +2,7 @@ package com.youlai.mall.oms.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.youlai.mall.oms.mapper.OrderItemMapper;
import com.youlai.mall.oms.pojo.entity.OmsOrderItem;
import com.youlai.mall.oms.model.entity.OmsOrderItem;
import com.youlai.mall.oms.service.OrderItemService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
......
......@@ -3,7 +3,7 @@ package com.youlai.mall.oms.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.youlai.common.security.util.SecurityUtils;
import com.youlai.mall.oms.mapper.OrderLogMapper;
import com.youlai.mall.oms.pojo.entity.OmsOrderLog;
import com.youlai.mall.oms.model.entity.OmsOrderLog;
import com.youlai.mall.oms.service.OrderLogService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
......
......@@ -31,21 +31,21 @@ import com.youlai.mall.oms.common.enums.PayTypeEnum;
import com.youlai.mall.oms.converter.OrderConverter;
import com.youlai.mall.oms.converter.OrderItemConverter;
import com.youlai.mall.oms.mapper.OrderMapper;
import com.youlai.mall.oms.pojo.dto.CartItemDTO;
import com.youlai.mall.oms.pojo.dto.OrderItemDTO;
import com.youlai.mall.oms.pojo.entity.OmsOrder;
import com.youlai.mall.oms.pojo.entity.OmsOrderItem;
import com.youlai.mall.oms.pojo.form.OrderSubmitForm;
import com.youlai.mall.oms.pojo.query.OrderPageQuery;
import com.youlai.mall.oms.pojo.vo.OrderConfirmVO;
import com.youlai.mall.oms.pojo.vo.OrderSubmitResultVO;
import com.youlai.mall.oms.model.dto.CartItemDTO;
import com.youlai.mall.oms.model.dto.OrderItemDTO;
import com.youlai.mall.oms.model.entity.OmsOrder;
import com.youlai.mall.oms.model.entity.OmsOrderItem;
import com.youlai.mall.oms.model.form.OrderSubmitForm;
import com.youlai.mall.oms.model.query.OrderPageQuery;
import com.youlai.mall.oms.model.vo.OrderConfirmVO;
import com.youlai.mall.oms.model.vo.OrderSubmitResultVO;
import com.youlai.mall.oms.service.CartService;
import com.youlai.mall.oms.service.OrderItemService;
import com.youlai.mall.oms.service.OrderService;
import com.youlai.mall.pms.api.SkuFeignClient;
import com.youlai.mall.pms.pojo.dto.CheckPriceDTO;
import com.youlai.mall.pms.pojo.dto.SkuDTO;
import com.youlai.mall.pms.pojo.dto.LockStockDTO;
import com.youlai.mall.pms.model.dto.CheckPriceDTO;
import com.youlai.mall.pms.model.dto.SkuDTO;
import com.youlai.mall.pms.model.dto.LockStockDTO;
import com.youlai.mall.ums.api.MemberFeignClient;
import com.youlai.mall.ums.dto.MemberAddressDTO;
import io.seata.spring.annotation.GlobalTransactional;
......@@ -53,7 +53,6 @@ import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.amqp.rabbit.connection.CorrelationData;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.script.DefaultRedisScript;
......@@ -75,7 +74,7 @@ import static com.youlai.mall.oms.common.constant.OmsConstants.*;
* 订单业务实现类
*
* @author haoxr
* @date 2022/2/12
* @since 2022/2/12
*/
@Service
@RequiredArgsConstructor
......
......@@ -2,7 +2,7 @@ package com.youlai.mall.oms.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.youlai.mall.oms.mapper.OrderSettingMapper;
import com.youlai.mall.oms.pojo.entity.OmsOrderSetting;
import com.youlai.mall.oms.model.entity.OmsOrderSetting;
import com.youlai.mall.oms.service.OrderSettingService;
import org.springframework.stereotype.Service;
......
......@@ -5,7 +5,7 @@
<mapper namespace="com.youlai.mall.oms.mapper.OrderItemMapper">
<!-- 根据订单ID获取订单明细 -->
<select id="listOrderItemsByOrderId" resultType="com.youlai.mall.oms.pojo.vo.OrderPageVO$OrderItem">
<select id="listOrderItemsByOrderId" resultType="com.youlai.mall.oms.model.vo.OrderPageVO$OrderItem">
SELECT
id,
order_id,
......
......@@ -5,7 +5,7 @@
<mapper namespace="com.youlai.mall.oms.mapper.OrderMapper">
<resultMap id="OrderPageMap" type="com.youlai.mall.oms.pojo.vo.OrderPageVO">
<resultMap id="OrderPageMap" type="com.youlai.mall.oms.model.vo.OrderPageVO">
<id property="id" column="id" jdbcType="BIGINT"/>
<result property="orderSn" column="order_sn" jdbcType="VARCHAR"/>
<result property="totalAmount" column="total_amount" jdbcType="BIGINT"/>
......
......@@ -5,7 +5,7 @@
<parent>
<artifactId>youlai-mall</artifactId>
<groupId>com.youlai</groupId>
<version>2.2.0</version>
<version>3.0.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
......
......@@ -5,7 +5,7 @@
<parent>
<artifactId>mall-pms</artifactId>
<groupId>com.youlai</groupId>
<version>2.2.0</version>
<version>3.0.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
......@@ -29,11 +29,6 @@
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!-- Api文档 -->
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-micro-spring-boot-starter</artifactId>
</dependency>
</dependencies>
......
package com.youlai.mall.pms.api;
import com.youlai.common.result.Result;
import com.youlai.mall.pms.pojo.dto.CheckPriceDTO;
import com.youlai.mall.pms.pojo.dto.SkuDTO;
import com.youlai.mall.pms.pojo.dto.LockStockDTO;
import com.youlai.mall.pms.model.dto.CheckPriceDTO;
import com.youlai.mall.pms.model.dto.SkuDTO;
import com.youlai.mall.pms.model.dto.LockStockDTO;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;
......
package com.youlai.mall.pms.pojo.dto;
package com.youlai.mall.pms.model.dto;
import lombok.AllArgsConstructor;
import lombok.Data;
......@@ -11,7 +11,7 @@ import java.util.List;
* 订单商品验价传输对象
*
* @author haoxr
* @date 2022/2/7
* @since 2022/2/7
*/
@Data
@NoArgsConstructor
......
package com.youlai.mall.pms.pojo.dto;
package com.youlai.mall.pms.model.dto;
import lombok.AllArgsConstructor;
import lombok.Data;
......@@ -11,7 +11,7 @@ import java.util.List;
* 锁定库存传输对象
*
* @author haoxr
* @date 2022/12/20
* @since 2022/12/20
*/
@Data
@ToString
......
package com.youlai.mall.pms.pojo.dto;
package com.youlai.mall.pms.model.dto;
import lombok.Data;
......@@ -6,7 +6,7 @@ import lombok.Data;
* SKU信息传输对象
*
* @author haoxr
* @date 2022/2/5 23:09
* @since 2022/2/5 23:09
*/
@Data
......
package com.youlai.mall.pms.pojo.vo;
package com.youlai.mall.pms.model.vo;
import com.youlai.common.base.BaseVO;
import lombok.Builder;
......
......@@ -5,7 +5,7 @@
<parent>
<artifactId>mall-pms</artifactId>
<groupId>com.youlai</groupId>
<version>2.2.0</version>
<version>3.0.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
......
......@@ -4,7 +4,7 @@ package com.youlai.mall.pms.common.constant;
* 商品模块常量
*
* @author haoxr
* @date 2021/02/28
* @since 2021/02/28
*/
public interface ProductConstants {
......
......@@ -6,7 +6,7 @@ import lombok.Getter;
* 商品属性类型枚举
*
* @author haoxr
* @date 2022/12/20
* @since 2022/12/20
*/
public enum AttributeTypeEnum {
......
......@@ -9,7 +9,7 @@ import static com.google.common.base.Preconditions.checkArgument;
* 布隆过滤器,摘录自Google-guava包
*
* @author DaniR
* @date 2021/6/23 20:30
* @since 2021/6/23 20:30
*/
public class BloomFilterUtils<T> {
private final int numHashFunctions;
......
package com.youlai.mall.pms.config;
import io.swagger.v3.oas.models.Components;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Info;
import io.swagger.v3.oas.models.info.License;
import io.swagger.v3.oas.models.security.SecurityScheme;
import org.springdoc.core.models.GroupedOpenApi;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* Swagger 配置
* <p>
* Spring Doc FAQ: https://springdoc.org/#faq
*
* @author haoxr
* @since 2023/2/17
*/
@Configuration
public class SwaggerConfig {
/**
* 接口信息
*/
@Bean
public OpenAPI apiInfo() {
return new OpenAPI()
.components(new Components()
.addSecuritySchemes("Authorization",
new SecurityScheme().type(SecurityScheme.Type.HTTP)
.scheme("bearer").bearerFormat("JWT")
)
)
.info(new Info()
.title("商品服务")
.version("3.0.0")
.description("商品管理、库存、分类、品牌、规格、参数等接口")
.license(new License().name("Apache 2.0")
.url("https://www.apache.org/licenses/LICENSE-2.0"))
);
}
/**
* 接口分组
*/
@Bean
public GroupedOpenApi orderApi() {
String[] paths = {"/**"};
String[] packagesToScan = {"com.youlai.mall.pms.controller"};
return GroupedOpenApi.builder()
.group("商品服务")
.packagesToScan(packagesToScan)
.pathsToMatch(paths)
.build();
}
}
package com.youlai.mall.pms.config;
import com.google.common.collect.Lists;
import io.swagger.annotations.Api;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import springfox.bean.validators.configuration.BeanValidatorPluginsConfiguration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.OAuthBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.*;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spi.service.contexts.SecurityContext;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2WebMvc;
import java.util.ArrayList;
import java.util.List;
/**
* @Author haoxr
* @Date 2021-02-25 15:36
* @Version 1.0.0
*/
@Configuration
@EnableSwagger2WebMvc
@Import(BeanValidatorPluginsConfiguration.class)
public class SwaggerConfiguration {
@Value("${knife4j.password_token_url}")
private String passwordTokenUrl;
@Bean
public Docket restApi() {
//schema
List<GrantType> grantTypes=new ArrayList<>();
//密码模式
ResourceOwnerPasswordCredentialsGrant resourceOwnerPasswordCredentialsGrant=new ResourceOwnerPasswordCredentialsGrant(passwordTokenUrl);
grantTypes.add(resourceOwnerPasswordCredentialsGrant);
OAuth oAuth=new OAuthBuilder().name("oauth2")
.grantTypes(grantTypes).build();
//context
//scope方位
List<AuthorizationScope> scopes=new ArrayList<>();
scopes.add(new AuthorizationScope("read","read resources"));
scopes.add(new AuthorizationScope("write","write resources"));
scopes.add(new AuthorizationScope("reads","read all resources"));
scopes.add(new AuthorizationScope("writes","write all resources"));
SecurityReference securityReference=new SecurityReference("oauth2",scopes.toArray(new AuthorizationScope[]{}));
SecurityContext securityContext=new SecurityContext(Lists.newArrayList(securityReference),PathSelectors.ant("/**"));
//schemas
List<SecurityScheme> securitySchemes=Lists.newArrayList(oAuth);
//securityContext
List<SecurityContext> securityContexts=Lists.newArrayList(securityContext);
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.withClassAnnotation(Api.class))
.paths(PathSelectors.any())
.build()
.securityContexts(securityContexts)
.securitySchemes(securitySchemes)
.apiInfo(apiInfo());
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("商品中心")
.description("<div style='font-size:14px;color:red;'>商品管理、库存、分类、品牌、规格、参数等接口</div>")
.termsOfServiceUrl("https://www.youlai.tech")
.contact(new Contact("有来开源组织", "https://gitee.com/youlaiorg", "youlaitech@163.com"))
.license("Apache-2.0")
.licenseUrl("https://www.apache.org/licenses/LICENSE-2.0")
.version("1.0.0")
.build();
}
}
......@@ -2,10 +2,12 @@ package com.youlai.mall.pms.controller.admin;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.youlai.common.result.Result;
import com.youlai.mall.pms.pojo.form.PmsCategoryAttributeForm;
import com.youlai.mall.pms.pojo.entity.PmsCategoryAttribute;
import com.youlai.mall.pms.model.form.PmsCategoryAttributeForm;
import com.youlai.mall.pms.model.entity.PmsCategoryAttribute;
import com.youlai.mall.pms.service.AttributeService;
import io.swagger.annotations.*;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
......@@ -15,10 +17,10 @@ import java.util.List;
/**
* 「管理端」商品属性控制器
*
* @author <a href="mailto:1490493387@qq.com">haoxr</a>
* @date 2022/1/1
* @author haoxr
* @since 2022/1/1
*/
@Api(tags = "「管理端」商品属性")
@Tag(name = "「管理端」商品属性")
@RestController
@RequestMapping("/api/v1/attributes")
@Slf4j
......@@ -27,11 +29,11 @@ public class PmsAttributeController {
private AttributeService attributeService;
@ApiOperation(value = "属性列表")
@Operation(summary= "属性列表")
@GetMapping
public Result listAttributes(
@ApiParam("商品分类ID") Long categoryId,
@ApiParam("类型(1:规格;2:属性)") Integer type
@Parameter(name = "商品分类ID") Long categoryId,
@Parameter(name = "类型(1:规格;2:属性)") Integer type
) {
List<PmsCategoryAttribute> list = attributeService.list(new LambdaQueryWrapper<PmsCategoryAttribute>()
.eq(categoryId != null, PmsCategoryAttribute::getCategoryId, categoryId)
......@@ -40,7 +42,7 @@ public class PmsAttributeController {
return Result.success(list);
}
@ApiOperation(value = "批量新增/修改")
@Operation(summary= "批量新增/修改")
@PostMapping("/batch")
public Result saveBatch(@RequestBody PmsCategoryAttributeForm pmsCategoryAttributeForm) {
boolean result = attributeService.saveBatch(pmsCategoryAttributeForm);
......
......@@ -5,10 +5,12 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.youlai.common.result.PageResult;
import com.youlai.common.result.Result;
import com.youlai.mall.pms.pojo.entity.PmsBrand;
import com.youlai.mall.pms.pojo.query.BrandPageQuery;
import com.youlai.mall.pms.model.entity.PmsBrand;
import com.youlai.mall.pms.model.query.BrandPageQuery;
import com.youlai.mall.pms.service.BrandService;
import io.swagger.annotations.*;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
......@@ -19,9 +21,9 @@ import java.util.List;
* 品牌管理控制器
*
* @author <a href="mailto:xianrui0365@163.com">haoxr</a>
* @date 2022/7/2
* @since 2022/7/2
*/
@Api(tags = "「管理端」品牌接口")
@Tag(name = "「管理端」品牌接口")
@RestController
@RequestMapping("/api/v1/brands")
@RequiredArgsConstructor
......@@ -29,7 +31,7 @@ public class PmsBrandController {
private final BrandService brandService;
@ApiOperation(value = "品牌分页列表")
@Operation(summary= "品牌分页列表")
@GetMapping("/pages")
public PageResult listBrandPages(BrandPageQuery queryParams ) {
......@@ -45,7 +47,7 @@ public class PmsBrandController {
return PageResult.success(result);
}
@ApiOperation(value = "品牌列表")
@Operation(summary= "品牌列表")
@GetMapping
public Result getBrandList() {
List<PmsBrand> list = brandService.list(new LambdaQueryWrapper<PmsBrand>()
......@@ -53,7 +55,7 @@ public class PmsBrandController {
return Result.success(list);
}
@ApiOperation(value = "品牌详情")
@Operation(summary= "品牌详情")
@ApiImplicitParam(name = "id", value = "品牌id", required = true, paramType = "path", dataType = "Long")
@GetMapping("/{id}")
public Result getBrandList(@PathVariable Integer id) {
......@@ -61,14 +63,14 @@ public class PmsBrandController {
return Result.success(brand);
}
@ApiOperation(value = "新增品牌")
@Operation(summary= "新增品牌")
@PostMapping
public Result addBrand(@RequestBody PmsBrand brand) {
boolean status = brandService.save(brand);
return Result.judge(status);
}
@ApiOperation(value = "修改品牌")
@Operation(summary= "修改品牌")
@ApiImplicitParams({
@ApiImplicitParam(name = "id", value = "品牌id", required = true, paramType = "path", dataType = "Long"),
@ApiImplicitParam(name = "brand", value = "实体JSON对象", required = true, paramType = "body", dataType = "PmsBrand")
......@@ -81,9 +83,9 @@ public class PmsBrandController {
return Result.judge(status);
}
@ApiOperation(value = "删除品牌")
@Operation(summary= "删除品牌")
@DeleteMapping("/{ids}")
public Result deleteBrands(@ApiParam("品牌ID,多个以英文逗号(,)分割") @PathVariable("ids") String ids) {
public Result deleteBrands(@Parameter(name = "品牌ID,多个以英文逗号(,)分割") @PathVariable("ids") String ids) {
boolean status = brandService.removeByIds(Arrays.asList(ids.split(",")));
return Result.judge(status);
}
......
......@@ -5,15 +5,14 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.youlai.common.result.Result;
import com.youlai.common.web.model.Option;
import com.youlai.mall.pms.pojo.entity.PmsCategoryAttribute;
import com.youlai.mall.pms.pojo.entity.PmsCategory;
import com.youlai.mall.pms.pojo.vo.CategoryVO;
import com.youlai.mall.pms.model.entity.PmsCategoryAttribute;
import com.youlai.mall.pms.model.entity.PmsCategory;
import com.youlai.mall.pms.model.vo.CategoryVO;
import com.youlai.mall.pms.service.AttributeService;
import com.youlai.mall.pms.service.CategoryService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import lombok.RequiredArgsConstructor;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.web.bind.annotation.*;
......@@ -22,12 +21,12 @@ import java.util.Arrays;
import java.util.List;
/**
* * 「管理端」商品分类控制器
* 「管理端」商品分类控制器
*
* @author <a href="mailto:1490493387@qq.com">haoxr</a>
* @date 2022/01/01
* @author haoxr
* @since 2022/01/01
*/
@Api(tags = "「管理端」商品分类")
@Tag(name = "「管理端」商品分类")
@RestController
@RequestMapping("/api/v1/categories")
@RequiredArgsConstructor
......@@ -36,40 +35,40 @@ public class PmsCategoryController {
private final CategoryService categoryService;
private final AttributeService attributeService;
@ApiOperation(value = "商品分类列表")
@Operation(summary = "商品分类列表")
@GetMapping
public Result<List<CategoryVO>> list() {
List<CategoryVO> list = categoryService.listCategory(null);
return Result.success(list);
}
@ApiOperation(value = "商品分类级联列表")
@Operation(summary = "商品分类级联列表")
@GetMapping("/options")
public Result listCategoryOptions() {
List<Option> list = categoryService.listCategoryOptions();
return Result.success(list);
}
@ApiOperation(value = "商品分类详情")
@Operation(summary = "商品分类详情")
@GetMapping("/{id}")
public Result detail(
@ApiParam("商品分类ID") @PathVariable Long id
@Parameter(name = "商品分类ID") @PathVariable Long id
) {
PmsCategory category = categoryService.getById(id);
return Result.success(category);
}
@ApiOperation(value = "新增商品分类")
@Operation(summary = "新增商品分类")
@PostMapping
public Result addCategory(@RequestBody PmsCategory category) {
Long id = categoryService.saveCategory(category);
return Result.success(id);
}
@ApiOperation(value = "修改商品分类")
@Operation(summary = "修改商品分类")
@PutMapping(value = "/{id}")
public Result update(
@ApiParam("商品分类ID") @PathVariable Long id,
@Parameter(name = "商品分类ID") @PathVariable Long id,
@RequestBody PmsCategory category
) {
category.setId(id);
......@@ -77,8 +76,7 @@ public class PmsCategoryController {
return Result.success(id);
}
@ApiOperation(value = "删除商品分类")
@ApiImplicitParam(name = "ids", value = "id集合,以英文逗号','分隔", required = true, paramType = "query", dataType = "String")
@Operation(summary = "删除商品分类")
@DeleteMapping("/{ids}")
@CacheEvict(value = "pms", key = "'categoryList'")
public Result delete(@PathVariable String ids) {
......@@ -89,7 +87,7 @@ public class PmsCategoryController {
return Result.judge(result);
}
@ApiOperation(value = "选择性修改商品分类")
@Operation(summary = "选择性修改商品分类")
@PatchMapping(value = "/{id}")
@CacheEvict(value = "pms", key = "'categoryList'")
public Result patch(@PathVariable Long id, @RequestBody PmsCategory category) {
......
......@@ -2,9 +2,11 @@ package com.youlai.mall.pms.controller.admin;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.youlai.common.result.Result;
import com.youlai.mall.pms.pojo.entity.PmsSku;
import com.youlai.mall.pms.model.entity.PmsSku;
import com.youlai.mall.pms.service.SkuService;
import io.swagger.annotations.*;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
......@@ -12,35 +14,35 @@ import org.springframework.web.bind.annotation.*;
* 「管理端」商品SKU控制层
*
* @author haoxr
* @date 2022/2/8
* @since 2022/2/8
*/
@Api(tags = "「管理端」商品SKU接口")
@Tag(name = "「管理端」商品SKU接口")
@RestController
@RequestMapping("/api/v1/sku")
@RequiredArgsConstructor
public class PmsSkuController {
private final SkuService skuService;
@ApiOperation(value = "商品SKU详情")
@Operation(summary = "商品SKU详情")
@GetMapping("/{skuId}")
public Result getSkuDetail(
@ApiParam @PathVariable Long skuId
@Parameter(name = "SkuId") @PathVariable Long skuId
) {
PmsSku sku = skuService.getById(skuId);
return Result.success(sku);
}
@ApiOperation(value = "修改SKU")
@Operation(summary = "修改SKU")
@PutMapping(value = "/{skuId}")
public Result updateSku(
@ApiParam @PathVariable Long skuId,
@Parameter(name = "SkuId") @PathVariable Long skuId,
@RequestBody PmsSku sku
) {
boolean result = skuService.updateById(sku);
return Result.judge(result);
}
@ApiOperation(value = "「实验室」扣减库存数量", hidden = true)
@Operation(summary = "「实验室」扣减库存数量", hidden = true)
@PutMapping(value = "/{skuId}/stock/_deduct")
public Result deductStock(
@PathVariable Long skuId,
......@@ -54,14 +56,14 @@ public class PmsSkuController {
return Result.judge(result);
}
@ApiOperation(value = "「实验室」重置库存数量", hidden = true)
@Operation(summary = "「实验室」重置库存数量", hidden = true)
@PutMapping(value = "/{skuId}/stock/_reset")
public Result resetStock(
@PathVariable Long skuId
) {
boolean result = skuService.update(new LambdaUpdateWrapper<PmsSku>()
.eq(PmsSku::getId,skuId)
.set(PmsSku::getStockNum,999)
.eq(PmsSku::getId, skuId)
.set(PmsSku::getStockNum, 999)
);
return Result.judge(result);
}
......
......@@ -3,14 +3,14 @@ package com.youlai.mall.pms.controller.admin;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.youlai.common.result.PageResult;
import com.youlai.common.result.Result;
import com.youlai.mall.pms.pojo.form.PmsSpuForm;
import com.youlai.mall.pms.pojo.query.SpuPageQuery;
import com.youlai.mall.pms.pojo.vo.PmsSpuDetailVO;
import com.youlai.mall.pms.pojo.vo.PmsSpuPageVO;
import com.youlai.mall.pms.model.form.PmsSpuForm;
import com.youlai.mall.pms.model.query.SpuPageQuery;
import com.youlai.mall.pms.model.vo.PmsSpuDetailVO;
import com.youlai.mall.pms.model.vo.PmsSpuPageVO;
import com.youlai.mall.pms.service.SpuService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.*;
......@@ -18,9 +18,9 @@ import org.springframework.web.bind.annotation.*;
* 「管理端」商品控制层
*
* @author haoxr
* @date 2021/1/4
* @since 2021/1/4
**/
@Api(tags = "「管理端」商品SPU接口")
@Tag(name = "「管理端」商品SPU接口")
@RestController
@RequestMapping("/api/v1/spu")
@AllArgsConstructor
......@@ -28,40 +28,40 @@ public class PmsSpuController {
private SpuService spuServiced;
@ApiOperation(value = "商品分页列表")
@Operation(summary= "商品分页列表")
@GetMapping("/pages")
public PageResult listPmsSpuPages(SpuPageQuery queryParams) {
IPage<PmsSpuPageVO> result = spuServiced.listPmsSpuPages(queryParams);
return PageResult.success(result);
}
@ApiOperation(value = "商品详情")
@Operation(summary= "商品详情")
@GetMapping("/{id}")
public Result detail( @ApiParam("商品ID") @PathVariable Long id) {
public Result detail( @Parameter(name = "商品ID") @PathVariable Long id) {
PmsSpuDetailVO pmsSpuDetailVO = spuServiced.getPmsSpuDetail(id);
return Result.success(pmsSpuDetailVO);
}
@ApiOperation(value = "新增商品")
@Operation(summary= "新增商品")
@PostMapping
public Result addSpu(@RequestBody PmsSpuForm formData) {
boolean result = spuServiced.addSpu(formData);
return Result.judge(result);
}
@ApiOperation(value = "修改商品")
@Operation(summary= "修改商品")
@PutMapping(value = "/{id}")
public Result updateSpuById(
@ApiParam("商品ID") @PathVariable Long id,
@Parameter(name = "商品ID") @PathVariable Long id,
@RequestBody PmsSpuForm formData
) {
boolean result = spuServiced.updateSpuById(id,formData);
return Result.judge(result);
}
@ApiOperation(value = "删除商品")
@Operation(summary= "删除商品")
@DeleteMapping("/{ids}")
public Result delete(@ApiParam("商品ID,多个以英文逗号(,)分隔") @PathVariable String ids) {
public Result delete(@Parameter(name = "商品ID,多个以英文逗号(,)分隔") @PathVariable String ids) {
boolean result = spuServiced.removeBySpuIds(ids);
return Result.judge(result);
}
......
package com.youlai.mall.pms.controller.app;
import com.youlai.common.result.Result;
import com.youlai.mall.pms.pojo.vo.CategoryVO;
import com.youlai.mall.pms.model.vo.CategoryVO;
import com.youlai.mall.pms.service.CategoryService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
......@@ -17,9 +17,9 @@ import java.util.List;
* 商品分类控制器
*
* @author haoxr
* @date 2022/2/5
* @since 2022/2/5
*/
@Api(tags = "「移动端」商品分类")
@Tag(name = "「移动端」商品分类")
@RestController("appCategoryController")
@RequestMapping("/app-api/v1/categories")
@RequiredArgsConstructor
......@@ -27,10 +27,10 @@ public class CategoryController {
private final CategoryService categoryService;
@ApiOperation(value = "分类列表")
@Operation(summary= "分类列表")
@GetMapping
public Result list(
@ApiParam("上级分类ID") Long parentId) {
@Parameter(name = "上级分类ID") Long parentId) {
List<CategoryVO> list = categoryService.listCategory(parentId);
return Result.success(list);
}
......
package com.youlai.mall.pms.controller.app;
import com.youlai.common.result.Result;
import com.youlai.mall.pms.pojo.dto.CheckPriceDTO;
import com.youlai.mall.pms.pojo.dto.SkuDTO;
import com.youlai.mall.pms.pojo.dto.LockStockDTO;
import com.youlai.mall.pms.model.dto.CheckPriceDTO;
import com.youlai.mall.pms.model.dto.SkuDTO;
import com.youlai.mall.pms.model.dto.LockStockDTO;
import com.youlai.mall.pms.service.SkuService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
......@@ -15,9 +15,9 @@ import org.springframework.web.bind.annotation.*;
* SKU控制层
*
* @author haoxr
* @date 2022/12/21
* @since 2022/12/21
*/
@Api(tags = "「移动端」SKU接口")
@Tag(name = "「移动端」SKU接口")
@RestController
@RequestMapping("/app-api/v1/sku")
@RequiredArgsConstructor
......@@ -25,46 +25,46 @@ public class SkuController {
private final SkuService skuService;
@ApiOperation(value = "获取商品库存信息")
@Operation(summary = "获取商品库存信息")
@GetMapping("/{skuId}/info")
public Result<SkuDTO> getSkuInfo(
@ApiParam("商品ID") @PathVariable Long skuId
@Parameter(name = "商品ID") @PathVariable Long skuId
) {
SkuDTO skuInfo = skuService.getSkuInfo(skuId);
return Result.success(skuInfo);
}
@ApiOperation("获取商品库存数量")
@Operation(summary ="获取商品库存数量")
@GetMapping("/{skuId}/stock_num")
public Result<Integer> getStockNum(
@ApiParam("商品ID") @PathVariable Long skuId
@Parameter(name = "商品ID") @PathVariable Long skuId
) {
Integer stockNum = skuService.getStockNum(skuId);
return Result.success(stockNum);
}
@ApiOperation(value = "锁定库存")
@Operation(summary = "锁定库存")
@PutMapping("/_lock")
public Result lockStock(@RequestBody LockStockDTO lockStockDTO) {
boolean lockResult = skuService.lockStock(lockStockDTO);
return Result.success(lockResult);
}
@ApiOperation(value = "解锁库存")
@Operation(summary = "解锁库存")
@PutMapping("/_unlock")
public Result<Boolean> unlockStock(String orderToken) {
boolean result = skuService.unlockStock(orderToken);
return Result.judge(result);
}
@ApiOperation(value = "扣减库存")
@Operation(summary = "扣减库存")
@PutMapping("/_deduct")
public Result<Boolean> deductStock(String orderToken) {
boolean result = skuService.deductStock(orderToken);
return Result.judge(result);
}
@ApiOperation(value = "商品验价")
@Operation(summary = "商品验价")
@PostMapping("/price/_check")
public Result<Boolean> checkPrice(@RequestBody CheckPriceDTO checkPriceDTO) {
boolean result = skuService.checkPrice(checkPriceDTO);
......
......@@ -3,14 +3,14 @@ package com.youlai.mall.pms.controller.app;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.youlai.common.result.PageResult;
import com.youlai.common.result.Result;
import com.youlai.mall.pms.pojo.query.SpuPageQuery;
import com.youlai.mall.pms.pojo.vo.SeckillingSpuVO;
import com.youlai.mall.pms.pojo.vo.SpuPageVO;
import com.youlai.mall.pms.pojo.vo.SpuDetailVO;
import com.youlai.mall.pms.model.query.SpuPageQuery;
import com.youlai.mall.pms.model.vo.SeckillingSpuVO;
import com.youlai.mall.pms.model.vo.SpuPageVO;
import com.youlai.mall.pms.model.vo.SpuDetailVO;
import com.youlai.mall.pms.service.SpuService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
......@@ -19,7 +19,7 @@ import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@Api(tags = "「移动端」商品接口")
@Tag(name = "「移动端」商品接口")
@RestController
@RequestMapping("/app-api/v1/spu")
@RequiredArgsConstructor
......@@ -27,23 +27,23 @@ public class SpuController {
private final SpuService spuService;
@ApiOperation(value = "商品分页列表")
@Operation(summary= "商品分页列表")
@GetMapping("/pages")
public PageResult listSpuPages(SpuPageQuery queryParams) {
IPage<SpuPageVO> result = spuService.listSpuPages(queryParams);
return PageResult.success(result);
}
@ApiOperation(value = "获取商品详情")
@Operation(summary= "获取商品详情")
@GetMapping("/{spuId}")
public Result<SpuDetailVO> getSpuDetail(
@ApiParam("商品ID") @PathVariable Long spuId
@Parameter(name = "商品ID") @PathVariable Long spuId
) {
SpuDetailVO spuDetailVO = spuService.getSpuDetail(spuId);
return Result.success(spuDetailVO);
}
@ApiOperation(value = "获取秒杀商品列表")
@Operation(summary= "获取秒杀商品列表")
@GetMapping("/seckilling")
public Result<List<SeckillingSpuVO>> listSeckillingSpu() {
List<SeckillingSpuVO> list = spuService.listSeckillingSpu();
......
package com.youlai.mall.pms.converter;
import com.youlai.mall.pms.pojo.entity.PmsSpuAttribute;
import com.youlai.mall.pms.pojo.form.PmsSpuAttributeForm;
import com.youlai.mall.pms.model.entity.PmsSpuAttribute;
import com.youlai.mall.pms.model.form.PmsSpuAttributeForm;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Mappings;
......@@ -10,7 +10,7 @@ import org.mapstruct.Mappings;
* 商品属性对象转换器
*
* @author haoxr
* @date 2022/6/11
* @since 2022/6/11
*/
@Mapper(componentModel = "spring")
public interface SpuAttributeConverter {
......
package com.youlai.mall.pms.converter;
import com.youlai.mall.pms.pojo.entity.PmsSpu;
import com.youlai.mall.pms.pojo.form.PmsSpuForm;
import com.youlai.mall.pms.pojo.vo.SeckillingSpuVO;
import com.youlai.mall.pms.model.entity.PmsSpu;
import com.youlai.mall.pms.model.form.PmsSpuForm;
import com.youlai.mall.pms.model.vo.SeckillingSpuVO;
import org.mapstruct.InheritInverseConfiguration;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
......@@ -14,7 +14,7 @@ import java.util.List;
* 商品对象转换器
*
* @author haoxr
* @date 2022/6/11
* @since 2022/6/11
*/
@Mapper(componentModel = "spring")
public interface SpuConverter {
......
......@@ -14,7 +14,7 @@ import java.io.IOException;
* 商品库存释放监听器
*
* @author haoxr
* @date 2022/12/20
* @since 2022/12/20
*/
@Component
@RequiredArgsConstructor
......
package com.youlai.mall.pms.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.youlai.mall.pms.pojo.entity.PmsBrand;
import com.youlai.mall.pms.model.entity.PmsBrand;
import org.apache.ibatis.annotations.Mapper;
@Mapper
......
package com.youlai.mall.pms.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.youlai.mall.pms.pojo.entity.PmsCategoryAttribute;
import com.youlai.mall.pms.model.entity.PmsCategoryAttribute;
import org.apache.ibatis.annotations.Mapper;
@Mapper
......
package com.youlai.mall.pms.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.youlai.mall.pms.pojo.entity.PmsCategoryBrand;
import com.youlai.mall.pms.model.entity.PmsCategoryBrand;
import org.apache.ibatis.annotations.Mapper;
@Mapper
......
package com.youlai.mall.pms.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.youlai.mall.pms.pojo.entity.PmsCategory;
import com.youlai.mall.pms.model.entity.PmsCategory;
import org.apache.ibatis.annotations.Mapper;
@Mapper
......
package com.youlai.mall.pms.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.youlai.mall.pms.pojo.dto.SkuDTO;
import com.youlai.mall.pms.pojo.entity.PmsSku;
import com.youlai.mall.pms.model.dto.SkuDTO;
import com.youlai.mall.pms.model.entity.PmsSku;
import org.apache.ibatis.annotations.Mapper;
@Mapper
......
package com.youlai.mall.pms.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.youlai.mall.pms.pojo.entity.PmsSpuAttribute;
import com.youlai.mall.pms.model.entity.PmsSpuAttribute;
import org.apache.ibatis.annotations.Mapper;
@Mapper
......
......@@ -2,10 +2,10 @@ package com.youlai.mall.pms.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.youlai.mall.pms.pojo.entity.PmsSpu;
import com.youlai.mall.pms.pojo.query.SpuPageQuery;
import com.youlai.mall.pms.pojo.vo.PmsSpuPageVO;
import com.youlai.mall.pms.pojo.vo.SpuPageVO;
import com.youlai.mall.pms.model.entity.PmsSpu;
import com.youlai.mall.pms.model.query.SpuPageQuery;
import com.youlai.mall.pms.model.vo.PmsSpuPageVO;
import com.youlai.mall.pms.model.vo.SpuPageVO;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
......
package com.youlai.mall.pms.pojo.entity;
package com.youlai.mall.pms.model.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.youlai.common.base.BaseEntity;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotBlank;
@Data
......
package com.youlai.mall.pms.pojo.entity;
package com.youlai.mall.pms.model.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
......
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册