修正项目
This commit is contained in:
5
xlcs-parent/service/service-order/Dockerfile
Normal file
5
xlcs-parent/service/service-order/Dockerfile
Normal file
@@ -0,0 +1,5 @@
|
||||
FROM openjdk:8-jdk-alpine
|
||||
LABEL authors="yovinchen"
|
||||
VOLUME /tmp
|
||||
ADD ./target/service-order.jar service-order.jar
|
||||
ENTRYPOINT ["java","-jar","/service-order.jar", "&"]
|
52
xlcs-parent/service/service-order/pom.xml
Normal file
52
xlcs-parent/service/service-order/pom.xml
Normal file
@@ -0,0 +1,52 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<parent>
|
||||
<groupId>com.yovinchen</groupId>
|
||||
<artifactId>service</artifactId>
|
||||
<version>1.0-SNAPSHOT</version>
|
||||
</parent>
|
||||
|
||||
<artifactId>service-order</artifactId>
|
||||
|
||||
<properties>
|
||||
<maven.compiler.source>8</maven.compiler.source>
|
||||
<maven.compiler.target>8</maven.compiler.target>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
</properties>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>com.yovinchen</groupId>
|
||||
<artifactId>service-user-client</artifactId>
|
||||
<version>1.0-SNAPSHOT</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.yovinchen</groupId>
|
||||
<artifactId>service-activity-client</artifactId>
|
||||
<version>1.0-SNAPSHOT</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.yovinchen</groupId>
|
||||
<artifactId>service-product-client</artifactId>
|
||||
<version>1.0-SNAPSHOT</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.yovinchen</groupId>
|
||||
<artifactId>rabbit_util</artifactId>
|
||||
<version>1.0-SNAPSHOT</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.yovinchen</groupId>
|
||||
<artifactId>service-cart-client</artifactId>
|
||||
<version>1.0-SNAPSHOT</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
</project>
|
@@ -0,0 +1,23 @@
|
||||
package com.yovinchen.xlcs;
|
||||
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
|
||||
import org.springframework.cloud.openfeign.EnableFeignClients;
|
||||
|
||||
/**
|
||||
* ClassName: ServiceOrderApplication
|
||||
* Package: com.yovinchen.xlcs
|
||||
*
|
||||
* @author yovinchen
|
||||
* @Create 2023/10/11 19:09
|
||||
*/
|
||||
@SpringBootApplication
|
||||
@EnableDiscoveryClient
|
||||
@EnableFeignClients
|
||||
public class ServiceOrderApplication {
|
||||
|
||||
public static void main(String[] args) {
|
||||
SpringApplication.run(ServiceOrderApplication.class, args);
|
||||
}
|
||||
}
|
@@ -0,0 +1,20 @@
|
||||
package com.yovinchen.xlcs.order.controller;
|
||||
|
||||
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 购物车表 前端控制器
|
||||
* </p>
|
||||
*
|
||||
* @author yovinchen
|
||||
* @since 2023-10-12
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/order/cart-info")
|
||||
public class CartInfoController {
|
||||
|
||||
}
|
||||
|
@@ -0,0 +1,20 @@
|
||||
package com.yovinchen.xlcs.order.controller;
|
||||
|
||||
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 订单配送表 前端控制器
|
||||
* </p>
|
||||
*
|
||||
* @author yovinchen
|
||||
* @since 2023-10-12
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/order/order-deliver")
|
||||
public class OrderDeliverController {
|
||||
|
||||
}
|
||||
|
@@ -0,0 +1,80 @@
|
||||
package com.yovinchen.xlcs.order.controller;
|
||||
|
||||
|
||||
import com.yovinchen.xlcs.common.auth.AuthContextHolder;
|
||||
import com.yovinchen.xlcs.common.result.Result;
|
||||
import com.yovinchen.xlcs.model.order.OrderInfo;
|
||||
import com.yovinchen.xlcs.order.service.OrderInfoService;
|
||||
import com.yovinchen.xlcs.vo.order.OrderConfirmVo;
|
||||
import com.yovinchen.xlcs.vo.order.OrderSubmitVo;
|
||||
import com.yovinchen.xlcs.vo.order.OrderUserQueryVo;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import io.swagger.annotations.ApiParam;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 订单 前端控制器
|
||||
* </p>
|
||||
*
|
||||
* @author yovinchen
|
||||
* @since 2023-10-12
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/api/order")
|
||||
public class OrderInfoController {
|
||||
|
||||
@Autowired
|
||||
private OrderInfoService orderInfoService;
|
||||
|
||||
@ApiOperation(value = "订单查询")
|
||||
@GetMapping("auth/findUserOrderPage/{page}/{limit}")
|
||||
public Result findUserOrderPage(
|
||||
@ApiParam(name = "page", value = "当前页码", required = true)
|
||||
@PathVariable Long page,
|
||||
@ApiParam(name = "limit", value = "每页记录数", required = true)
|
||||
@PathVariable Long limit,
|
||||
@ApiParam(name = "orderVo", value = "查询对象", required = false)
|
||||
OrderUserQueryVo orderUserQueryVo) {
|
||||
//获取userId
|
||||
Long userId = AuthContextHolder.getUserId();
|
||||
orderUserQueryVo.setUserId(userId);
|
||||
|
||||
//分页查询条件
|
||||
Page<OrderInfo> pageParam = new Page<>(page, limit);
|
||||
IPage<OrderInfo> pageModel = orderInfoService.getOrderInfoByUserIdPage(pageParam, orderUserQueryVo);
|
||||
return Result.ok(pageModel);
|
||||
}
|
||||
|
||||
@ApiOperation("确认订单")
|
||||
@GetMapping("auth/confirmOrder")
|
||||
public Result confirm() {
|
||||
OrderConfirmVo orderConfirmVo = orderInfoService.confirmOrder();
|
||||
return Result.ok(orderConfirmVo);
|
||||
}
|
||||
|
||||
@ApiOperation("生成订单")
|
||||
@PostMapping("auth/submitOrder")
|
||||
public Result submitOrder(@RequestBody OrderSubmitVo orderParamVo) {
|
||||
Long orderId = orderInfoService.submitOrder(orderParamVo);
|
||||
return Result.ok(orderId);
|
||||
}
|
||||
|
||||
|
||||
@ApiOperation("获取订单详情")
|
||||
@GetMapping("auth/getOrderInfoById/{orderId}")
|
||||
public Result getOrderInfoById(@PathVariable("orderId") Long orderId) {
|
||||
OrderInfo orderInfo = orderInfoService.getOrderInfoById(orderId);
|
||||
return Result.ok(orderInfo);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "根据orderNo查询订单信息")
|
||||
@GetMapping("inner/getOrderInfo/{orderNo}")
|
||||
public OrderInfo getOrderInfo(@PathVariable("orderNo") String orderNo) {
|
||||
return orderInfoService.getOrderInfoByOrderNo(orderNo);
|
||||
}
|
||||
}
|
||||
|
@@ -0,0 +1,20 @@
|
||||
package com.yovinchen.xlcs.order.controller;
|
||||
|
||||
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 订单项信息 前端控制器
|
||||
* </p>
|
||||
*
|
||||
* @author yovinchen
|
||||
* @since 2023-10-12
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/order/order-item")
|
||||
public class OrderItemController {
|
||||
|
||||
}
|
||||
|
@@ -0,0 +1,20 @@
|
||||
package com.yovinchen.xlcs.order.controller;
|
||||
|
||||
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 订单操作日志记录 前端控制器
|
||||
* </p>
|
||||
*
|
||||
* @author yovinchen
|
||||
* @since 2023-10-12
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/order/order-log")
|
||||
public class OrderLogController {
|
||||
|
||||
}
|
||||
|
@@ -0,0 +1,20 @@
|
||||
package com.yovinchen.xlcs.order.controller;
|
||||
|
||||
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 订单退货申请 前端控制器
|
||||
* </p>
|
||||
*
|
||||
* @author yovinchen
|
||||
* @since 2023-10-12
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/order/order-return-apply")
|
||||
public class OrderReturnApplyController {
|
||||
|
||||
}
|
||||
|
@@ -0,0 +1,20 @@
|
||||
package com.yovinchen.xlcs.order.controller;
|
||||
|
||||
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 退货原因表 前端控制器
|
||||
* </p>
|
||||
*
|
||||
* @author yovinchen
|
||||
* @since 2023-10-12
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/order/order-return-reason")
|
||||
public class OrderReturnReasonController {
|
||||
|
||||
}
|
||||
|
@@ -0,0 +1,20 @@
|
||||
package com.yovinchen.xlcs.order.controller;
|
||||
|
||||
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 订单设置表 前端控制器
|
||||
* </p>
|
||||
*
|
||||
* @author yovinchen
|
||||
* @since 2023-10-12
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/order/order-set")
|
||||
public class OrderSetController {
|
||||
|
||||
}
|
||||
|
@@ -0,0 +1,20 @@
|
||||
package com.yovinchen.xlcs.order.controller;
|
||||
|
||||
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 支付信息表 前端控制器
|
||||
* </p>
|
||||
*
|
||||
* @author yovinchen
|
||||
* @since 2023-10-12
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/order/payment-info")
|
||||
public class PaymentInfoController {
|
||||
|
||||
}
|
||||
|
@@ -0,0 +1,20 @@
|
||||
package com.yovinchen.xlcs.order.controller;
|
||||
|
||||
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 退款信息表 前端控制器
|
||||
* </p>
|
||||
*
|
||||
* @author yovinchen
|
||||
* @since 2023-10-12
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/order/refund-info")
|
||||
public class RefundInfoController {
|
||||
|
||||
}
|
||||
|
@@ -0,0 +1,17 @@
|
||||
package com.yovinchen.xlcs.order.mapper;
|
||||
|
||||
|
||||
import com.yovinchen.xlcs.model.order.CartInfo;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 购物车表 Mapper 接口
|
||||
* </p>
|
||||
*
|
||||
* @author yovinchen
|
||||
* @since 2023-10-12
|
||||
*/
|
||||
public interface CartInfoMapper extends BaseMapper<CartInfo> {
|
||||
|
||||
}
|
@@ -0,0 +1,17 @@
|
||||
package com.yovinchen.xlcs.order.mapper;
|
||||
|
||||
|
||||
import com.yovinchen.xlcs.model.order.OrderDeliver;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 订单配送表 Mapper 接口
|
||||
* </p>
|
||||
*
|
||||
* @author yovinchen
|
||||
* @since 2023-10-12
|
||||
*/
|
||||
public interface OrderDeliverMapper extends BaseMapper<OrderDeliver> {
|
||||
|
||||
}
|
@@ -0,0 +1,18 @@
|
||||
package com.yovinchen.xlcs.order.mapper;
|
||||
|
||||
import com.yovinchen.xlcs.model.order.OrderInfo;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 订单 Mapper 接口
|
||||
* </p>
|
||||
*
|
||||
* @author yovinchen
|
||||
* @since 2023-10-12
|
||||
*/
|
||||
@Repository
|
||||
public interface OrderInfoMapper extends BaseMapper<OrderInfo> {
|
||||
|
||||
}
|
@@ -0,0 +1,18 @@
|
||||
package com.yovinchen.xlcs.order.mapper;
|
||||
|
||||
import com.yovinchen.xlcs.model.order.OrderItem;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 订单项信息 Mapper 接口
|
||||
* </p>
|
||||
*
|
||||
* @author yovinchen
|
||||
* @since 2023-10-12
|
||||
*/
|
||||
@Repository
|
||||
public interface OrderItemMapper extends BaseMapper<OrderItem> {
|
||||
|
||||
}
|
@@ -0,0 +1,17 @@
|
||||
package com.yovinchen.xlcs.order.mapper;
|
||||
|
||||
|
||||
import com.yovinchen.xlcs.model.order.OrderLog;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 订单操作日志记录 Mapper 接口
|
||||
* </p>
|
||||
*
|
||||
* @author yovinchen
|
||||
* @since 2023-10-12
|
||||
*/
|
||||
public interface OrderLogMapper extends BaseMapper<OrderLog> {
|
||||
|
||||
}
|
@@ -0,0 +1,16 @@
|
||||
package com.yovinchen.xlcs.order.mapper;
|
||||
|
||||
import com.yovinchen.xlcs.model.order.OrderReturnApply;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 订单退货申请 Mapper 接口
|
||||
* </p>
|
||||
*
|
||||
* @author yovinchen
|
||||
* @since 2023-10-12
|
||||
*/
|
||||
public interface OrderReturnApplyMapper extends BaseMapper<OrderReturnApply> {
|
||||
|
||||
}
|
@@ -0,0 +1,16 @@
|
||||
package com.yovinchen.xlcs.order.mapper;
|
||||
|
||||
import com.yovinchen.xlcs.model.order.OrderReturnReason;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 退货原因表 Mapper 接口
|
||||
* </p>
|
||||
*
|
||||
* @author yovinchen
|
||||
* @since 2023-10-12
|
||||
*/
|
||||
public interface OrderReturnReasonMapper extends BaseMapper<OrderReturnReason> {
|
||||
|
||||
}
|
@@ -0,0 +1,16 @@
|
||||
package com.yovinchen.xlcs.order.mapper;
|
||||
|
||||
import com.yovinchen.xlcs.model.order.OrderSet;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 订单设置表 Mapper 接口
|
||||
* </p>
|
||||
*
|
||||
* @author yovinchen
|
||||
* @since 2023-10-12
|
||||
*/
|
||||
public interface OrderSetMapper extends BaseMapper<OrderSet> {
|
||||
|
||||
}
|
@@ -0,0 +1,16 @@
|
||||
package com.yovinchen.xlcs.order.mapper;
|
||||
|
||||
import com.yovinchen.xlcs.model.order.PaymentInfo;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 支付信息表 Mapper 接口
|
||||
* </p>
|
||||
*
|
||||
* @author yovinchen
|
||||
* @since 2023-10-12
|
||||
*/
|
||||
public interface PaymentInfoMapper extends BaseMapper<PaymentInfo> {
|
||||
|
||||
}
|
@@ -0,0 +1,16 @@
|
||||
package com.yovinchen.xlcs.order.mapper;
|
||||
|
||||
import com.yovinchen.xlcs.model.order.RefundInfo;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 退款信息表 Mapper 接口
|
||||
* </p>
|
||||
*
|
||||
* @author yovinchen
|
||||
* @since 2023-10-12
|
||||
*/
|
||||
public interface RefundInfoMapper extends BaseMapper<RefundInfo> {
|
||||
|
||||
}
|
@@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.yovinchen.xlcs.order.mapper.CartInfoMapper">
|
||||
|
||||
</mapper>
|
@@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.yovinchen.xlcs.order.mapper.OrderDeliverMapper">
|
||||
|
||||
</mapper>
|
@@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.yovinchen.xlcs.order.mapper.OrderInfoMapper">
|
||||
|
||||
</mapper>
|
@@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.yovinchen.xlcs.order.mapper.OrderItemMapper">
|
||||
|
||||
</mapper>
|
@@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.yovinchen.xlcs.order.mapper.OrderLogMapper">
|
||||
|
||||
</mapper>
|
@@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.yovinchen.xlcs.order.mapper.OrderReturnApplyMapper">
|
||||
|
||||
</mapper>
|
@@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.yovinchen.xlcs.order.mapper.OrderReturnReasonMapper">
|
||||
|
||||
</mapper>
|
@@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.yovinchen.xlcs.order.mapper.OrderSetMapper">
|
||||
|
||||
</mapper>
|
@@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.yovinchen.xlcs.order.mapper.PaymentInfoMapper">
|
||||
|
||||
</mapper>
|
@@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.yovinchen.xlcs.order.mapper.RefundInfoMapper">
|
||||
|
||||
</mapper>
|
@@ -0,0 +1,44 @@
|
||||
package com.yovinchen.xlcs.order.receiver;
|
||||
|
||||
import com.yovinchen.xlcs.mq.constant.MqConst;
|
||||
import com.yovinchen.xlcs.order.service.OrderInfoService;
|
||||
import com.rabbitmq.client.Channel;
|
||||
import org.springframework.amqp.core.Message;
|
||||
import org.springframework.amqp.rabbit.annotation.Exchange;
|
||||
import org.springframework.amqp.rabbit.annotation.Queue;
|
||||
import org.springframework.amqp.rabbit.annotation.QueueBinding;
|
||||
import org.springframework.amqp.rabbit.annotation.RabbitListener;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
* ClassName: OrderReceiver
|
||||
* Package: com.yovinchen.xlcs.order.receiver
|
||||
*
|
||||
* @author yovinchen
|
||||
* @Create 2023/10/13 14:15
|
||||
*/
|
||||
@Component
|
||||
public class OrderReceiver {
|
||||
@Autowired
|
||||
private OrderInfoService orderInfoService;
|
||||
|
||||
//订单支付成功,更新订单状态,扣减库存
|
||||
@RabbitListener(bindings = @QueueBinding(
|
||||
value = @Queue(value = MqConst.QUEUE_ORDER_PAY, durable = "true"),
|
||||
exchange = @Exchange(value = MqConst.EXCHANGE_PAY_DIRECT),
|
||||
key = {MqConst.ROUTING_PAY_SUCCESS}
|
||||
))
|
||||
public void orderPay(String orderNo,
|
||||
Message message,
|
||||
Channel channel) throws IOException {
|
||||
if (!StringUtils.isEmpty(orderNo)) {
|
||||
orderInfoService.orderPay(orderNo);
|
||||
}
|
||||
channel.basicAck(message.getMessageProperties().getDeliveryTag(),
|
||||
false);
|
||||
}
|
||||
}
|
@@ -0,0 +1,16 @@
|
||||
package com.yovinchen.xlcs.order.service;
|
||||
|
||||
import com.yovinchen.xlcs.model.order.CartInfo;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 购物车表 服务类
|
||||
* </p>
|
||||
*
|
||||
* @author yovinchen
|
||||
* @since 2023-10-12
|
||||
*/
|
||||
public interface CartInfoService extends IService<CartInfo> {
|
||||
|
||||
}
|
@@ -0,0 +1,16 @@
|
||||
package com.yovinchen.xlcs.order.service;
|
||||
|
||||
import com.yovinchen.xlcs.model.order.OrderDeliver;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 订单配送表 服务类
|
||||
* </p>
|
||||
*
|
||||
* @author yovinchen
|
||||
* @since 2023-10-12
|
||||
*/
|
||||
public interface OrderDeliverService extends IService<OrderDeliver> {
|
||||
|
||||
}
|
@@ -0,0 +1,67 @@
|
||||
package com.yovinchen.xlcs.order.service;
|
||||
|
||||
import com.yovinchen.xlcs.model.order.OrderInfo;
|
||||
import com.yovinchen.xlcs.vo.order.OrderConfirmVo;
|
||||
import com.yovinchen.xlcs.vo.order.OrderSubmitVo;
|
||||
import com.yovinchen.xlcs.vo.order.OrderUserQueryVo;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 订单 服务类
|
||||
* </p>
|
||||
*
|
||||
* @author yovinchen
|
||||
* @since 2023-10-12
|
||||
*/
|
||||
public interface OrderInfoService extends IService<OrderInfo> {
|
||||
|
||||
/**
|
||||
* 确认订单
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
OrderConfirmVo confirmOrder();
|
||||
|
||||
/**
|
||||
* 生成订单
|
||||
*
|
||||
* @param orderParamVo
|
||||
* @return
|
||||
*/
|
||||
Long submitOrder(OrderSubmitVo orderParamVo);
|
||||
|
||||
/**
|
||||
* 获取订单详情
|
||||
*
|
||||
* @param orderId
|
||||
* @return
|
||||
*/
|
||||
OrderInfo getOrderInfoById(Long orderId);
|
||||
|
||||
/**
|
||||
* 根据orderNo查询订单信息
|
||||
*
|
||||
* @param orderNo
|
||||
* @return
|
||||
*/
|
||||
OrderInfo getOrderInfoByOrderNo(String orderNo);
|
||||
|
||||
/**
|
||||
* 订单支付成功,更新订单状态,扣减库存
|
||||
*
|
||||
* @param orderNo
|
||||
*/
|
||||
void orderPay(String orderNo);
|
||||
|
||||
/**
|
||||
* 订单查询
|
||||
*
|
||||
* @param pageParam
|
||||
* @param orderUserQueryVo
|
||||
* @return
|
||||
*/
|
||||
IPage<OrderInfo> getOrderInfoByUserIdPage(Page<OrderInfo> pageParam, OrderUserQueryVo orderUserQueryVo);
|
||||
}
|
@@ -0,0 +1,16 @@
|
||||
package com.yovinchen.xlcs.order.service;
|
||||
|
||||
import com.yovinchen.xlcs.model.order.OrderItem;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 订单项信息 服务类
|
||||
* </p>
|
||||
*
|
||||
* @author yovinchen
|
||||
* @since 2023-10-12
|
||||
*/
|
||||
public interface OrderItemService extends IService<OrderItem> {
|
||||
|
||||
}
|
@@ -0,0 +1,16 @@
|
||||
package com.yovinchen.xlcs.order.service;
|
||||
|
||||
import com.yovinchen.xlcs.model.order.OrderLog;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 订单操作日志记录 服务类
|
||||
* </p>
|
||||
*
|
||||
* @author yovinchen
|
||||
* @since 2023-10-12
|
||||
*/
|
||||
public interface OrderLogService extends IService<OrderLog> {
|
||||
|
||||
}
|
@@ -0,0 +1,16 @@
|
||||
package com.yovinchen.xlcs.order.service;
|
||||
|
||||
import com.yovinchen.xlcs.model.order.OrderReturnApply;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 订单退货申请 服务类
|
||||
* </p>
|
||||
*
|
||||
* @author yovinchen
|
||||
* @since 2023-10-12
|
||||
*/
|
||||
public interface OrderReturnApplyService extends IService<OrderReturnApply> {
|
||||
|
||||
}
|
@@ -0,0 +1,16 @@
|
||||
package com.yovinchen.xlcs.order.service;
|
||||
|
||||
import com.yovinchen.xlcs.model.order.OrderReturnReason;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 退货原因表 服务类
|
||||
* </p>
|
||||
*
|
||||
* @author yovinchen
|
||||
* @since 2023-10-12
|
||||
*/
|
||||
public interface OrderReturnReasonService extends IService<OrderReturnReason> {
|
||||
|
||||
}
|
@@ -0,0 +1,16 @@
|
||||
package com.yovinchen.xlcs.order.service;
|
||||
|
||||
import com.yovinchen.xlcs.model.order.OrderSet;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 订单设置表 服务类
|
||||
* </p>
|
||||
*
|
||||
* @author yovinchen
|
||||
* @since 2023-10-12
|
||||
*/
|
||||
public interface OrderSetService extends IService<OrderSet> {
|
||||
|
||||
}
|
@@ -0,0 +1,16 @@
|
||||
package com.yovinchen.xlcs.order.service;
|
||||
|
||||
import com.yovinchen.xlcs.model.order.PaymentInfo;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 支付信息表 服务类
|
||||
* </p>
|
||||
*
|
||||
* @author yovinchen
|
||||
* @since 2023-10-12
|
||||
*/
|
||||
public interface PaymentInfoService extends IService<PaymentInfo> {
|
||||
|
||||
}
|
@@ -0,0 +1,16 @@
|
||||
package com.yovinchen.xlcs.order.service;
|
||||
|
||||
import com.yovinchen.xlcs.model.order.RefundInfo;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 退款信息表 服务类
|
||||
* </p>
|
||||
*
|
||||
* @author yovinchen
|
||||
* @since 2023-10-12
|
||||
*/
|
||||
public interface RefundInfoService extends IService<RefundInfo> {
|
||||
|
||||
}
|
@@ -0,0 +1,20 @@
|
||||
package com.yovinchen.xlcs.order.service.impl;
|
||||
|
||||
import com.yovinchen.xlcs.model.order.CartInfo;
|
||||
import com.yovinchen.xlcs.order.mapper.CartInfoMapper;
|
||||
import com.yovinchen.xlcs.order.service.CartInfoService;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 购物车表 服务实现类
|
||||
* </p>
|
||||
*
|
||||
* @author yovinchen
|
||||
* @since 2023-10-12
|
||||
*/
|
||||
@Service
|
||||
public class CartInfoServiceImpl extends ServiceImpl<CartInfoMapper, CartInfo> implements CartInfoService {
|
||||
|
||||
}
|
@@ -0,0 +1,20 @@
|
||||
package com.yovinchen.xlcs.order.service.impl;
|
||||
|
||||
import com.yovinchen.xlcs.model.order.OrderDeliver;
|
||||
import com.yovinchen.xlcs.order.mapper.OrderDeliverMapper;
|
||||
import com.yovinchen.xlcs.order.service.OrderDeliverService;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 订单配送表 服务实现类
|
||||
* </p>
|
||||
*
|
||||
* @author yovinchen
|
||||
* @since 2023-10-12
|
||||
*/
|
||||
@Service
|
||||
public class OrderDeliverServiceImpl extends ServiceImpl<OrderDeliverMapper, OrderDeliver> implements OrderDeliverService {
|
||||
|
||||
}
|
@@ -0,0 +1,532 @@
|
||||
package com.yovinchen.xlcs.order.service.impl;
|
||||
|
||||
import com.yovinchen.xlcs.client.activity.ActivityFeignClient;
|
||||
import com.yovinchen.xlcs.client.cart.CartFeignClient;
|
||||
import com.yovinchen.xlcs.client.product.ProductFeignClient;
|
||||
import com.yovinchen.xlcs.client.user.UserFeignClient;
|
||||
import com.yovinchen.xlcs.common.auth.AuthContextHolder;
|
||||
import com.yovinchen.xlcs.common.constant.RedisConst;
|
||||
import com.yovinchen.xlcs.common.exception.xlcsException;
|
||||
import com.yovinchen.xlcs.common.result.ResultCodeEnum;
|
||||
import com.yovinchen.xlcs.common.utils.DateUtil;
|
||||
import com.yovinchen.xlcs.enums.*;
|
||||
import com.yovinchen.xlcs.model.activity.ActivityRule;
|
||||
import com.yovinchen.xlcs.model.activity.CouponInfo;
|
||||
import com.yovinchen.xlcs.model.order.CartInfo;
|
||||
import com.yovinchen.xlcs.model.order.OrderInfo;
|
||||
import com.yovinchen.xlcs.model.order.OrderItem;
|
||||
import com.yovinchen.xlcs.enums.*;
|
||||
import com.yovinchen.xlcs.mq.constant.MqConst;
|
||||
import com.yovinchen.xlcs.mq.service.RabbitService;
|
||||
import com.yovinchen.xlcs.order.mapper.OrderInfoMapper;
|
||||
import com.yovinchen.xlcs.order.mapper.OrderItemMapper;
|
||||
import com.yovinchen.xlcs.order.service.OrderInfoService;
|
||||
import com.yovinchen.xlcs.order.service.OrderItemService;
|
||||
import com.yovinchen.xlcs.vo.order.CartInfoVo;
|
||||
import com.yovinchen.xlcs.vo.order.OrderConfirmVo;
|
||||
import com.yovinchen.xlcs.vo.order.OrderSubmitVo;
|
||||
import com.yovinchen.xlcs.vo.order.OrderUserQueryVo;
|
||||
import com.yovinchen.xlcs.vo.product.SkuStockLockVo;
|
||||
import com.yovinchen.xlcs.vo.user.LeaderAddressVo;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.data.redis.core.BoundHashOperations;
|
||||
import org.springframework.data.redis.core.RedisTemplate;
|
||||
import org.springframework.data.redis.core.script.DefaultRedisScript;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 订单 服务实现类
|
||||
* </p>
|
||||
*
|
||||
* @author yovinchen
|
||||
* @since 2023-10-12
|
||||
*/
|
||||
@Service
|
||||
public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo> implements OrderInfoService {
|
||||
@Autowired
|
||||
private UserFeignClient userFeignClient;
|
||||
|
||||
@Autowired
|
||||
private CartFeignClient cartFeignClient;
|
||||
|
||||
@Autowired
|
||||
private ActivityFeignClient activityFeignClient;
|
||||
|
||||
@Autowired
|
||||
private ProductFeignClient productFeignClient;
|
||||
|
||||
@Autowired
|
||||
private RedisTemplate redisTemplate;
|
||||
|
||||
@Autowired
|
||||
private RabbitService rabbitService;
|
||||
|
||||
@Autowired
|
||||
private OrderItemService orderItemService;
|
||||
|
||||
@Autowired
|
||||
private OrderItemMapper orderItemMapper;
|
||||
|
||||
/**
|
||||
* 确认订单
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public OrderConfirmVo confirmOrder() {
|
||||
//获取用户id
|
||||
Long userId = AuthContextHolder.getUserId();
|
||||
|
||||
//获取用户对应团长信息
|
||||
LeaderAddressVo leaderAddressVo = userFeignClient.getUserAddressByUserId(userId);
|
||||
|
||||
//获取购物车里面选中的商品
|
||||
List<CartInfo> cartInfoList = cartFeignClient.getCartCheckedList(userId);
|
||||
|
||||
//唯一标识订单
|
||||
String orderNo = System.currentTimeMillis() + "";
|
||||
redisTemplate.opsForValue().set(RedisConst.ORDER_REPEAT + orderNo, orderNo, 24, TimeUnit.HOURS);
|
||||
|
||||
//获取购物车满足条件活动和优惠卷信息
|
||||
OrderConfirmVo orderConfirmVo = activityFeignClient.findCartActivityAndCoupon(cartInfoList, userId);
|
||||
//封装其他值
|
||||
orderConfirmVo.setLeaderAddressVo(leaderAddressVo);
|
||||
orderConfirmVo.setOrderNo(orderNo);
|
||||
|
||||
return orderConfirmVo;
|
||||
}
|
||||
|
||||
/**
|
||||
* 生成订单
|
||||
*
|
||||
* @param orderParamVo
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public Long submitOrder(OrderSubmitVo orderParamVo) {
|
||||
//第一步 设置给哪个用户生成订单 设置orderParamVo的userId
|
||||
Long userId = AuthContextHolder.getUserId();
|
||||
orderParamVo.setUserId(userId);
|
||||
|
||||
//第二步 订单不能重复提交,重复提交验证
|
||||
// 通过redis + lua脚本进行判断
|
||||
//// lua脚本保证原子性操作
|
||||
//1 获取传递过来的订单 orderNo
|
||||
String orderNo = orderParamVo.getOrderNo();
|
||||
if (StringUtils.isEmpty(orderNo)) {
|
||||
throw new xlcsException(ResultCodeEnum.ILLEGAL_REQUEST);
|
||||
}
|
||||
|
||||
//2 拿着orderNo 到 redis进行查询,
|
||||
String script = "if(redis.call('get', KEYS[1]) == ARGV[1]) then return redis.call('del', KEYS[1]) else return 0 end";
|
||||
//3 如果redis有相同orderNo,表示正常提交订单,把redis的orderNo删除
|
||||
Boolean flag = (Boolean) redisTemplate.execute(new DefaultRedisScript(script, Boolean.class), Collections.singletonList(RedisConst.ORDER_REPEAT + orderNo), orderNo);
|
||||
//4 如果redis没有相同orderNo,表示重复提交了,不能再往后进行
|
||||
if (Boolean.FALSE.equals(flag)) {
|
||||
throw new xlcsException(ResultCodeEnum.REPEAT_SUBMIT);
|
||||
}
|
||||
|
||||
//第三步 验证库存 并且 锁定库存
|
||||
// 比如仓库有10个西红柿,我想买2个西红柿
|
||||
// ** 验证库存,查询仓库里面是是否有充足西红柿
|
||||
// ** 库存充足,库存锁定 2锁定(目前没有真正减库存)
|
||||
//1、远程调用service-cart模块,获取当前用户购物车商品(选中的购物项)
|
||||
List<CartInfo> cartInfoList = cartFeignClient.getCartCheckedList(userId);
|
||||
|
||||
//2、购物车有很多商品,商品不同类型,重点处理普通类型商品
|
||||
List<CartInfo> commonSkuList = cartInfoList.stream().filter(cartInfo -> Objects.equals(cartInfo.getSkuType(), SkuType.COMMON.getCode())).collect(Collectors.toList());
|
||||
|
||||
//3、把获取购物车里面普通类型商品list集合,
|
||||
// List<CartInfo>转换List<SkuStockLockVo>
|
||||
if (!CollectionUtils.isEmpty(commonSkuList)) {
|
||||
List<SkuStockLockVo> commonStockLockVoList = commonSkuList.stream().map(item -> {
|
||||
SkuStockLockVo skuStockLockVo = new SkuStockLockVo();
|
||||
skuStockLockVo.setSkuId(item.getSkuId());
|
||||
skuStockLockVo.setSkuNum(item.getSkuNum());
|
||||
return skuStockLockVo;
|
||||
}).collect(Collectors.toList());
|
||||
|
||||
//4、远程调用service-product模块实现锁定商品
|
||||
//// 验证库存并锁定库存,保证具备原子性
|
||||
Boolean isLockSuccess = productFeignClient.checkAndLock(commonStockLockVoList, orderNo);
|
||||
if (!isLockSuccess) {//库存锁定失败
|
||||
throw new xlcsException(ResultCodeEnum.ORDER_STOCK_FALL);
|
||||
}
|
||||
}
|
||||
|
||||
//第四步 下单过程
|
||||
//1 向两张表添加数据
|
||||
// order_info 和 order_item
|
||||
Long orderId = this.saveOrder(orderParamVo, cartInfoList);
|
||||
|
||||
//下单完成,删除购物车记录
|
||||
//发送mq消息
|
||||
rabbitService.sendMessage(MqConst.EXCHANGE_ORDER_DIRECT, MqConst.ROUTING_DELETE_CART, orderParamVo.getUserId());
|
||||
|
||||
//第五步 返回订单id
|
||||
return orderId;
|
||||
}
|
||||
|
||||
//下单过程向两张表添加数据
|
||||
private Long saveOrder(OrderSubmitVo orderParamVo, List<CartInfo> cartInfoList) {
|
||||
|
||||
|
||||
if (CollectionUtils.isEmpty(cartInfoList)) {
|
||||
throw new xlcsException(ResultCodeEnum.DATA_ERROR);
|
||||
}
|
||||
//查询用户提货点和团长信息
|
||||
Long userId = AuthContextHolder.getUserId();
|
||||
LeaderAddressVo leaderAddressVo = userFeignClient.getUserAddressByUserId(userId);
|
||||
if (leaderAddressVo == null) {
|
||||
throw new xlcsException(ResultCodeEnum.DATA_ERROR);
|
||||
}
|
||||
//计算金额
|
||||
//营销活动金额
|
||||
Map<String, BigDecimal> activitySplitAmount = this.computeActivitySplitAmount(cartInfoList);
|
||||
//优惠卷金额
|
||||
Map<String, BigDecimal> couponInfoSplitAmount = this.computeCouponInfoSplitAmount(cartInfoList, orderParamVo.getCouponId());
|
||||
|
||||
//封装订单项数据
|
||||
List<OrderItem> orderItemList = new ArrayList<>();
|
||||
for (CartInfo cartInfo : cartInfoList) {
|
||||
OrderItem orderItem = new OrderItem();
|
||||
orderItem.setId(null);
|
||||
orderItem.setCategoryId(cartInfo.getCategoryId());
|
||||
if (cartInfo.getSkuType() == SkuType.COMMON.getCode()) {
|
||||
orderItem.setSkuType(SkuType.COMMON);
|
||||
} else {
|
||||
orderItem.setSkuType(SkuType.SECKILL);
|
||||
}
|
||||
orderItem.setSkuId(cartInfo.getSkuId());
|
||||
orderItem.setSkuName(cartInfo.getSkuName());
|
||||
orderItem.setSkuPrice(cartInfo.getCartPrice());
|
||||
orderItem.setImgUrl(cartInfo.getImgUrl());
|
||||
orderItem.setSkuNum(cartInfo.getSkuNum());
|
||||
orderItem.setLeaderId(orderParamVo.getLeaderId());
|
||||
//营销活动金额
|
||||
BigDecimal activityAmount = activitySplitAmount.get("activity:" + orderItem.getSkuId());
|
||||
if (activityAmount == null) {
|
||||
activityAmount = new BigDecimal(0);
|
||||
}
|
||||
orderItem.setSplitActivityAmount(activityAmount);
|
||||
|
||||
//优惠卷金额
|
||||
BigDecimal couponAmount = couponInfoSplitAmount.get("coupon:" + orderItem.getSkuId());
|
||||
if (couponAmount == null) {
|
||||
couponAmount = new BigDecimal(0);
|
||||
}
|
||||
orderItem.setSplitCouponAmount(couponAmount);
|
||||
|
||||
//总金额
|
||||
BigDecimal skuTotalAmount = orderItem.getSkuPrice().multiply(new BigDecimal(orderItem.getSkuNum()));
|
||||
//优惠之后金额
|
||||
BigDecimal splitTotalAmount = skuTotalAmount.subtract(activityAmount).subtract(couponAmount);
|
||||
orderItem.setSplitTotalAmount(splitTotalAmount);
|
||||
orderItemList.add(orderItem);
|
||||
}
|
||||
|
||||
//封装订单OrderInfo数据
|
||||
OrderInfo orderInfo = new OrderInfo();
|
||||
orderInfo.setUserId(userId);//用户id
|
||||
orderInfo.setOrderNo(orderParamVo.getOrderNo()); //订单号 唯一标识
|
||||
orderInfo.setOrderStatus(OrderStatus.UNPAID); //订单状态,生成成功未支付
|
||||
orderInfo.setLeaderId(orderParamVo.getLeaderId());//团长id
|
||||
orderInfo.setLeaderName(leaderAddressVo.getLeaderName());//团长名称
|
||||
|
||||
orderInfo.setLeaderPhone(leaderAddressVo.getLeaderPhone());
|
||||
orderInfo.setTakeName(leaderAddressVo.getTakeName());
|
||||
orderInfo.setReceiverName(orderParamVo.getReceiverName());
|
||||
orderInfo.setReceiverPhone(orderParamVo.getReceiverPhone());
|
||||
orderInfo.setReceiverProvince(leaderAddressVo.getProvince());
|
||||
orderInfo.setReceiverCity(leaderAddressVo.getCity());
|
||||
orderInfo.setReceiverDistrict(leaderAddressVo.getDistrict());
|
||||
orderInfo.setReceiverAddress(leaderAddressVo.getDetailAddress());
|
||||
orderInfo.setWareId(cartInfoList.get(0).getWareId());
|
||||
orderInfo.setProcessStatus(ProcessStatus.UNPAID);
|
||||
|
||||
//计算订单金额
|
||||
BigDecimal originalTotalAmount = this.computeTotalAmount(cartInfoList);
|
||||
BigDecimal activityAmount = activitySplitAmount.get("activity:total");
|
||||
|
||||
if (null == activityAmount) activityAmount = new BigDecimal(0);
|
||||
BigDecimal couponAmount = couponInfoSplitAmount.get("coupon:total");
|
||||
|
||||
if (null == couponAmount) couponAmount = new BigDecimal(0);
|
||||
BigDecimal totalAmount = originalTotalAmount.subtract(activityAmount).subtract(couponAmount);
|
||||
//计算订单金额
|
||||
orderInfo.setOriginalTotalAmount(originalTotalAmount);
|
||||
orderInfo.setActivityAmount(activityAmount);
|
||||
orderInfo.setCouponAmount(couponAmount);
|
||||
orderInfo.setTotalAmount(totalAmount);
|
||||
|
||||
//计算团长佣金
|
||||
BigDecimal profitRate = new BigDecimal(0);//orderSetService.getProfitRate();
|
||||
BigDecimal commissionAmount = orderInfo.getTotalAmount().multiply(profitRate);
|
||||
orderInfo.setCommissionAmount(commissionAmount);
|
||||
|
||||
//添加数据到订单基本信息表
|
||||
baseMapper.insert(orderInfo);
|
||||
|
||||
//添加订单里面订单项
|
||||
orderItemList.forEach(orderItem -> {
|
||||
orderItem.setOrderId(orderInfo.getId());
|
||||
orderItemService.save(orderItem);
|
||||
});
|
||||
//如果当前订单使用优惠卷,更新优惠卷状态
|
||||
if (orderInfo.getCouponId() != null) {
|
||||
activityFeignClient.updateCouponInfoUseStatus(orderInfo.getCouponId(), userId, orderInfo.getId());
|
||||
}
|
||||
|
||||
//下单成功,记录用户购物商品数量,redis
|
||||
//hash类型 key(userId) - field(skuId)-value(skuNum)
|
||||
String orderSkuKey = RedisConst.ORDER_SKU_MAP + orderParamVo.getUserId();
|
||||
BoundHashOperations<String, String, Integer> hashOperations = redisTemplate.boundHashOps(orderSkuKey);
|
||||
cartInfoList.forEach(cartInfo -> {
|
||||
if (Boolean.TRUE.equals(hashOperations.hasKey(cartInfo.getSkuId().toString()))) {
|
||||
Integer orderSkuNum = hashOperations.get(cartInfo.getSkuId().toString()) + cartInfo.getSkuNum();
|
||||
hashOperations.put(cartInfo.getSkuId().toString(), orderSkuNum);
|
||||
}
|
||||
});
|
||||
redisTemplate.expire(orderSkuKey, DateUtil.getCurrentExpireTimes(), TimeUnit.SECONDS);
|
||||
//订单id
|
||||
return orderInfo.getId();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取订单详情
|
||||
*
|
||||
* @param orderId
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public OrderInfo getOrderInfoById(Long orderId) {
|
||||
//根据orderId查询订单基本信息
|
||||
OrderInfo orderInfo = baseMapper.selectById(orderId);
|
||||
|
||||
//根据orderId查询订单所有订单项list列表
|
||||
List<OrderItem> orderItemList = orderItemMapper.selectList(new LambdaQueryWrapper<OrderItem>().eq(OrderItem::getOrderId, orderInfo.getId()));
|
||||
|
||||
//查询所有订单项封装到每个订单对象里面
|
||||
orderInfo.setOrderItemList(orderItemList);
|
||||
return orderInfo;
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据orderNo查询订单信息
|
||||
*
|
||||
* @param orderNo
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public OrderInfo getOrderInfoByOrderNo(String orderNo) {
|
||||
return baseMapper.selectOne(new LambdaQueryWrapper<OrderInfo>().eq(OrderInfo::getOrderNo, orderNo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 订单支付成功,更新订单状态,扣减库存
|
||||
*
|
||||
* @param orderNo
|
||||
*/
|
||||
@Override
|
||||
public void orderPay(String orderNo) {
|
||||
//查询订单状态是否已经修改完成了支付状态
|
||||
OrderInfo orderInfo = this.getOrderInfoByOrderNo(orderNo);
|
||||
if (orderInfo == null || orderInfo.getOrderStatus() != OrderStatus.UNPAID) {
|
||||
return;
|
||||
}
|
||||
//更新状态
|
||||
this.updateOrderStatus(orderInfo.getId());
|
||||
|
||||
//扣减库存
|
||||
rabbitService.sendMessage(MqConst.EXCHANGE_ORDER_DIRECT, MqConst.ROUTING_MINUS_STOCK, orderNo);
|
||||
}
|
||||
|
||||
/**
|
||||
* 订单查询
|
||||
*
|
||||
* @param pageParam
|
||||
* @param orderUserQueryVo
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public IPage<OrderInfo> getOrderInfoByUserIdPage(Page<OrderInfo> pageParam, OrderUserQueryVo orderUserQueryVo) {
|
||||
IPage<OrderInfo> pageModel = baseMapper.selectPage(pageParam, new LambdaQueryWrapper<OrderInfo>()
|
||||
.eq(OrderInfo::getUserId, orderUserQueryVo.getUserId())
|
||||
.eq(OrderInfo::getOrderStatus, orderUserQueryVo.getOrderStatus()));
|
||||
|
||||
//获取每个订单,把每个订单里面订单项查询封装
|
||||
List<OrderInfo> orderInfoList = pageModel.getRecords();
|
||||
for (OrderInfo orderInfo : orderInfoList) {
|
||||
//根据订单id查询里面所有订单项列表
|
||||
List<OrderItem> orderItemList = orderItemMapper.selectList(new LambdaQueryWrapper<OrderItem>()
|
||||
.eq(OrderItem::getOrderId, orderInfo.getId()));
|
||||
//把订单项集合封装到每个订单里面
|
||||
orderInfo.setOrderItemList(orderItemList);
|
||||
//封装订单状态名称
|
||||
orderInfo.getParam().put("orderStatusName", orderInfo.getOrderStatus().getComment());
|
||||
}
|
||||
return pageModel;
|
||||
}
|
||||
|
||||
//更新状态
|
||||
private void updateOrderStatus(Long id) {
|
||||
OrderInfo orderInfo = baseMapper.selectById(id);
|
||||
orderInfo.setOrderStatus(OrderStatus.WAITING_DELEVER);
|
||||
orderInfo.setProcessStatus(ProcessStatus.WAITING_DELEVER);
|
||||
baseMapper.updateById(orderInfo);
|
||||
}
|
||||
|
||||
//计算总金额
|
||||
private BigDecimal computeTotalAmount(List<CartInfo> cartInfoList) {
|
||||
BigDecimal total = new BigDecimal(0);
|
||||
for (CartInfo cartInfo : cartInfoList) {
|
||||
BigDecimal itemTotal = cartInfo.getCartPrice().multiply(new BigDecimal(cartInfo.getSkuNum()));
|
||||
total = total.add(itemTotal);
|
||||
}
|
||||
return total;
|
||||
}
|
||||
|
||||
/**
|
||||
* 计算购物项分摊的优惠减少金额
|
||||
* 打折:按折扣分担
|
||||
* 现金:按比例分摊
|
||||
*
|
||||
* @param cartInfoParamList
|
||||
* @return
|
||||
*/
|
||||
private Map<String, BigDecimal> computeActivitySplitAmount(List<CartInfo> cartInfoParamList) {
|
||||
Map<String, BigDecimal> activitySplitAmountMap = new HashMap<>();
|
||||
|
||||
//促销活动相关信息
|
||||
List<CartInfoVo> cartInfoVoList = activityFeignClient.findCartActivityList(cartInfoParamList);
|
||||
|
||||
//活动总金额
|
||||
BigDecimal activityReduceAmount = new BigDecimal(0);
|
||||
if (!CollectionUtils.isEmpty(cartInfoVoList)) {
|
||||
for (CartInfoVo cartInfoVo : cartInfoVoList) {
|
||||
ActivityRule activityRule = cartInfoVo.getActivityRule();
|
||||
List<CartInfo> cartInfoList = cartInfoVo.getCartInfoList();
|
||||
if (null != activityRule) {
|
||||
//优惠金额, 按比例分摊
|
||||
BigDecimal reduceAmount = activityRule.getReduceAmount();
|
||||
activityReduceAmount = activityReduceAmount.add(reduceAmount);
|
||||
if (cartInfoList.size() == 1) {
|
||||
activitySplitAmountMap.put("activity:" + cartInfoList.get(0).getSkuId(), reduceAmount);
|
||||
} else {
|
||||
//总金额
|
||||
BigDecimal originalTotalAmount = new BigDecimal(0);
|
||||
for (CartInfo cartInfo : cartInfoList) {
|
||||
BigDecimal skuTotalAmount = cartInfo.getCartPrice().multiply(new BigDecimal(cartInfo.getSkuNum()));
|
||||
originalTotalAmount = originalTotalAmount.add(skuTotalAmount);
|
||||
}
|
||||
//记录除最后一项是所有分摊金额, 最后一项=总的 - skuPartReduceAmount
|
||||
BigDecimal skuPartReduceAmount = new BigDecimal(0);
|
||||
if (activityRule.getActivityType() == ActivityType.FULL_REDUCTION) {
|
||||
for (int i = 0, len = cartInfoList.size(); i < len; i++) {
|
||||
CartInfo cartInfo = cartInfoList.get(i);
|
||||
if (i < len - 1) {
|
||||
BigDecimal skuTotalAmount = cartInfo.getCartPrice().multiply(new BigDecimal(cartInfo.getSkuNum()));
|
||||
//sku分摊金额
|
||||
BigDecimal skuReduceAmount = skuTotalAmount.divide(originalTotalAmount, 2, RoundingMode.HALF_UP).multiply(reduceAmount);
|
||||
activitySplitAmountMap.put("activity:" + cartInfo.getSkuId(), skuReduceAmount);
|
||||
|
||||
skuPartReduceAmount = skuPartReduceAmount.add(skuReduceAmount);
|
||||
} else {
|
||||
BigDecimal skuReduceAmount = reduceAmount.subtract(skuPartReduceAmount);
|
||||
activitySplitAmountMap.put("activity:" + cartInfo.getSkuId(), skuReduceAmount);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
for (int i = 0, len = cartInfoList.size(); i < len; i++) {
|
||||
CartInfo cartInfo = cartInfoList.get(i);
|
||||
if (i < len - 1) {
|
||||
BigDecimal skuTotalAmount = cartInfo.getCartPrice().multiply(new BigDecimal(cartInfo.getSkuNum()));
|
||||
|
||||
//sku分摊金额
|
||||
BigDecimal skuDiscountTotalAmount = skuTotalAmount.multiply(activityRule.getBenefitDiscount().divide(new BigDecimal("10")));
|
||||
BigDecimal skuReduceAmount = skuTotalAmount.subtract(skuDiscountTotalAmount);
|
||||
activitySplitAmountMap.put("activity:" + cartInfo.getSkuId(), skuReduceAmount);
|
||||
|
||||
skuPartReduceAmount = skuPartReduceAmount.add(skuReduceAmount);
|
||||
} else {
|
||||
BigDecimal skuReduceAmount = reduceAmount.subtract(skuPartReduceAmount);
|
||||
activitySplitAmountMap.put("activity:" + cartInfo.getSkuId(), skuReduceAmount);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
activitySplitAmountMap.put("activity:total", activityReduceAmount);
|
||||
return activitySplitAmountMap;
|
||||
}
|
||||
|
||||
//优惠卷优惠金额
|
||||
private Map<String, BigDecimal> computeCouponInfoSplitAmount(List<CartInfo> cartInfoList, Long couponId) {
|
||||
Map<String, BigDecimal> couponInfoSplitAmountMap = new HashMap<>();
|
||||
|
||||
if (null == couponId) return couponInfoSplitAmountMap;
|
||||
CouponInfo couponInfo = activityFeignClient.findRangeSkuIdList(cartInfoList, couponId);
|
||||
|
||||
if (null != couponInfo) {
|
||||
//sku对应的订单明细
|
||||
Map<Long, CartInfo> skuIdToCartInfoMap = new HashMap<>();
|
||||
for (CartInfo cartInfo : cartInfoList) {
|
||||
skuIdToCartInfoMap.put(cartInfo.getSkuId(), cartInfo);
|
||||
}
|
||||
//优惠券对应的skuId列表
|
||||
List<Long> skuIdList = couponInfo.getSkuIdList();
|
||||
if (CollectionUtils.isEmpty(skuIdList)) {
|
||||
return couponInfoSplitAmountMap;
|
||||
}
|
||||
//优惠券优化总金额
|
||||
BigDecimal reduceAmount = couponInfo.getAmount();
|
||||
if (skuIdList.size() == 1) {
|
||||
//sku的优化金额
|
||||
couponInfoSplitAmountMap.put("coupon:" + skuIdToCartInfoMap.get(skuIdList.get(0)).getSkuId(), reduceAmount);
|
||||
} else {
|
||||
//总金额
|
||||
BigDecimal originalTotalAmount = new BigDecimal(0);
|
||||
for (Long skuId : skuIdList) {
|
||||
CartInfo cartInfo = skuIdToCartInfoMap.get(skuId);
|
||||
BigDecimal skuTotalAmount = cartInfo.getCartPrice().multiply(new BigDecimal(cartInfo.getSkuNum()));
|
||||
originalTotalAmount = originalTotalAmount.add(skuTotalAmount);
|
||||
}
|
||||
//记录除最后一项是所有分摊金额, 最后一项=总的 - skuPartReduceAmount
|
||||
BigDecimal skuPartReduceAmount = new BigDecimal(0);
|
||||
if (couponInfo.getCouponType() == CouponType.CASH || couponInfo.getCouponType() == CouponType.FULL_REDUCTION) {
|
||||
for (int i = 0, len = skuIdList.size(); i < len; i++) {
|
||||
CartInfo cartInfo = skuIdToCartInfoMap.get(skuIdList.get(i));
|
||||
if (i < len - 1) {
|
||||
BigDecimal skuTotalAmount = cartInfo.getCartPrice().multiply(new BigDecimal(cartInfo.getSkuNum()));
|
||||
//sku分摊金额
|
||||
BigDecimal skuReduceAmount = skuTotalAmount.divide(originalTotalAmount, 2, RoundingMode.HALF_UP).multiply(reduceAmount);
|
||||
couponInfoSplitAmountMap.put("coupon:" + cartInfo.getSkuId(), skuReduceAmount);
|
||||
|
||||
skuPartReduceAmount = skuPartReduceAmount.add(skuReduceAmount);
|
||||
} else {
|
||||
BigDecimal skuReduceAmount = reduceAmount.subtract(skuPartReduceAmount);
|
||||
couponInfoSplitAmountMap.put("coupon:" + cartInfo.getSkuId(), skuReduceAmount);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
couponInfoSplitAmountMap.put("coupon:total", couponInfo.getAmount());
|
||||
}
|
||||
return couponInfoSplitAmountMap;
|
||||
}
|
||||
}
|
@@ -0,0 +1,20 @@
|
||||
package com.yovinchen.xlcs.order.service.impl;
|
||||
|
||||
import com.yovinchen.xlcs.model.order.OrderItem;
|
||||
import com.yovinchen.xlcs.order.mapper.OrderItemMapper;
|
||||
import com.yovinchen.xlcs.order.service.OrderItemService;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 订单项信息 服务实现类
|
||||
* </p>
|
||||
*
|
||||
* @author yovinchen
|
||||
* @since 2023-10-12
|
||||
*/
|
||||
@Service
|
||||
public class OrderItemServiceImpl extends ServiceImpl<OrderItemMapper, OrderItem> implements OrderItemService {
|
||||
|
||||
}
|
@@ -0,0 +1,20 @@
|
||||
package com.yovinchen.xlcs.order.service.impl;
|
||||
|
||||
import com.yovinchen.xlcs.model.order.OrderLog;
|
||||
import com.yovinchen.xlcs.order.mapper.OrderLogMapper;
|
||||
import com.yovinchen.xlcs.order.service.OrderLogService;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 订单操作日志记录 服务实现类
|
||||
* </p>
|
||||
*
|
||||
* @author yovinchen
|
||||
* @since 2023-10-12
|
||||
*/
|
||||
@Service
|
||||
public class OrderLogServiceImpl extends ServiceImpl<OrderLogMapper, OrderLog> implements OrderLogService {
|
||||
|
||||
}
|
@@ -0,0 +1,20 @@
|
||||
package com.yovinchen.xlcs.order.service.impl;
|
||||
|
||||
import com.yovinchen.xlcs.model.order.OrderReturnApply;
|
||||
import com.yovinchen.xlcs.order.mapper.OrderReturnApplyMapper;
|
||||
import com.yovinchen.xlcs.order.service.OrderReturnApplyService;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 订单退货申请 服务实现类
|
||||
* </p>
|
||||
*
|
||||
* @author yovinchen
|
||||
* @since 2023-10-12
|
||||
*/
|
||||
@Service
|
||||
public class OrderReturnApplyServiceImpl extends ServiceImpl<OrderReturnApplyMapper, OrderReturnApply> implements OrderReturnApplyService {
|
||||
|
||||
}
|
@@ -0,0 +1,20 @@
|
||||
package com.yovinchen.xlcs.order.service.impl;
|
||||
|
||||
import com.yovinchen.xlcs.model.order.OrderReturnReason;
|
||||
import com.yovinchen.xlcs.order.mapper.OrderReturnReasonMapper;
|
||||
import com.yovinchen.xlcs.order.service.OrderReturnReasonService;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 退货原因表 服务实现类
|
||||
* </p>
|
||||
*
|
||||
* @author yovinchen
|
||||
* @since 2023-10-12
|
||||
*/
|
||||
@Service
|
||||
public class OrderReturnReasonServiceImpl extends ServiceImpl<OrderReturnReasonMapper, OrderReturnReason> implements OrderReturnReasonService {
|
||||
|
||||
}
|
@@ -0,0 +1,20 @@
|
||||
package com.yovinchen.xlcs.order.service.impl;
|
||||
|
||||
import com.yovinchen.xlcs.model.order.OrderSet;
|
||||
import com.yovinchen.xlcs.order.mapper.OrderSetMapper;
|
||||
import com.yovinchen.xlcs.order.service.OrderSetService;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 订单设置表 服务实现类
|
||||
* </p>
|
||||
*
|
||||
* @author yovinchen
|
||||
* @since 2023-10-12
|
||||
*/
|
||||
@Service
|
||||
public class OrderSetServiceImpl extends ServiceImpl<OrderSetMapper, OrderSet> implements OrderSetService {
|
||||
|
||||
}
|
@@ -0,0 +1,20 @@
|
||||
package com.yovinchen.xlcs.order.service.impl;
|
||||
|
||||
import com.yovinchen.xlcs.model.order.PaymentInfo;
|
||||
import com.yovinchen.xlcs.order.mapper.PaymentInfoMapper;
|
||||
import com.yovinchen.xlcs.order.service.PaymentInfoService;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 支付信息表 服务实现类
|
||||
* </p>
|
||||
*
|
||||
* @author yovinchen
|
||||
* @since 2023-10-12
|
||||
*/
|
||||
@Service
|
||||
public class PaymentInfoServiceImpl extends ServiceImpl<PaymentInfoMapper, PaymentInfo> implements PaymentInfoService {
|
||||
|
||||
}
|
@@ -0,0 +1,20 @@
|
||||
package com.yovinchen.xlcs.order.service.impl;
|
||||
|
||||
import com.yovinchen.xlcs.model.order.RefundInfo;
|
||||
import com.yovinchen.xlcs.order.mapper.RefundInfoMapper;
|
||||
import com.yovinchen.xlcs.order.service.RefundInfoService;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 退款信息表 服务实现类
|
||||
* </p>
|
||||
*
|
||||
* @author yovinchen
|
||||
* @since 2023-10-12
|
||||
*/
|
||||
@Service
|
||||
public class RefundInfoServiceImpl extends ServiceImpl<RefundInfoMapper, RefundInfo> implements RefundInfoService {
|
||||
|
||||
}
|
@@ -0,0 +1,11 @@
|
||||
server:
|
||||
port: 8209
|
||||
spring:
|
||||
application:
|
||||
name: service-order
|
||||
cloud:
|
||||
nacos:
|
||||
discovery:
|
||||
server-addr: 82.157.68.223:8848
|
||||
username: nacos
|
||||
password: nacos
|
@@ -0,0 +1,24 @@
|
||||
spring:
|
||||
cloud:
|
||||
nacos:
|
||||
config:
|
||||
namespace: dd5265c5-8290-45bc-9d07-395c14c977d3
|
||||
server-addr: 82.157.68.223:8848
|
||||
group: service
|
||||
username: nacos
|
||||
password: nacos
|
||||
enabled: true
|
||||
file-extension: yml
|
||||
extension-configs:
|
||||
- data-id: common.yml
|
||||
group: common
|
||||
refresh: true
|
||||
- data-id: service-redis.yml
|
||||
group: common
|
||||
refresh: true
|
||||
- data-id: service-rabbitmq.yml
|
||||
group: common
|
||||
refresh: true
|
||||
- data-id: service-openfeign.yml
|
||||
group: common
|
||||
refresh: true
|
Reference in New Issue
Block a user