Compare commits
4 Commits
dev_market
...
dev_orders
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e94f791d73 | ||
|
|
35e760435d | ||
|
|
bd63adf3c6 | ||
|
|
b03c51e50a |
@@ -7,23 +7,23 @@ package com.jzo2o.statemachine.core;
|
|||||||
* @date 2023/9/18 11:07
|
* @date 2023/9/18 11:07
|
||||||
*/
|
*/
|
||||||
public abstract class StateMachineSnapshot {
|
public abstract class StateMachineSnapshot {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 返回快照id
|
* 返回快照id
|
||||||
* @return
|
|
||||||
*/
|
*/
|
||||||
public abstract String getSnapshotId();
|
public abstract String getSnapshotId();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 返回快照状态
|
* 返回快照状态
|
||||||
* @return
|
|
||||||
*/
|
*/
|
||||||
public abstract Integer getSnapshotStatus();
|
public abstract Integer getSnapshotStatus();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 设置快照id
|
* 设置快照id
|
||||||
*/
|
*/
|
||||||
public abstract void setSnapshotId(String snapshotId);
|
public abstract void setSnapshotId(String snapshotId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 设置快照状态
|
* 设置快照状态
|
||||||
*/
|
*/
|
||||||
public abstract void setSnapshotStatus(Integer snapshotStatus);
|
public abstract void setSnapshotStatus(Integer snapshotStatus);
|
||||||
}
|
}
|
||||||
@@ -2,12 +2,9 @@ package com.jzo2o.statemachine.core;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 状态变量事件抽象接口
|
* 状态变量事件抽象接口
|
||||||
*
|
|
||||||
* @author itcast
|
* @author itcast
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public interface StatusChangeEvent {
|
public interface StatusChangeEvent {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 原始状态
|
* 原始状态
|
||||||
*/
|
*/
|
||||||
@@ -27,5 +24,4 @@ public interface StatusChangeEvent {
|
|||||||
* @return 返回事件代码
|
* @return 返回事件代码
|
||||||
*/
|
*/
|
||||||
String getCode();
|
String getCode();
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -6,17 +6,14 @@ package com.jzo2o.statemachine.core;
|
|||||||
* 1、功能说明:状态变更时执行的业务逻辑
|
* 1、功能说明:状态变更时执行的业务逻辑
|
||||||
* 2、接口实现类的bean名称规则为:状态机名称_状态变更事件名称
|
* 2、接口实现类的bean名称规则为:状态机名称_状态变更事件名称
|
||||||
* 例如:在实现类上添加 @Component("order_close_dispatching_order") order为状态机名称,close_dispatching_order为取消正常派单订单的事件名称
|
* 例如:在实现类上添加 @Component("order_close_dispatching_order") order为状态机名称,close_dispatching_order为取消正常派单订单的事件名称
|
||||||
*
|
|
||||||
* @author itcast
|
* @author itcast
|
||||||
*/
|
*/
|
||||||
public interface StatusChangeHandler<T extends StateMachineSnapshot> {
|
public interface StatusChangeHandler<T extends StateMachineSnapshot> {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 状态变化处理逻辑
|
* 状态变化处理逻辑
|
||||||
*
|
* @param bizId 业务id
|
||||||
* @param bizId 业务id
|
|
||||||
* @param statusChangeEventEnum 状态变更事件
|
* @param statusChangeEventEnum 状态变更事件
|
||||||
* @param bizSnapshot 快照
|
* @param bizSnapshot 快照
|
||||||
*/
|
*/
|
||||||
void handler(String bizId,StatusChangeEvent statusChangeEventEnum,T bizSnapshot);
|
void handler(String bizId, StatusChangeEvent statusChangeEventEnum, T bizSnapshot);
|
||||||
}
|
}
|
||||||
@@ -2,11 +2,9 @@ package com.jzo2o.statemachine.core;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 状态抽象接口
|
* 状态抽象接口
|
||||||
*
|
|
||||||
* @author itcast
|
* @author itcast
|
||||||
*/
|
*/
|
||||||
public interface StatusDefine {
|
public interface StatusDefine {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return 返回状态编号
|
* @return 返回状态编号
|
||||||
*/
|
*/
|
||||||
@@ -21,4 +19,4 @@ public interface StatusDefine {
|
|||||||
* @return 返回状态代码
|
* @return 返回状态代码
|
||||||
*/
|
*/
|
||||||
String getCode();
|
String getCode();
|
||||||
}
|
}
|
||||||
@@ -47,11 +47,11 @@
|
|||||||
<groupId>com.jzo2o</groupId>
|
<groupId>com.jzo2o</groupId>
|
||||||
<artifactId>jzo2o-canal-sync</artifactId>
|
<artifactId>jzo2o-canal-sync</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
<!-- <dependency>-->
|
<dependency>
|
||||||
<!-- <groupId>com.jzo2o</groupId>-->
|
<groupId>com.jzo2o</groupId>
|
||||||
<!-- <artifactId>jzo2o-statemachine</artifactId>-->
|
<artifactId>jzo2o-statemachine</artifactId>
|
||||||
<!-- <version>1.0-SNAPSHOT</version>-->
|
<version>1.0-SNAPSHOT</version>
|
||||||
<!-- </dependency>-->
|
</dependency>
|
||||||
<!--seata-->
|
<!--seata-->
|
||||||
<!-- <dependency>-->
|
<!-- <dependency>-->
|
||||||
<!-- <groupId>com.alibaba.cloud</groupId>-->
|
<!-- <groupId>com.alibaba.cloud</groupId>-->
|
||||||
|
|||||||
@@ -6,12 +6,14 @@ import org.mybatis.spring.annotation.MapperScan;
|
|||||||
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
||||||
import org.springframework.context.annotation.ComponentScan;
|
import org.springframework.context.annotation.ComponentScan;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
import org.springframework.context.annotation.Import;
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 自动导入订单相关配置
|
||||||
|
* @author JIAN
|
||||||
|
*/
|
||||||
@Configuration
|
@Configuration
|
||||||
@ComponentScan({"com.jzo2o.orders.base.service","com.jzo2o.orders.base.handler"})
|
@ComponentScan({"com.jzo2o.orders.base.service", "com.jzo2o.orders.base.handler"})
|
||||||
@MapperScan("com.jzo2o.orders.base.mapper")
|
@MapperScan("com.jzo2o.orders.base.mapper")
|
||||||
//@Import({OrderStateMachine.class})
|
|
||||||
@EnableConfigurationProperties({DispatchProperties.class, ExecutorProperties.class})
|
@EnableConfigurationProperties({DispatchProperties.class, ExecutorProperties.class})
|
||||||
public class AutoImportConfiguration {
|
public class AutoImportConfiguration {
|
||||||
}
|
}
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
package com.jzo2o.orders.base.enums;
|
package com.jzo2o.orders.base.enums;
|
||||||
|
|
||||||
|
import com.jzo2o.statemachine.core.StatusChangeEvent;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
|
||||||
@@ -8,18 +9,18 @@ import lombok.Getter;
|
|||||||
*/
|
*/
|
||||||
@Getter
|
@Getter
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
public enum OrderStatusChangeEventEnum {
|
public enum OrderStatusChangeEventEnum implements StatusChangeEvent {
|
||||||
PAYED(OrderStatusEnum.NO_PAY, OrderStatusEnum.DISPATCHING, "支付成功", "payed"),
|
PAYED(OrderStatusEnum.NO_PAY, OrderStatusEnum.DISPATCHING, "支付成功", "payed"),
|
||||||
DISPATCH(OrderStatusEnum.DISPATCHING, OrderStatusEnum.NO_SERVE, "接单/抢单成功", "dispatch"),
|
DISPATCH(OrderStatusEnum.DISPATCHING, OrderStatusEnum.NO_SERVE, "接单/抢单成功", "dispatch"),
|
||||||
START_SERVE(OrderStatusEnum.NO_SERVE, OrderStatusEnum.SERVING, "开始服务", "start_serve"),
|
START_SERVE(OrderStatusEnum.NO_SERVE, OrderStatusEnum.SERVING, "开始服务", "start_serve"),
|
||||||
COMPLETE_SERVE(OrderStatusEnum.SERVING, OrderStatusEnum.FINISHED, "完成服务", "complete_serve"),
|
COMPLETE_SERVE(OrderStatusEnum.SERVING, OrderStatusEnum.FINISHED, "完成服务", "complete_serve"),
|
||||||
// EVALUATE(OrderStatusEnum.NO_EVALUATION, OrderStatusEnum.FINISHED, "评价完成", "evaluate"),
|
EVALUATE(OrderStatusEnum.NO_EVALUATION, OrderStatusEnum.FINISHED, "评价完成", "evaluate"),
|
||||||
CANCEL(OrderStatusEnum.NO_PAY, OrderStatusEnum.CANCELED, "取消订单", "cancel"),
|
CANCEL(OrderStatusEnum.NO_PAY, OrderStatusEnum.CANCELED, "取消订单", "cancel"),
|
||||||
SERVE_PROVIDER_CANCEL(OrderStatusEnum.NO_SERVE, OrderStatusEnum.DISPATCHING, "服务人员/机构取消订单", "serve_provider_cancel"),
|
SERVE_PROVIDER_CANCEL(OrderStatusEnum.NO_SERVE, OrderStatusEnum.DISPATCHING, "服务人员/机构取消订单", "serve_provider_cancel"),
|
||||||
CLOSE_DISPATCHING_ORDER(OrderStatusEnum.DISPATCHING, OrderStatusEnum.CLOSED, "派单中订单关闭", "close_dispatching_order"),
|
CLOSE_DISPATCHING_ORDER(OrderStatusEnum.DISPATCHING, OrderStatusEnum.CLOSED, "派单中订单关闭", "close_dispatching_order"),
|
||||||
CLOSE_NO_SERVE_ORDER(OrderStatusEnum.NO_SERVE, OrderStatusEnum.CLOSED, "待服务订单关闭", "close_no_serve_order"),
|
CLOSE_NO_SERVE_ORDER(OrderStatusEnum.NO_SERVE, OrderStatusEnum.CLOSED, "待服务订单关闭", "close_no_serve_order"),
|
||||||
CLOSE_SERVING_ORDER(OrderStatusEnum.SERVING, OrderStatusEnum.CLOSED, "服务中订单关闭", "close_serving_order"),
|
CLOSE_SERVING_ORDER(OrderStatusEnum.SERVING, OrderStatusEnum.CLOSED, "服务中订单关闭", "close_serving_order"),
|
||||||
// CLOSE_NO_EVALUATION_ORDER(OrderStatusEnum.NO_EVALUATION, OrderStatusEnum.CLOSED, "待评价订单关闭", "close_no_evaluation_order"),
|
CLOSE_NO_EVALUATION_ORDER(OrderStatusEnum.NO_EVALUATION, OrderStatusEnum.CLOSED, "待评价订单关闭", "close_no_evaluation_order"),
|
||||||
CLOSE_FINISHED_ORDER(OrderStatusEnum.FINISHED, OrderStatusEnum.CLOSED, "已完成订单关闭", "close_finished_order");
|
CLOSE_FINISHED_ORDER(OrderStatusEnum.FINISHED, OrderStatusEnum.CLOSED, "已完成订单关闭", "close_finished_order");
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package com.jzo2o.orders.base.enums;
|
package com.jzo2o.orders.base.enums;
|
||||||
|
|
||||||
|
import com.jzo2o.statemachine.core.StatusDefine;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
|
||||||
@@ -8,12 +9,12 @@ import lombok.Getter;
|
|||||||
*/
|
*/
|
||||||
@Getter
|
@Getter
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
public enum OrderStatusEnum {
|
public enum OrderStatusEnum implements StatusDefine {
|
||||||
NO_PAY(0, "待支付", "NO_PAY"),
|
NO_PAY(0, "待支付", "NO_PAY"),
|
||||||
DISPATCHING(100, "派单中", "DISPATCHING"),
|
DISPATCHING(100, "派单中", "DISPATCHING"),
|
||||||
NO_SERVE(200, "待服务", "NO_SERVE"),
|
NO_SERVE(200, "待服务", "NO_SERVE"),
|
||||||
SERVING(300, "服务中", "SERVING"),
|
SERVING(300, "服务中", "SERVING"),
|
||||||
// NO_EVALUATION(400, "待评价", "NO_EVALUATION"),
|
NO_EVALUATION(400, "待评价", "NO_EVALUATION"),
|
||||||
FINISHED(500, "已完成", "FINISHED"),
|
FINISHED(500, "已完成", "FINISHED"),
|
||||||
CANCELED(600, "已取消", "CANCELED"),
|
CANCELED(600, "已取消", "CANCELED"),
|
||||||
CLOSED(700, "已关闭", "CLOSED");
|
CLOSED(700, "已关闭", "CLOSED");
|
||||||
@@ -36,4 +37,4 @@ public enum OrderStatusEnum {
|
|||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
package com.jzo2o.orders.base.handler;
|
||||||
|
|
||||||
|
import com.jzo2o.orders.base.enums.OrderStatusEnum;
|
||||||
|
import com.jzo2o.orders.base.model.dto.OrderSnapshotDTO;
|
||||||
|
import com.jzo2o.statemachine.AbstractStateMachine;
|
||||||
|
import com.jzo2o.statemachine.core.StatusDefine;
|
||||||
|
import com.jzo2o.statemachine.persist.StateMachinePersister;
|
||||||
|
import com.jzo2o.statemachine.snapshot.BizSnapshotService;
|
||||||
|
import org.springframework.data.redis.core.RedisTemplate;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 订单状态机
|
||||||
|
* @author JIAN
|
||||||
|
*/
|
||||||
|
@Component
|
||||||
|
public class OrderStateMachine extends AbstractStateMachine<OrderSnapshotDTO> {
|
||||||
|
/**
|
||||||
|
* 构造方法
|
||||||
|
* @param stateMachinePersister 状态机持久化程序
|
||||||
|
* @param bizSnapshotService 业务快照服务层程序
|
||||||
|
* @param redisTemplate redis处理程序
|
||||||
|
*/
|
||||||
|
public OrderStateMachine(StateMachinePersister stateMachinePersister, BizSnapshotService bizSnapshotService, RedisTemplate redisTemplate) {
|
||||||
|
super(stateMachinePersister, bizSnapshotService, redisTemplate);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getName() {
|
||||||
|
return "order";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void postProcessor(OrderSnapshotDTO bizSnapshot) {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public StatusDefine getInitState() {
|
||||||
|
return OrderStatusEnum.NO_PAY;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,43 @@
|
|||||||
|
package com.jzo2o.orders.base.handler.actions;
|
||||||
|
|
||||||
|
import cn.hutool.db.DbRuntimeException;
|
||||||
|
import com.jzo2o.orders.base.enums.OrderStatusEnum;
|
||||||
|
import com.jzo2o.orders.base.model.dto.OrderSnapshotDTO;
|
||||||
|
import com.jzo2o.orders.base.model.dto.OrderUpdateStatusDTO;
|
||||||
|
import com.jzo2o.orders.base.service.IOrdersCommonService;
|
||||||
|
import com.jzo2o.statemachine.core.StatusChangeEvent;
|
||||||
|
import com.jzo2o.statemachine.core.StatusChangeHandler;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 未支付时订单取消处理器
|
||||||
|
* @author itcast
|
||||||
|
* @create 2023/8/17 18:08
|
||||||
|
**/
|
||||||
|
@Slf4j
|
||||||
|
@Component("order_cancel")
|
||||||
|
public class OrderCancelHandler implements StatusChangeHandler<OrderSnapshotDTO> {
|
||||||
|
@Resource
|
||||||
|
private IOrdersCommonService ordersService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 订单评价处理逻辑
|
||||||
|
* @param bizId 业务id
|
||||||
|
* @param bizSnapshot 快照
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void handler(String bizId, StatusChangeEvent statusChangeEventEnum, OrderSnapshotDTO bizSnapshot) {
|
||||||
|
log.info("订单取消事件处理逻辑开始, 订单号: {}", bizId);
|
||||||
|
// 修改订单状态
|
||||||
|
if (!ordersService.updateStatus(OrderUpdateStatusDTO.builder()
|
||||||
|
.id(Long.valueOf(bizId))
|
||||||
|
.originStatus(OrderStatusEnum.NO_PAY.getStatus())
|
||||||
|
.targetStatus(OrderStatusEnum.CANCELED.getStatus())
|
||||||
|
.build())) {
|
||||||
|
throw new DbRuntimeException("订单取消事件处理失败");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,46 @@
|
|||||||
|
package com.jzo2o.orders.base.handler.actions;
|
||||||
|
|
||||||
|
import cn.hutool.db.DbRuntimeException;
|
||||||
|
import com.jzo2o.orders.base.enums.OrderRefundStatusEnum;
|
||||||
|
import com.jzo2o.orders.base.enums.OrderStatusEnum;
|
||||||
|
import com.jzo2o.orders.base.model.dto.OrderSnapshotDTO;
|
||||||
|
import com.jzo2o.orders.base.model.dto.OrderUpdateStatusDTO;
|
||||||
|
import com.jzo2o.orders.base.service.IOrdersCommonService;
|
||||||
|
import com.jzo2o.statemachine.core.StatusChangeEvent;
|
||||||
|
import com.jzo2o.statemachine.core.StatusChangeHandler;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 派单中订单关闭处理器
|
||||||
|
* @author itcast
|
||||||
|
* @create 2023/8/17 18:08
|
||||||
|
**/
|
||||||
|
@Slf4j
|
||||||
|
@Component("order_close_dispatching_order")
|
||||||
|
public class OrderCloseDispatchingOrderHandler implements StatusChangeHandler<OrderSnapshotDTO> {
|
||||||
|
@Resource
|
||||||
|
private IOrdersCommonService ordersService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 派单中订单关闭处理逻辑
|
||||||
|
* @param bizId 业务id
|
||||||
|
* @param bizSnapshot 快照
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void handler(String bizId, StatusChangeEvent statusChangeEventEnum, OrderSnapshotDTO bizSnapshot) {
|
||||||
|
log.info("派单中订单关闭事件处理逻辑开始, 订单号: {}", bizId);
|
||||||
|
// 修改订单状态
|
||||||
|
if (!ordersService.updateStatus(OrderUpdateStatusDTO.builder()
|
||||||
|
.id(Long.valueOf(bizId))
|
||||||
|
.originStatus(OrderStatusEnum.DISPATCHING.getStatus())
|
||||||
|
.targetStatus(OrderStatusEnum.CLOSED.getStatus())
|
||||||
|
// 退款状态为退款中
|
||||||
|
.refundStatus(OrderRefundStatusEnum.REFUNDING.getStatus())
|
||||||
|
.build())) {
|
||||||
|
throw new DbRuntimeException("派单中订单关闭事件处理失败");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,46 @@
|
|||||||
|
package com.jzo2o.orders.base.handler.actions;
|
||||||
|
|
||||||
|
import cn.hutool.db.DbRuntimeException;
|
||||||
|
import com.jzo2o.orders.base.enums.OrderRefundStatusEnum;
|
||||||
|
import com.jzo2o.orders.base.enums.OrderStatusEnum;
|
||||||
|
import com.jzo2o.orders.base.model.dto.OrderSnapshotDTO;
|
||||||
|
import com.jzo2o.orders.base.model.dto.OrderUpdateStatusDTO;
|
||||||
|
import com.jzo2o.orders.base.service.IOrdersCommonService;
|
||||||
|
import com.jzo2o.statemachine.core.StatusChangeEvent;
|
||||||
|
import com.jzo2o.statemachine.core.StatusChangeHandler;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 已完成订单关闭处理器
|
||||||
|
* @author itcast
|
||||||
|
* @create 2023/8/17 18:08
|
||||||
|
**/
|
||||||
|
@Slf4j
|
||||||
|
@Component("order_close_finished_order")
|
||||||
|
public class OrderCloseFinishedOrderHandler implements StatusChangeHandler<OrderSnapshotDTO> {
|
||||||
|
@Resource
|
||||||
|
private IOrdersCommonService ordersService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 已完成订单关闭处理逻辑
|
||||||
|
* @param bizId 业务id
|
||||||
|
* @param bizSnapshot 快照
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void handler(String bizId, StatusChangeEvent statusChangeEventEnum, OrderSnapshotDTO bizSnapshot) {
|
||||||
|
log.info("已完成订单关闭事件处理逻辑开始, 订单号: {}", bizId);
|
||||||
|
// 修改订单状态
|
||||||
|
if (!ordersService.updateStatus(OrderUpdateStatusDTO.builder()
|
||||||
|
.id(Long.valueOf(bizId))
|
||||||
|
.originStatus(OrderStatusEnum.FINISHED.getStatus())
|
||||||
|
.targetStatus(OrderStatusEnum.CLOSED.getStatus())
|
||||||
|
// 退款状态为退款中
|
||||||
|
.refundStatus(OrderRefundStatusEnum.REFUNDING.getStatus())
|
||||||
|
.build())) {
|
||||||
|
throw new DbRuntimeException("已完成订单关闭事件处理失败");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,46 @@
|
|||||||
|
package com.jzo2o.orders.base.handler.actions;
|
||||||
|
|
||||||
|
import cn.hutool.db.DbRuntimeException;
|
||||||
|
import com.jzo2o.orders.base.enums.OrderRefundStatusEnum;
|
||||||
|
import com.jzo2o.orders.base.enums.OrderStatusEnum;
|
||||||
|
import com.jzo2o.orders.base.model.dto.OrderSnapshotDTO;
|
||||||
|
import com.jzo2o.orders.base.model.dto.OrderUpdateStatusDTO;
|
||||||
|
import com.jzo2o.orders.base.service.IOrdersCommonService;
|
||||||
|
import com.jzo2o.statemachine.core.StatusChangeEvent;
|
||||||
|
import com.jzo2o.statemachine.core.StatusChangeHandler;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 待服务订单关闭处理器
|
||||||
|
* @author itcast
|
||||||
|
* @create 2023/8/17 18:08
|
||||||
|
**/
|
||||||
|
@Slf4j
|
||||||
|
@Component("order_close_no_serve_order")
|
||||||
|
public class OrderCloseNoServeOrderHandler implements StatusChangeHandler<OrderSnapshotDTO> {
|
||||||
|
@Resource
|
||||||
|
private IOrdersCommonService ordersService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 待服务订单关闭处理逻辑
|
||||||
|
* @param bizId 业务id
|
||||||
|
* @param bizSnapshot 快照
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void handler(String bizId, StatusChangeEvent statusChangeEventEnum, OrderSnapshotDTO bizSnapshot) {
|
||||||
|
log.info("待服务订单关闭事件处理逻辑开始, 订单号: {}", bizId);
|
||||||
|
// 修改订单状态
|
||||||
|
if (!ordersService.updateStatus(OrderUpdateStatusDTO.builder()
|
||||||
|
.id(Long.valueOf(bizId))
|
||||||
|
.originStatus(OrderStatusEnum.NO_SERVE.getStatus())
|
||||||
|
.targetStatus(OrderStatusEnum.CLOSED.getStatus())
|
||||||
|
// 退款状态为退款中
|
||||||
|
.refundStatus(OrderRefundStatusEnum.REFUNDING.getStatus())
|
||||||
|
.build())) {
|
||||||
|
throw new DbRuntimeException("待服务订单关闭事件处理失败");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,46 @@
|
|||||||
|
package com.jzo2o.orders.base.handler.actions;
|
||||||
|
|
||||||
|
import cn.hutool.db.DbRuntimeException;
|
||||||
|
import com.jzo2o.orders.base.enums.OrderRefundStatusEnum;
|
||||||
|
import com.jzo2o.orders.base.enums.OrderStatusEnum;
|
||||||
|
import com.jzo2o.orders.base.model.dto.OrderSnapshotDTO;
|
||||||
|
import com.jzo2o.orders.base.model.dto.OrderUpdateStatusDTO;
|
||||||
|
import com.jzo2o.orders.base.service.IOrdersCommonService;
|
||||||
|
import com.jzo2o.statemachine.core.StatusChangeEvent;
|
||||||
|
import com.jzo2o.statemachine.core.StatusChangeHandler;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 服务中订单关闭处理器
|
||||||
|
* @author itcast
|
||||||
|
* @create 2023/8/17 18:08
|
||||||
|
**/
|
||||||
|
@Slf4j
|
||||||
|
@Component("order_close_serving_order")
|
||||||
|
public class OrderCloseServingOrderHandler implements StatusChangeHandler<OrderSnapshotDTO> {
|
||||||
|
@Resource
|
||||||
|
private IOrdersCommonService ordersService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 服务中订单关闭处理逻辑
|
||||||
|
* @param bizId 业务id
|
||||||
|
* @param bizSnapshot 快照
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void handler(String bizId, StatusChangeEvent statusChangeEventEnum, OrderSnapshotDTO bizSnapshot) {
|
||||||
|
log.info("服务中订单关闭事件处理逻辑开始, 订单号: {}", bizId);
|
||||||
|
// 修改订单状态
|
||||||
|
if (!ordersService.updateStatus(OrderUpdateStatusDTO.builder()
|
||||||
|
.id(Long.valueOf(bizId))
|
||||||
|
.originStatus(OrderStatusEnum.SERVING.getStatus())
|
||||||
|
.targetStatus(OrderStatusEnum.CLOSED.getStatus())
|
||||||
|
// 退款状态为退款中
|
||||||
|
.refundStatus(OrderRefundStatusEnum.REFUNDING.getStatus())
|
||||||
|
.build())) {
|
||||||
|
throw new DbRuntimeException("服务中订单关闭事件处理失败");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
package com.jzo2o.orders.base.handler.actions;
|
||||||
|
|
||||||
|
import cn.hutool.db.DbRuntimeException;
|
||||||
|
import com.jzo2o.orders.base.enums.OrderStatusEnum;
|
||||||
|
import com.jzo2o.orders.base.model.dto.OrderSnapshotDTO;
|
||||||
|
import com.jzo2o.orders.base.model.dto.OrderUpdateStatusDTO;
|
||||||
|
import com.jzo2o.orders.base.service.IOrdersCommonService;
|
||||||
|
import com.jzo2o.statemachine.core.StatusChangeEvent;
|
||||||
|
import com.jzo2o.statemachine.core.StatusChangeHandler;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 订单完成服务处理器
|
||||||
|
* @author itcast
|
||||||
|
* @create 2023/8/17 18:08
|
||||||
|
**/
|
||||||
|
@Slf4j
|
||||||
|
@Component("order_complete_serve")
|
||||||
|
public class OrderCompleteServeHandler implements StatusChangeHandler<OrderSnapshotDTO> {
|
||||||
|
@Resource
|
||||||
|
private IOrdersCommonService ordersService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 订单完成服务处理逻辑
|
||||||
|
* @param bizId 业务id
|
||||||
|
* @param bizSnapshot 快照
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void handler(String bizId, StatusChangeEvent statusChangeEventEnum, OrderSnapshotDTO bizSnapshot) {
|
||||||
|
log.info("订单完成服务事件处理逻辑开始, 订单号: {}", bizId);
|
||||||
|
// 修改订单状态
|
||||||
|
if (!ordersService.updateStatus(OrderUpdateStatusDTO.builder()
|
||||||
|
.id(Long.valueOf(bizId))
|
||||||
|
.originStatus(OrderStatusEnum.SERVING.getStatus())
|
||||||
|
.targetStatus(OrderStatusEnum.FINISHED.getStatus())
|
||||||
|
.realServeEndTime(bizSnapshot.getRealServeEndTime())
|
||||||
|
.build())) {
|
||||||
|
throw new DbRuntimeException("订单完成服务事件处理失败");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,43 @@
|
|||||||
|
package com.jzo2o.orders.base.handler.actions;
|
||||||
|
|
||||||
|
import cn.hutool.db.DbRuntimeException;
|
||||||
|
import com.jzo2o.orders.base.enums.OrderStatusEnum;
|
||||||
|
import com.jzo2o.orders.base.model.dto.OrderSnapshotDTO;
|
||||||
|
import com.jzo2o.orders.base.model.dto.OrderUpdateStatusDTO;
|
||||||
|
import com.jzo2o.orders.base.service.IOrdersCommonService;
|
||||||
|
import com.jzo2o.statemachine.core.StatusChangeEvent;
|
||||||
|
import com.jzo2o.statemachine.core.StatusChangeHandler;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 订单派送处理器
|
||||||
|
* @author itcast
|
||||||
|
* @create 2023/8/17 18:08
|
||||||
|
**/
|
||||||
|
@Slf4j
|
||||||
|
@Component("order_dispatch")
|
||||||
|
public class OrderDispatchHandler implements StatusChangeHandler<OrderSnapshotDTO> {
|
||||||
|
@Resource
|
||||||
|
private IOrdersCommonService ordersService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 订单派送处理逻辑
|
||||||
|
* @param bizId 业务id
|
||||||
|
* @param bizSnapshot 快照
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void handler(String bizId, StatusChangeEvent statusChangeEventEnum, OrderSnapshotDTO bizSnapshot) {
|
||||||
|
log.info("派送事件处理逻辑开始, 订单号: {}", bizId);
|
||||||
|
// 修改订单状态
|
||||||
|
if (!ordersService.updateStatus(OrderUpdateStatusDTO.builder()
|
||||||
|
.id(Long.valueOf(bizId))
|
||||||
|
.originStatus(OrderStatusEnum.DISPATCHING.getStatus())
|
||||||
|
.targetStatus(OrderStatusEnum.NO_SERVE.getStatus())
|
||||||
|
.build())) {
|
||||||
|
throw new DbRuntimeException("派送事件处理失败");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,50 @@
|
|||||||
|
package com.jzo2o.orders.base.handler.actions;
|
||||||
|
|
||||||
|
import cn.hutool.db.DbRuntimeException;
|
||||||
|
import com.jzo2o.orders.base.enums.OrderPayStatusEnum;
|
||||||
|
import com.jzo2o.orders.base.enums.OrderStatusEnum;
|
||||||
|
import com.jzo2o.orders.base.model.dto.OrderSnapshotDTO;
|
||||||
|
import com.jzo2o.orders.base.model.dto.OrderUpdateStatusDTO;
|
||||||
|
import com.jzo2o.orders.base.service.IOrdersCommonService;
|
||||||
|
import com.jzo2o.statemachine.core.StatusChangeEvent;
|
||||||
|
import com.jzo2o.statemachine.core.StatusChangeHandler;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 订单支付成功处理器
|
||||||
|
* @author itcast
|
||||||
|
* @create 2023/8/17 18:08
|
||||||
|
**/
|
||||||
|
@Slf4j
|
||||||
|
@Component("order_payed")
|
||||||
|
public class OrderPayedHandler implements StatusChangeHandler<OrderSnapshotDTO> {
|
||||||
|
@Resource
|
||||||
|
private IOrdersCommonService ordersService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 订单支付处理逻辑
|
||||||
|
* @param bizId 业务id
|
||||||
|
* @param statusChangeEventEnum 状态变更事件
|
||||||
|
* @param bizSnapshot 快照
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void handler(String bizId, StatusChangeEvent statusChangeEventEnum, OrderSnapshotDTO bizSnapshot) {
|
||||||
|
log.info("支付事件处理逻辑开始, 订单号: {}", bizId);
|
||||||
|
// 修改订单状态和支付状态
|
||||||
|
if (!ordersService.updateStatus(OrderUpdateStatusDTO.builder()
|
||||||
|
.id(Long.valueOf(bizId))
|
||||||
|
.originStatus(OrderStatusEnum.NO_PAY.getStatus())
|
||||||
|
.targetStatus(OrderStatusEnum.DISPATCHING.getStatus())
|
||||||
|
.payTime(bizSnapshot.getPayTime())
|
||||||
|
.payStatus(OrderPayStatusEnum.PAY_SUCCESS.getStatus())
|
||||||
|
.tradingOrderNo(bizSnapshot.getTradingOrderNo())
|
||||||
|
.transactionId(bizSnapshot.getThirdOrderId())
|
||||||
|
.tradingChannel(bizSnapshot.getTradingChannel())
|
||||||
|
.build())) {
|
||||||
|
throw new DbRuntimeException("支付事件处理失败");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,43 @@
|
|||||||
|
package com.jzo2o.orders.base.handler.actions;
|
||||||
|
|
||||||
|
import cn.hutool.db.DbRuntimeException;
|
||||||
|
import com.jzo2o.orders.base.enums.OrderStatusEnum;
|
||||||
|
import com.jzo2o.orders.base.model.dto.OrderSnapshotDTO;
|
||||||
|
import com.jzo2o.orders.base.model.dto.OrderUpdateStatusDTO;
|
||||||
|
import com.jzo2o.orders.base.service.IOrdersCommonService;
|
||||||
|
import com.jzo2o.statemachine.core.StatusChangeEvent;
|
||||||
|
import com.jzo2o.statemachine.core.StatusChangeHandler;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 服务人员/机构取消订单处理器
|
||||||
|
* @author itcast
|
||||||
|
* @create 2023/8/17 18:08
|
||||||
|
**/
|
||||||
|
@Slf4j
|
||||||
|
@Component("order_serve_provider_cancel")
|
||||||
|
public class OrderServeProviderCancelHandler implements StatusChangeHandler<OrderSnapshotDTO> {
|
||||||
|
@Resource
|
||||||
|
private IOrdersCommonService ordersService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 服务人员/机构取消订单处理逻辑
|
||||||
|
* @param bizId 业务id
|
||||||
|
* @param bizSnapshot 快照
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void handler(String bizId, StatusChangeEvent statusChangeEventEnum, OrderSnapshotDTO bizSnapshot) {
|
||||||
|
log.info("服务人员/机构取消订单事件处理逻辑开始, 订单号: {}", bizId);
|
||||||
|
// 修改订单状态
|
||||||
|
if (!ordersService.updateStatus(OrderUpdateStatusDTO.builder()
|
||||||
|
.id(Long.valueOf(bizId))
|
||||||
|
.originStatus(OrderStatusEnum.NO_SERVE.getStatus())
|
||||||
|
.targetStatus(OrderStatusEnum.DISPATCHING.getStatus())
|
||||||
|
.build())) {
|
||||||
|
throw new DbRuntimeException("服务人员/机构取消订单事件处理失败");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,43 @@
|
|||||||
|
package com.jzo2o.orders.base.handler.actions;
|
||||||
|
|
||||||
|
import cn.hutool.db.DbRuntimeException;
|
||||||
|
import com.jzo2o.orders.base.enums.OrderStatusEnum;
|
||||||
|
import com.jzo2o.orders.base.model.dto.OrderSnapshotDTO;
|
||||||
|
import com.jzo2o.orders.base.model.dto.OrderUpdateStatusDTO;
|
||||||
|
import com.jzo2o.orders.base.service.IOrdersCommonService;
|
||||||
|
import com.jzo2o.statemachine.core.StatusChangeEvent;
|
||||||
|
import com.jzo2o.statemachine.core.StatusChangeHandler;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 订单开始服务处理器
|
||||||
|
* @author itcast
|
||||||
|
* @create 2023/8/17 18:08
|
||||||
|
**/
|
||||||
|
@Slf4j
|
||||||
|
@Component("order_start_serve")
|
||||||
|
public class OrderStartServeHandler implements StatusChangeHandler<OrderSnapshotDTO> {
|
||||||
|
@Resource
|
||||||
|
private IOrdersCommonService ordersService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 订单开始服务处理逻辑
|
||||||
|
* @param bizId 业务id
|
||||||
|
* @param bizSnapshot 快照
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void handler(String bizId, StatusChangeEvent statusChangeEventEnum, OrderSnapshotDTO bizSnapshot) {
|
||||||
|
log.info("订单开始服务事件处理逻辑开始, 订单号: {}", bizId);
|
||||||
|
// 修改订单状态
|
||||||
|
if (!ordersService.updateStatus(OrderUpdateStatusDTO.builder()
|
||||||
|
.id(Long.valueOf(bizId))
|
||||||
|
.originStatus(OrderStatusEnum.NO_SERVE.getStatus())
|
||||||
|
.targetStatus(OrderStatusEnum.SERVING.getStatus())
|
||||||
|
.build())) {
|
||||||
|
throw new DbRuntimeException("订单开始服务事件处理失败");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,12 +1,10 @@
|
|||||||
package com.jzo2o.orders.base.mapper;
|
package com.jzo2o.orders.base.mapper;
|
||||||
|
|
||||||
import com.jzo2o.orders.base.model.domain.Orders;
|
|
||||||
import com.jzo2o.orders.base.model.dto.OrderUpdateStatusDTO;
|
|
||||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
|
import com.jzo2o.orders.base.model.domain.Orders;
|
||||||
import org.apache.ibatis.annotations.Param;
|
import org.apache.ibatis.annotations.Param;
|
||||||
import org.apache.ibatis.annotations.Update;
|
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>
|
* <p>
|
||||||
@@ -17,6 +15,10 @@ import java.time.LocalDateTime;
|
|||||||
* @since 2023-08-02
|
* @since 2023-08-02
|
||||||
*/
|
*/
|
||||||
public interface OrdersMapper extends BaseMapper<Orders> {
|
public interface OrdersMapper extends BaseMapper<Orders> {
|
||||||
|
/**
|
||||||
|
* 用户端滚动查询使用
|
||||||
}
|
*/
|
||||||
|
List<Long> selectOrderIdList(@Param("currentUserId") Long currentUserId,
|
||||||
|
@Param("ordersStatus") Integer ordersStatus,
|
||||||
|
@Param("sortBy") Long sortBy);
|
||||||
|
}
|
||||||
@@ -140,6 +140,11 @@ public class Orders implements Serializable {
|
|||||||
*/
|
*/
|
||||||
private LocalDateTime serveStartTime;
|
private LocalDateTime serveStartTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 服务实际结束时间
|
||||||
|
*/
|
||||||
|
private LocalDateTime realServeEndTime;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 经度
|
* 经度
|
||||||
*/
|
*/
|
||||||
@@ -160,6 +165,11 @@ public class Orders implements Serializable {
|
|||||||
*/
|
*/
|
||||||
private LocalDateTime evaluationTime;
|
private LocalDateTime evaluationTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 评价状态
|
||||||
|
*/
|
||||||
|
private Integer evaluationStatus;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 用户端是否展示,1:展示,0:隐藏
|
* 用户端是否展示,1:展示,0:隐藏
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -1,25 +1,22 @@
|
|||||||
package com.jzo2o.orders.base.model.dto;
|
package com.jzo2o.orders.base.model.dto;
|
||||||
|
|
||||||
//import com.jzo2o.statemachine.core.StateMachineSnapshot;
|
import com.jzo2o.statemachine.core.StateMachineSnapshot;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.*;
|
||||||
import lombok.Builder;
|
|
||||||
import lombok.Data;
|
|
||||||
import lombok.NoArgsConstructor;
|
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 订单快照
|
* 订单快照
|
||||||
*
|
|
||||||
* @author itcast
|
* @author itcast
|
||||||
* @create 2023/8/19 10:30
|
* @create 2023/8/19 10:30
|
||||||
**/
|
**/
|
||||||
@Data
|
@Data
|
||||||
@Builder
|
@Builder
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
@NoArgsConstructor
|
@NoArgsConstructor
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
public class OrderSnapshotDTO {
|
public class OrderSnapshotDTO extends StateMachineSnapshot {
|
||||||
/**
|
/**
|
||||||
* 订单id
|
* 订单id
|
||||||
*/
|
*/
|
||||||
@@ -171,7 +168,6 @@ public class OrderSnapshotDTO {
|
|||||||
private Long refundNo;
|
private Long refundNo;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 支付渠道【支付宝、微信、现金、免单挂账】
|
* 支付渠道【支付宝、微信、现金、免单挂账】
|
||||||
*/
|
*/
|
||||||
@@ -224,24 +220,23 @@ public class OrderSnapshotDTO {
|
|||||||
*/
|
*/
|
||||||
private Integer evaluationStatus;
|
private Integer evaluationStatus;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getSnapshotId() {
|
||||||
|
return String.valueOf(id);
|
||||||
|
}
|
||||||
|
|
||||||
// @Override
|
@Override
|
||||||
// public String getSnapshotId() {
|
public Integer getSnapshotStatus() {
|
||||||
// return String.valueOf(id);
|
return ordersStatus;
|
||||||
// }
|
}
|
||||||
//
|
|
||||||
// @Override
|
@Override
|
||||||
// public Integer getSnapshotStatus() {
|
public void setSnapshotId(String snapshotId) {
|
||||||
// return ordersStatus;
|
this.id = Long.parseLong(snapshotId);
|
||||||
// }
|
}
|
||||||
//
|
|
||||||
// @Override
|
@Override
|
||||||
// public void setSnapshotId(String snapshotId) {
|
public void setSnapshotStatus(Integer snapshotStatus) {
|
||||||
// this.id = Long.parseLong(snapshotId);
|
this.ordersStatus = snapshotStatus;
|
||||||
// }
|
}
|
||||||
//
|
}
|
||||||
// @Override
|
|
||||||
// public void setSnapshotStatus(Integer snapshotStatus) {
|
|
||||||
// this.ordersStatus = snapshotStatus;
|
|
||||||
// }
|
|
||||||
}
|
|
||||||
@@ -33,6 +33,8 @@ public class OrdersCommonServiceImpl extends ServiceImpl<OrdersMapper, Orders> i
|
|||||||
.set(ObjectUtil.isNotNull(orderUpdateStatusReqDTO.getRefundStatus()), Orders::getRefundStatus, orderUpdateStatusReqDTO.getRefundStatus())
|
.set(ObjectUtil.isNotNull(orderUpdateStatusReqDTO.getRefundStatus()), Orders::getRefundStatus, orderUpdateStatusReqDTO.getRefundStatus())
|
||||||
.set(ObjectUtil.isNotNull(orderUpdateStatusReqDTO.getRefundNo()), Orders::getRefundNo, orderUpdateStatusReqDTO.getRefundNo())
|
.set(ObjectUtil.isNotNull(orderUpdateStatusReqDTO.getRefundNo()), Orders::getRefundNo, orderUpdateStatusReqDTO.getRefundNo())
|
||||||
.set(ObjectUtil.isNotNull(orderUpdateStatusReqDTO.getRefundId()), Orders::getRefundId, orderUpdateStatusReqDTO.getRefundId())
|
.set(ObjectUtil.isNotNull(orderUpdateStatusReqDTO.getRefundId()), Orders::getRefundId, orderUpdateStatusReqDTO.getRefundId())
|
||||||
|
.set(ObjectUtil.isNotNull(orderUpdateStatusReqDTO.getRealServeEndTime()), Orders::getRealServeEndTime, orderUpdateStatusReqDTO.getRealServeEndTime())
|
||||||
|
.set(ObjectUtil.isNotNull(orderUpdateStatusReqDTO.getEvaluationStatus()), Orders::getEvaluationStatus, orderUpdateStatusReqDTO.getEvaluationStatus())
|
||||||
.update();
|
.update();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,5 +1,18 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?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">
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
<mapper namespace="com.jzo2o.orders.base.mapper.OrdersMapper">
|
<mapper namespace="com.jzo2o.orders.base.mapper.OrdersMapper">
|
||||||
|
<select id="selectOrderIdList" resultType="java.lang.Long">
|
||||||
</mapper>
|
select id from orders
|
||||||
|
<where>
|
||||||
|
<if test="ordersStatus != null">
|
||||||
|
orders_status = #{ordersStatus}
|
||||||
|
</if>
|
||||||
|
and user_id = #{currentUserId}
|
||||||
|
and display = 1
|
||||||
|
<if test="sortBy != null">
|
||||||
|
and sort_by < #{sortBy}
|
||||||
|
</if>
|
||||||
|
</where>
|
||||||
|
LIMIT 10
|
||||||
|
</select>
|
||||||
|
</mapper>
|
||||||
@@ -1,20 +1,13 @@
|
|||||||
package com.jzo2o.orders.manager.controller.operation;
|
package com.jzo2o.orders.manager.controller.operation;
|
||||||
|
|
||||||
import cn.hutool.core.bean.BeanUtil;
|
|
||||||
import com.jzo2o.api.orders.dto.request.OrderCancelReqDTO;
|
|
||||||
import com.jzo2o.api.orders.dto.response.OrderSimpleResDTO;
|
import com.jzo2o.api.orders.dto.response.OrderSimpleResDTO;
|
||||||
import com.jzo2o.common.model.CurrentUserInfo;
|
|
||||||
import com.jzo2o.common.model.PageResult;
|
import com.jzo2o.common.model.PageResult;
|
||||||
import com.jzo2o.mvc.utils.UserContext;
|
|
||||||
import com.jzo2o.orders.manager.model.dto.request.OrderPageQueryReqDTO;
|
import com.jzo2o.orders.manager.model.dto.request.OrderPageQueryReqDTO;
|
||||||
import com.jzo2o.orders.manager.model.dto.OrderCancelDTO;
|
|
||||||
import com.jzo2o.orders.manager.model.dto.response.OperationOrdersDetailResDTO;
|
|
||||||
import com.jzo2o.orders.manager.service.IOrdersManagerService;
|
import com.jzo2o.orders.manager.service.IOrdersManagerService;
|
||||||
import io.swagger.annotations.Api;
|
import io.swagger.annotations.Api;
|
||||||
import io.swagger.annotations.ApiImplicitParam;
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
import io.swagger.annotations.ApiImplicitParams;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
import io.swagger.annotations.ApiOperation;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
import org.springframework.web.bind.annotation.*;
|
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
|
|
||||||
@@ -25,6 +18,12 @@ import javax.annotation.Resource;
|
|||||||
@Api(tags = "运营端-订单相关接口")
|
@Api(tags = "运营端-订单相关接口")
|
||||||
@RequestMapping("/operation/orders")
|
@RequestMapping("/operation/orders")
|
||||||
public class OperationOrdersController {
|
public class OperationOrdersController {
|
||||||
|
@Resource
|
||||||
|
private IOrdersManagerService ordersManagerService;
|
||||||
|
|
||||||
|
@GetMapping("/page")
|
||||||
|
public PageResult<OrderSimpleResDTO> operationQueryList(OrderPageQueryReqDTO orderPageQueryReqDTO) {
|
||||||
|
return ordersManagerService.operationQueryList(orderPageQueryReqDTO);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -3,14 +3,16 @@ package com.jzo2o.orders.manager.listener;
|
|||||||
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSON;
|
||||||
import com.jzo2o.api.trade.enums.TradingStateEnum;
|
import com.jzo2o.api.trade.enums.TradingStateEnum;
|
||||||
import com.jzo2o.common.constants.MqConstants;
|
import com.jzo2o.common.constants.MqConstants;
|
||||||
import com.jzo2o.common.expcetions.DBException;
|
|
||||||
import com.jzo2o.common.model.msg.TradeStatusMsg;
|
import com.jzo2o.common.model.msg.TradeStatusMsg;
|
||||||
|
import com.jzo2o.common.utils.BeanUtils;
|
||||||
import com.jzo2o.common.utils.CollUtils;
|
import com.jzo2o.common.utils.CollUtils;
|
||||||
import com.jzo2o.orders.base.enums.OrderPayStatusEnum;
|
import com.jzo2o.orders.base.enums.OrderPayStatusEnum;
|
||||||
|
import com.jzo2o.orders.base.enums.OrderStatusChangeEventEnum;
|
||||||
import com.jzo2o.orders.base.enums.OrderStatusEnum;
|
import com.jzo2o.orders.base.enums.OrderStatusEnum;
|
||||||
import com.jzo2o.orders.base.model.dto.OrderUpdateStatusDTO;
|
import com.jzo2o.orders.base.handler.OrderStateMachine;
|
||||||
import com.jzo2o.orders.base.service.IOrdersCommonService;
|
import com.jzo2o.orders.base.model.dto.OrderSnapshotDTO;
|
||||||
import com.jzo2o.orders.manager.service.IOrdersCreateService;
|
import com.jzo2o.orders.manager.service.IOrdersCreateService;
|
||||||
|
import com.jzo2o.orders.manager.service.IOrdersManagerService;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.amqp.core.ExchangeTypes;
|
import org.springframework.amqp.core.ExchangeTypes;
|
||||||
import org.springframework.amqp.rabbit.annotation.Exchange;
|
import org.springframework.amqp.rabbit.annotation.Exchange;
|
||||||
@@ -32,13 +34,12 @@ import java.util.stream.Collectors;
|
|||||||
@Slf4j
|
@Slf4j
|
||||||
@Component
|
@Component
|
||||||
public class TradeStatusListener {
|
public class TradeStatusListener {
|
||||||
@Resource
|
|
||||||
private IOrdersCreateService ordersCreateService;
|
|
||||||
@Resource
|
|
||||||
private IOrdersCommonService ordersCommonService;
|
|
||||||
@Resource
|
@Resource
|
||||||
private TransactionTemplate transactionTemplate;
|
private TransactionTemplate transactionTemplate;
|
||||||
|
@Resource
|
||||||
|
private OrderStateMachine orderStateMachine;
|
||||||
|
@Resource
|
||||||
|
private IOrdersManagerService ordersManagerService;
|
||||||
|
|
||||||
@RabbitListener(bindings = @QueueBinding(
|
@RabbitListener(bindings = @QueueBinding(
|
||||||
value = @Queue(name = MqConstants.Queues.ORDERS_TRADE_UPDATE_STATUS),
|
value = @Queue(name = MqConstants.Queues.ORDERS_TRADE_UPDATE_STATUS),
|
||||||
@@ -54,23 +55,24 @@ public class TradeStatusListener {
|
|||||||
|
|
||||||
// 处理当前微服务并且支付成功的订单
|
// 处理当前微服务并且支付成功的订单
|
||||||
List<TradeStatusMsg> tradeStatusMsgList = msgList.stream()
|
List<TradeStatusMsg> tradeStatusMsgList = msgList.stream()
|
||||||
.filter(statusMsg -> ordersCreateService.PRODUCT_APP_ID.equals(statusMsg.getProductAppId())
|
.filter(statusMsg -> IOrdersCreateService.PRODUCT_APP_ID.equals(statusMsg.getProductAppId())
|
||||||
&& TradingStateEnum.YJS.getCode().equals(statusMsg.getStatusCode()))
|
&& TradingStateEnum.YJS.getCode().equals(statusMsg.getStatusCode()))
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
transactionTemplate.executeWithoutResult(status -> {
|
transactionTemplate.executeWithoutResult(status -> {
|
||||||
for (TradeStatusMsg tradeStatusMsg : tradeStatusMsgList) {
|
for (TradeStatusMsg tradeStatusMsg : tradeStatusMsgList) {
|
||||||
if (!ordersCommonService.updateStatus(OrderUpdateStatusDTO.builder()
|
// 构造订单快照
|
||||||
.id(tradeStatusMsg.getProductOrderNo())
|
Long orderId = tradeStatusMsg.getProductOrderNo();
|
||||||
.originStatus(OrderStatusEnum.NO_PAY.getStatus())
|
OrderSnapshotDTO orderSnapshotDTO = BeanUtils.toBean(ordersManagerService.getById(orderId), OrderSnapshotDTO.class);
|
||||||
.targetStatus(OrderStatusEnum.DISPATCHING.getStatus())
|
orderSnapshotDTO.setOrdersStatus(OrderStatusEnum.DISPATCHING.getStatus());
|
||||||
.payStatus(OrderPayStatusEnum.PAY_SUCCESS.getStatus())
|
orderSnapshotDTO.setPayStatus(OrderPayStatusEnum.PAY_SUCCESS.getStatus());
|
||||||
.tradingOrderNo(tradeStatusMsg.getTradingOrderNo())
|
orderSnapshotDTO.setTradingOrderNo(tradeStatusMsg.getTradingOrderNo());
|
||||||
.transactionId(tradeStatusMsg.getTransactionId())
|
orderSnapshotDTO.setThirdOrderId(tradeStatusMsg.getTransactionId());
|
||||||
.tradingChannel(tradeStatusMsg.getTradingChannel())
|
orderSnapshotDTO.setTradingChannel(tradeStatusMsg.getTradingChannel());
|
||||||
.payTime(LocalDateTime.now()).build())) {
|
orderSnapshotDTO.setPayTime(LocalDateTime.now());
|
||||||
throw new DBException("更新订单状态失败");
|
|
||||||
}
|
orderStateMachine.changeStatus(null, orderId.toString(),
|
||||||
|
OrderStatusChangeEventEnum.PAYED, orderSnapshotDTO);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,9 @@ package com.jzo2o.orders.manager.service;
|
|||||||
import com.baomidou.mybatisplus.extension.service.IService;
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
import com.jzo2o.api.orders.dto.response.OrderResDTO;
|
import com.jzo2o.api.orders.dto.response.OrderResDTO;
|
||||||
import com.jzo2o.api.orders.dto.response.OrderSimpleResDTO;
|
import com.jzo2o.api.orders.dto.response.OrderSimpleResDTO;
|
||||||
|
import com.jzo2o.common.model.PageResult;
|
||||||
import com.jzo2o.orders.base.model.domain.Orders;
|
import com.jzo2o.orders.base.model.domain.Orders;
|
||||||
|
import com.jzo2o.orders.manager.model.dto.request.OrderPageQueryReqDTO;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@@ -47,4 +49,9 @@ public interface IOrdersManagerService extends IService<Orders> {
|
|||||||
* @param count 订单数量
|
* @param count 订单数量
|
||||||
*/
|
*/
|
||||||
List<Orders> getPayOverTimeOrder(Integer count);
|
List<Orders> getPayOverTimeOrder(Integer count);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 管理端分页查询
|
||||||
|
*/
|
||||||
|
PageResult<OrderSimpleResDTO> operationQueryList(OrderPageQueryReqDTO orderPageQueryReqDTO);
|
||||||
}
|
}
|
||||||
@@ -2,7 +2,7 @@ package com.jzo2o.orders.manager.service;
|
|||||||
|
|
||||||
import com.baomidou.mybatisplus.extension.service.IService;
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
import com.jzo2o.orders.base.model.domain.OrdersRefund;
|
import com.jzo2o.orders.base.model.domain.OrdersRefund;
|
||||||
import com.jzo2o.orders.manager.model.dto.OrderCancelDTO;
|
import com.jzo2o.orders.base.model.dto.OrderSnapshotDTO;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@@ -27,7 +27,7 @@ public interface IOrdersRefundService extends IService<OrdersRefund> {
|
|||||||
* 保存退款记录信息
|
* 保存退款记录信息
|
||||||
* <br/><b>仅供内部使用!!!</b>
|
* <br/><b>仅供内部使用!!!</b>
|
||||||
*/
|
*/
|
||||||
boolean saveRefundInfo(OrderCancelDTO orderRefundInfo);
|
boolean saveRefundInfo(OrderSnapshotDTO orderSnapshotDTO);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 通过订单退款信息退款(内部无校验)
|
* 通过订单退款信息退款(内部无校验)
|
||||||
|
|||||||
@@ -8,15 +8,16 @@ import com.jzo2o.api.trade.enums.TradingStateEnum;
|
|||||||
import com.jzo2o.common.constants.UserType;
|
import com.jzo2o.common.constants.UserType;
|
||||||
import com.jzo2o.common.expcetions.DBException;
|
import com.jzo2o.common.expcetions.DBException;
|
||||||
import com.jzo2o.common.expcetions.ForbiddenOperationException;
|
import com.jzo2o.common.expcetions.ForbiddenOperationException;
|
||||||
|
import com.jzo2o.common.utils.BeanUtils;
|
||||||
import com.jzo2o.common.utils.ObjectUtils;
|
import com.jzo2o.common.utils.ObjectUtils;
|
||||||
import com.jzo2o.orders.base.enums.OrderRefundStatusEnum;
|
import com.jzo2o.orders.base.enums.OrderStatusChangeEventEnum;
|
||||||
import com.jzo2o.orders.base.enums.OrderStatusEnum;
|
import com.jzo2o.orders.base.enums.OrderStatusEnum;
|
||||||
|
import com.jzo2o.orders.base.handler.OrderStateMachine;
|
||||||
import com.jzo2o.orders.base.mapper.OrdersCanceledMapper;
|
import com.jzo2o.orders.base.mapper.OrdersCanceledMapper;
|
||||||
import com.jzo2o.orders.base.model.domain.Orders;
|
import com.jzo2o.orders.base.model.domain.Orders;
|
||||||
import com.jzo2o.orders.base.model.domain.OrdersCanceled;
|
import com.jzo2o.orders.base.model.domain.OrdersCanceled;
|
||||||
import com.jzo2o.orders.base.model.domain.OrdersRefund;
|
import com.jzo2o.orders.base.model.domain.OrdersRefund;
|
||||||
import com.jzo2o.orders.base.model.dto.OrderUpdateStatusDTO;
|
import com.jzo2o.orders.base.model.dto.OrderSnapshotDTO;
|
||||||
import com.jzo2o.orders.base.service.IOrdersCommonService;
|
|
||||||
import com.jzo2o.orders.manager.model.dto.OrderCancelDTO;
|
import com.jzo2o.orders.manager.model.dto.OrderCancelDTO;
|
||||||
import com.jzo2o.orders.manager.service.IOrdersCanceledService;
|
import com.jzo2o.orders.manager.service.IOrdersCanceledService;
|
||||||
import com.jzo2o.orders.manager.service.IOrdersManagerService;
|
import com.jzo2o.orders.manager.service.IOrdersManagerService;
|
||||||
@@ -37,8 +38,6 @@ import java.time.LocalDateTime;
|
|||||||
*/
|
*/
|
||||||
@Service
|
@Service
|
||||||
public class OrdersCanceledServiceImpl extends ServiceImpl<OrdersCanceledMapper, OrdersCanceled> implements IOrdersCanceledService {
|
public class OrdersCanceledServiceImpl extends ServiceImpl<OrdersCanceledMapper, OrdersCanceled> implements IOrdersCanceledService {
|
||||||
@Resource
|
|
||||||
private IOrdersCommonService ordersCommonService;
|
|
||||||
@Resource
|
@Resource
|
||||||
private IOrdersManagerService ordersManagerService;
|
private IOrdersManagerService ordersManagerService;
|
||||||
@Resource
|
@Resource
|
||||||
@@ -47,27 +46,32 @@ public class OrdersCanceledServiceImpl extends ServiceImpl<OrdersCanceledMapper,
|
|||||||
private TransactionTemplate transactionTemplate;
|
private TransactionTemplate transactionTemplate;
|
||||||
@Resource
|
@Resource
|
||||||
private TradingApi tradingApi;
|
private TradingApi tradingApi;
|
||||||
|
@Resource
|
||||||
|
private OrderStateMachine orderStateMachine;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void cancel(OrderCancelDTO orderCancelDTO) {
|
public void cancel(OrderCancelDTO orderCancelDTO) {
|
||||||
Long orderId = orderCancelDTO.getId();
|
Orders orders = ordersManagerService.getById(orderCancelDTO.getId());
|
||||||
Orders orders = ordersManagerService.getById(orderId);
|
|
||||||
if (ObjectUtils.isEmpty(orders)) {
|
if (ObjectUtils.isEmpty(orders)) {
|
||||||
throw new ForbiddenOperationException("订单不存在无法取消");
|
throw new ForbiddenOperationException("订单不存在无法取消");
|
||||||
}
|
}
|
||||||
|
|
||||||
// 补充前端无法确定的字段
|
// 补充前端无法确定的字段
|
||||||
orderCancelDTO.setServeStartTime(orders.getServeStartTime());
|
OrderSnapshotDTO orderSnapshotDTO = BeanUtils.toBean(orders, OrderSnapshotDTO.class);
|
||||||
orderCancelDTO.setRealPayAmount(/*orders.getRealPayAmount() 测试统一使用0.01元*/ new BigDecimal("0.01"));
|
orderSnapshotDTO.setCancelTime(LocalDateTime.now());
|
||||||
orderCancelDTO.setCityCode(orders.getCityCode());
|
orderSnapshotDTO.setCancellerId(orderCancelDTO.getCurrentUserId());
|
||||||
orderCancelDTO.setTradingOrderNo(orders.getTradingOrderNo());
|
orderSnapshotDTO.setCancelerName(orderCancelDTO.getCurrentUserName());
|
||||||
|
orderSnapshotDTO.setCancellerType(orderCancelDTO.getCurrentUserType());
|
||||||
|
orderSnapshotDTO.setCancelReason(orderCancelDTO.getCancelReason());
|
||||||
|
orderSnapshotDTO.setRealPayAmount(/*orders.getRealPayAmount() 测试统一使用0.01元*/ new BigDecimal("0.01"));
|
||||||
|
|
||||||
Integer ordersStatus = orders.getOrdersStatus();
|
Integer ordersStatus = orders.getOrdersStatus();
|
||||||
if (OrderStatusEnum.NO_PAY.getStatus().equals(ordersStatus)) {
|
if (OrderStatusEnum.NO_PAY.getStatus().equals(ordersStatus)) {
|
||||||
// 1. 未支付订单 -> 取消状态
|
// 1. 未支付订单 -> 取消状态
|
||||||
cancelNoPayOrder(orderCancelDTO);
|
cancelNoPayOrder(orderSnapshotDTO);
|
||||||
} else if (OrderStatusEnum.DISPATCHING.getStatus().equals(ordersStatus)) {
|
} else if (OrderStatusEnum.DISPATCHING.getStatus().equals(ordersStatus)) {
|
||||||
// 2. 已支付订单 -> 关闭状态 + 退款
|
// 2. 已支付订单 -> 关闭状态 + 退款
|
||||||
cancelDispatchingOrder(orderCancelDTO);
|
cancelDispatchingOrder(orderSnapshotDTO);
|
||||||
} else {
|
} else {
|
||||||
throw new ForbiddenOperationException("订单无法取消");
|
throw new ForbiddenOperationException("订单无法取消");
|
||||||
}
|
}
|
||||||
@@ -76,6 +80,7 @@ public class OrdersCanceledServiceImpl extends ServiceImpl<OrdersCanceledMapper,
|
|||||||
@Override
|
@Override
|
||||||
public void cancelPayOverTimeOrder(Orders order) {
|
public void cancelPayOverTimeOrder(Orders order) {
|
||||||
// 二次确认防止在此期间支付
|
// 二次确认防止在此期间支付
|
||||||
|
order = ordersManagerService.getById(order.getId());
|
||||||
Long tradingOrderNo = order.getTradingOrderNo();
|
Long tradingOrderNo = order.getTradingOrderNo();
|
||||||
if (ObjectUtils.isNotEmpty(tradingOrderNo)) {
|
if (ObjectUtils.isNotEmpty(tradingOrderNo)) {
|
||||||
// 再次请求防止已支付
|
// 再次请求防止已支付
|
||||||
@@ -85,72 +90,65 @@ public class OrdersCanceledServiceImpl extends ServiceImpl<OrdersCanceledMapper,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
cancelNoPayOrder(OrderCancelDTO.builder()
|
OrderSnapshotDTO orderSnapshotDTO = BeanUtils.toBean(order, OrderSnapshotDTO.class);
|
||||||
.id(order.getId())
|
orderSnapshotDTO.setCancellerId(-1L);
|
||||||
.cancelReason("订单超时未支付自动取消")
|
orderSnapshotDTO.setCancelerName("SYSTEM");
|
||||||
.currentUserId(-1L)
|
orderSnapshotDTO.setCancelReason("订单超时未支付自动取消");
|
||||||
.currentUserName("SYSTEM")
|
orderSnapshotDTO.setCancellerType(UserType.SYSTEM);
|
||||||
.currentUserType(UserType.SYSTEM)
|
orderSnapshotDTO.setCancelTime(LocalDateTime.now());
|
||||||
.build());
|
cancelNoPayOrder(orderSnapshotDTO);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void cancelNoPayOrder(OrderCancelDTO orderCancelDTO) {
|
private void cancelNoPayOrder(OrderSnapshotDTO orderSnapshotDTO) {
|
||||||
|
Long orderId = orderSnapshotDTO.getId();
|
||||||
|
|
||||||
transactionTemplate.executeWithoutResult(status -> {
|
transactionTemplate.executeWithoutResult(status -> {
|
||||||
if (!saveCancelInfo(orderCancelDTO)) {
|
if (!saveCancelInfo(orderSnapshotDTO)) {
|
||||||
throw new DBException("订单取消表记录表更新失败");
|
throw new DBException("订单取消表记录表更新失败");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!ordersCommonService.updateStatus(OrderUpdateStatusDTO.builder()
|
// 更新状态
|
||||||
.id(orderCancelDTO.getId())
|
orderStateMachine.changeStatus(null, orderId.toString(),
|
||||||
.originStatus(OrderStatusEnum.NO_PAY.getStatus())
|
OrderStatusChangeEventEnum.CANCEL, orderSnapshotDTO);
|
||||||
.targetStatus(OrderStatusEnum.CANCELED.getStatus())
|
|
||||||
.build())) {
|
|
||||||
throw new DBException("订单表订单状态更新失败");
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private void cancelDispatchingOrder(OrderCancelDTO orderCancelDTO) {
|
private void cancelDispatchingOrder(OrderSnapshotDTO orderSnapshotDTO) {
|
||||||
Long orderId = orderCancelDTO.getId();
|
Long orderId = orderSnapshotDTO.getId();
|
||||||
|
|
||||||
// 更新数据库信息
|
// 更新数据库信息
|
||||||
// 1. 订单状态信息 2. 取消记录表 2. 退款记录表
|
// 1. 订单状态信息 2. 取消记录表 2. 退款记录表
|
||||||
transactionTemplate.executeWithoutResult(status -> {
|
transactionTemplate.executeWithoutResult(status -> {
|
||||||
if (!saveCancelInfo(orderCancelDTO)) {
|
if (!saveCancelInfo(orderSnapshotDTO)) {
|
||||||
throw new DBException("订单取消记录表更新失败");
|
throw new DBException("订单取消记录表更新失败");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!ordersRefundService.saveRefundInfo(orderCancelDTO)) {
|
if (!ordersRefundService.saveRefundInfo(orderSnapshotDTO)) {
|
||||||
throw new DBException("订单退款记录表更新失败");
|
throw new DBException("订单退款记录表更新失败");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!ordersCommonService.updateStatus(OrderUpdateStatusDTO.builder()
|
orderStateMachine.changeStatus(null, orderId.toString(),
|
||||||
.id(orderId)
|
OrderStatusChangeEventEnum.CLOSE_DISPATCHING_ORDER, orderSnapshotDTO);
|
||||||
.originStatus(OrderStatusEnum.DISPATCHING.getStatus())
|
|
||||||
.targetStatus(OrderStatusEnum.CLOSED.getStatus())
|
|
||||||
.refundStatus(OrderRefundStatusEnum.REFUNDING.getStatus())
|
|
||||||
.build())) {
|
|
||||||
throw new DBException("订单表订单状态更新失败");
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
// 启动新线程执行退款任务
|
// 启动新线程执行退款任务
|
||||||
new Thread(() -> ordersRefundService
|
new Thread(() -> ordersRefundService
|
||||||
.refundOrderByRefundRecord(OrdersRefund.builder()
|
.refundOrderByRefundRecord(OrdersRefund.builder()
|
||||||
.id(orderId)
|
.id(orderId)
|
||||||
.tradingOrderNo(orderCancelDTO.getTradingOrderNo())
|
.tradingOrderNo(orderSnapshotDTO.getTradingOrderNo())
|
||||||
.realPayAmount(orderCancelDTO.getRealPayAmount())
|
.realPayAmount(orderSnapshotDTO.getRealPayAmount())
|
||||||
.build()))
|
.build()))
|
||||||
.start();
|
.start();
|
||||||
}
|
}
|
||||||
|
|
||||||
private Boolean saveCancelInfo(OrderCancelDTO orderCancelInfo) {
|
private Boolean saveCancelInfo(OrderSnapshotDTO orderSnapshotDTO) {
|
||||||
return SqlHelper.retBool(baseMapper.insert(OrdersCanceled.builder()
|
return SqlHelper.retBool(baseMapper.insert(OrdersCanceled.builder()
|
||||||
.id(orderCancelInfo.getId())
|
.id(orderSnapshotDTO.getId())
|
||||||
.cancellerId(orderCancelInfo.getCurrentUserId())
|
.cancellerId(orderSnapshotDTO.getCancellerId())
|
||||||
.cancelerName(orderCancelInfo.getCurrentUserName())
|
.cancelerName(orderSnapshotDTO.getCancelerName())
|
||||||
.cancellerType(orderCancelInfo.getCurrentUserType())
|
.cancellerType(orderSnapshotDTO.getCancellerType())
|
||||||
.cancelReason(orderCancelInfo.getCancelReason())
|
.cancelReason(orderSnapshotDTO.getCancelReason())
|
||||||
.cancelTime(LocalDateTime.now())
|
.cancelTime(orderSnapshotDTO.getCancelTime())
|
||||||
.build()));
|
.build()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
package com.jzo2o.orders.manager.service.impl;
|
package com.jzo2o.orders.manager.service.impl;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
|
import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
|
||||||
import com.jzo2o.api.customer.dto.response.AddressBookResDTO;
|
import com.jzo2o.api.customer.dto.response.AddressBookResDTO;
|
||||||
import com.jzo2o.api.foundations.dto.response.ServeAggregationResDTO;
|
import com.jzo2o.api.foundations.dto.response.ServeAggregationResDTO;
|
||||||
import com.jzo2o.api.trade.NativePayApi;
|
import com.jzo2o.api.trade.NativePayApi;
|
||||||
@@ -18,11 +19,12 @@ import com.jzo2o.common.utils.ObjectUtils;
|
|||||||
import com.jzo2o.mvc.utils.UserContext;
|
import com.jzo2o.mvc.utils.UserContext;
|
||||||
import com.jzo2o.orders.base.constants.RedisConstants;
|
import com.jzo2o.orders.base.constants.RedisConstants;
|
||||||
import com.jzo2o.orders.base.enums.OrderPayStatusEnum;
|
import com.jzo2o.orders.base.enums.OrderPayStatusEnum;
|
||||||
|
import com.jzo2o.orders.base.enums.OrderStatusChangeEventEnum;
|
||||||
import com.jzo2o.orders.base.enums.OrderStatusEnum;
|
import com.jzo2o.orders.base.enums.OrderStatusEnum;
|
||||||
|
import com.jzo2o.orders.base.handler.OrderStateMachine;
|
||||||
import com.jzo2o.orders.base.mapper.OrdersMapper;
|
import com.jzo2o.orders.base.mapper.OrdersMapper;
|
||||||
import com.jzo2o.orders.base.model.domain.Orders;
|
import com.jzo2o.orders.base.model.domain.Orders;
|
||||||
import com.jzo2o.orders.base.model.dto.OrderUpdateStatusDTO;
|
import com.jzo2o.orders.base.model.dto.OrderSnapshotDTO;
|
||||||
import com.jzo2o.orders.base.service.IOrdersCommonService;
|
|
||||||
import com.jzo2o.orders.manager.model.dto.request.OrdersPayReqDTO;
|
import com.jzo2o.orders.manager.model.dto.request.OrdersPayReqDTO;
|
||||||
import com.jzo2o.orders.manager.model.dto.request.PlaceOrderReqDTO;
|
import com.jzo2o.orders.manager.model.dto.request.PlaceOrderReqDTO;
|
||||||
import com.jzo2o.orders.manager.model.dto.response.OrdersPayResDTO;
|
import com.jzo2o.orders.manager.model.dto.response.OrdersPayResDTO;
|
||||||
@@ -62,7 +64,7 @@ public class OrdersCreateServiceImpl extends ServiceImpl<OrdersMapper, Orders> i
|
|||||||
@Resource
|
@Resource
|
||||||
private TradeProperties tradeProperties;
|
private TradeProperties tradeProperties;
|
||||||
@Resource
|
@Resource
|
||||||
private IOrdersCommonService ordersCommonService;
|
private OrderStateMachine orderStateMachine;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 生成订单号(2位年+2位月+2位日+13位序号)
|
* 生成订单号(2位年+2位月+2位日+13位序号)
|
||||||
@@ -120,14 +122,18 @@ public class OrdersCreateServiceImpl extends ServiceImpl<OrdersMapper, Orders> i
|
|||||||
.serveStartTime(serveStartTime)
|
.serveStartTime(serveStartTime)
|
||||||
.lon(address.getLon())
|
.lon(address.getLon())
|
||||||
.lat(address.getLat())
|
.lat(address.getLat())
|
||||||
.sortBy(sortColumn).build();
|
.sortBy(sortColumn)
|
||||||
|
.build();
|
||||||
|
|
||||||
// 减小事务管理的颗粒度
|
// 减小事务管理的颗粒度
|
||||||
return new PlaceOrderResDTO(
|
return new PlaceOrderResDTO(
|
||||||
transactionTemplate.execute(status -> {
|
transactionTemplate.execute(status -> {
|
||||||
if (baseMapper.insert(orderToPay) == 0) {
|
if (!SqlHelper.retBool(baseMapper.insert(orderToPay))) {
|
||||||
throw new CommonException("下单失败");
|
throw new CommonException("下单失败");
|
||||||
}
|
}
|
||||||
|
// 初始化订单状态机
|
||||||
|
orderStateMachine.start(null, orderId.toString(),
|
||||||
|
BeanUtils.toBean(baseMapper.selectById(orderId), OrderSnapshotDTO.class));
|
||||||
return orderToPay.getId();
|
return orderToPay.getId();
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
@@ -203,16 +209,17 @@ public class OrdersCreateServiceImpl extends ServiceImpl<OrdersMapper, Orders> i
|
|||||||
// 支付成功
|
// 支付成功
|
||||||
if (ObjectUtils.isNotEmpty(tradingResDTO)
|
if (ObjectUtils.isNotEmpty(tradingResDTO)
|
||||||
&& tradingResDTO.getTradingState() == TradingStateEnum.YJS) {
|
&& tradingResDTO.getTradingState() == TradingStateEnum.YJS) {
|
||||||
|
// 构造订单快照
|
||||||
|
OrderSnapshotDTO orderSnapshotDTO = BeanUtils.toBean(orders, OrderSnapshotDTO.class);
|
||||||
|
orderSnapshotDTO.setOrdersStatus(OrderStatusEnum.DISPATCHING.getStatus());
|
||||||
|
orderSnapshotDTO.setPayStatus(OrderPayStatusEnum.PAY_SUCCESS.getStatus());
|
||||||
|
orderSnapshotDTO.setTradingOrderNo(tradingResDTO.getTradingOrderNo());
|
||||||
|
orderSnapshotDTO.setThirdOrderId(tradingResDTO.getTransactionId());
|
||||||
|
orderSnapshotDTO.setTradingChannel(tradingResDTO.getTradingChannel());
|
||||||
|
orderSnapshotDTO.setPayTime(LocalDateTime.now());
|
||||||
|
|
||||||
ordersCommonService.updateStatus(OrderUpdateStatusDTO.builder()
|
orderStateMachine.changeStatus(null, id.toString(),
|
||||||
.id(id)
|
OrderStatusChangeEventEnum.PAYED, orderSnapshotDTO);
|
||||||
.originStatus(OrderStatusEnum.NO_PAY.getStatus())
|
|
||||||
.targetStatus(OrderStatusEnum.DISPATCHING.getStatus())
|
|
||||||
.payStatus(OrderPayStatusEnum.PAY_SUCCESS.getStatus())
|
|
||||||
.tradingOrderNo(tradingResDTO.getTradingOrderNo())
|
|
||||||
.transactionId(tradingResDTO.getTransactionId())
|
|
||||||
.tradingChannel(tradingResDTO.getTradingChannel())
|
|
||||||
.payTime(LocalDateTime.now()).build());
|
|
||||||
|
|
||||||
// 支付成功更新最终响应信息的状态
|
// 支付成功更新最终响应信息的状态
|
||||||
ordersPayResDTO.setPayStatus(OrderPayStatusEnum.PAY_SUCCESS.getStatus());
|
ordersPayResDTO.setPayStatus(OrderPayStatusEnum.PAY_SUCCESS.getStatus());
|
||||||
|
|||||||
@@ -1,30 +1,37 @@
|
|||||||
package com.jzo2o.orders.manager.service.impl;
|
package com.jzo2o.orders.manager.service.impl;
|
||||||
|
|
||||||
import cn.hutool.core.bean.BeanUtil;
|
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.metadata.OrderItem;
|
|
||||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import com.jzo2o.api.orders.dto.response.OrderResDTO;
|
import com.jzo2o.api.orders.dto.response.OrderResDTO;
|
||||||
import com.jzo2o.api.orders.dto.response.OrderSimpleResDTO;
|
import com.jzo2o.api.orders.dto.response.OrderSimpleResDTO;
|
||||||
import com.jzo2o.common.enums.EnableStatusEnum;
|
import com.jzo2o.common.model.PageResult;
|
||||||
|
import com.jzo2o.common.utils.BeanUtils;
|
||||||
|
import com.jzo2o.common.utils.CollUtils;
|
||||||
|
import com.jzo2o.common.utils.JsonUtils;
|
||||||
import com.jzo2o.common.utils.ObjectUtils;
|
import com.jzo2o.common.utils.ObjectUtils;
|
||||||
|
import com.jzo2o.mysql.utils.PageUtils;
|
||||||
|
import com.jzo2o.orders.base.constants.RedisConstants;
|
||||||
import com.jzo2o.orders.base.enums.OrderStatusEnum;
|
import com.jzo2o.orders.base.enums.OrderStatusEnum;
|
||||||
|
import com.jzo2o.orders.base.handler.OrderStateMachine;
|
||||||
import com.jzo2o.orders.base.mapper.OrdersMapper;
|
import com.jzo2o.orders.base.mapper.OrdersMapper;
|
||||||
import com.jzo2o.orders.base.model.domain.Orders;
|
import com.jzo2o.orders.base.model.domain.Orders;
|
||||||
import com.jzo2o.orders.base.model.domain.OrdersCanceled;
|
import com.jzo2o.orders.base.model.dto.OrderSnapshotDTO;
|
||||||
|
import com.jzo2o.orders.manager.model.dto.request.OrderPageQueryReqDTO;
|
||||||
import com.jzo2o.orders.manager.service.IOrdersCanceledService;
|
import com.jzo2o.orders.manager.service.IOrdersCanceledService;
|
||||||
import com.jzo2o.orders.manager.service.IOrdersManagerService;
|
import com.jzo2o.orders.manager.service.IOrdersManagerService;
|
||||||
|
import com.jzo2o.redis.helper.CacheHelper;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
import static com.jzo2o.orders.base.constants.FieldConstants.SORT_BY;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>
|
* <p>
|
||||||
@@ -36,8 +43,12 @@ import static com.jzo2o.orders.base.constants.FieldConstants.SORT_BY;
|
|||||||
@Slf4j
|
@Slf4j
|
||||||
@Service
|
@Service
|
||||||
public class OrdersManagerServiceImpl extends ServiceImpl<OrdersMapper, Orders> implements IOrdersManagerService {
|
public class OrdersManagerServiceImpl extends ServiceImpl<OrdersMapper, Orders> implements IOrdersManagerService {
|
||||||
|
@Resource
|
||||||
|
private OrderStateMachine orderStateMachine;
|
||||||
@Resource
|
@Resource
|
||||||
private IOrdersCanceledService ordersCanceledService;
|
private IOrdersCanceledService ordersCanceledService;
|
||||||
|
@Resource
|
||||||
|
private CacheHelper cacheHelper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 订单超时时间
|
* 订单超时时间
|
||||||
@@ -61,20 +72,27 @@ public class OrdersManagerServiceImpl extends ServiceImpl<OrdersMapper, Orders>
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public List<OrderSimpleResDTO> consumerQueryList(Long currentUserId, Integer ordersStatus, Long sortBy) {
|
public List<OrderSimpleResDTO> consumerQueryList(Long currentUserId, Integer ordersStatus, Long sortBy) {
|
||||||
// 1.构造查询条件
|
// 获取待查询详情的订单id集合
|
||||||
LambdaQueryWrapper<Orders> queryWrapper = Wrappers.<Orders>lambdaQuery()
|
List<Long> orderIdList = baseMapper.selectOrderIdList(currentUserId, ordersStatus, sortBy);
|
||||||
.eq(ObjectUtils.isNotNull(ordersStatus), Orders::getOrdersStatus, ordersStatus)
|
|
||||||
.lt(ObjectUtils.isNotNull(sortBy), Orders::getSortBy, sortBy)
|
|
||||||
.eq(Orders::getUserId, currentUserId)
|
|
||||||
.eq(Orders::getDisplay, EnableStatusEnum.ENABLE.getStatus());
|
|
||||||
Page<Orders> queryPage = new Page<>();
|
|
||||||
queryPage.addOrder(OrderItem.desc(SORT_BY));
|
|
||||||
queryPage.setSearchCount(false);
|
|
||||||
|
|
||||||
// 2.查询订单列表
|
if (CollUtils.isEmpty(orderIdList)) {
|
||||||
Page<Orders> ordersPage = baseMapper.selectPage(queryPage, queryWrapper);
|
return new ArrayList<>();
|
||||||
List<Orders> records = ordersPage.getRecords();
|
}
|
||||||
return BeanUtil.copyToList(records, OrderSimpleResDTO.class);
|
|
||||||
|
return cacheHelper.batchGet(
|
||||||
|
String.format(RedisConstants.RedisKey.ORDERS, currentUserId),
|
||||||
|
orderIdList,
|
||||||
|
(noCachedIds, clazz) -> {
|
||||||
|
List<Orders> ordersList = batchQuery(noCachedIds);
|
||||||
|
if (CollUtils.isEmpty(ordersList)) {
|
||||||
|
// 防止缓存穿透返回空数据
|
||||||
|
return new HashMap<>();
|
||||||
|
}
|
||||||
|
return ordersList.stream().collect(
|
||||||
|
Collectors.toMap(Orders::getId, orders -> BeanUtils.toBean(orders, clazz)));
|
||||||
|
},
|
||||||
|
OrderSimpleResDTO.class,
|
||||||
|
RedisConstants.Ttl.ORDERS_PAGE_TTL);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -84,29 +102,25 @@ public class OrdersManagerServiceImpl extends ServiceImpl<OrdersMapper, Orders>
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public OrderResDTO getDetail(Long id) {
|
public OrderResDTO getDetail(Long id) {
|
||||||
Orders orders = baseMapper.selectById(id);
|
OrderSnapshotDTO orderSnapshot = JsonUtils.toBean(orderStateMachine.getCurrentSnapshotCache(id.toString()), OrderSnapshotDTO.class);
|
||||||
if (ObjectUtils.isEmpty(orders)) {
|
if (ObjectUtils.isEmpty(orderSnapshot)) {
|
||||||
return new OrderResDTO();
|
// 保证未使用状态机的数据可访问
|
||||||
|
Orders orders = baseMapper.selectById(id);
|
||||||
|
if (ObjectUtils.isEmpty(orders)) {
|
||||||
|
return new OrderResDTO();
|
||||||
|
}
|
||||||
|
orderSnapshot = BeanUtils.toBean(orders, OrderSnapshotDTO.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
OrderResDTO orderResDTO = BeanUtil.toBean(orders, OrderResDTO.class);
|
|
||||||
// 订单超过15分钟未支付则自动取消
|
// 订单超过15分钟未支付则自动取消
|
||||||
if (OrderStatusEnum.NO_PAY.getStatus().equals(orders.getOrdersStatus())
|
if (OrderStatusEnum.NO_PAY.getStatus().equals(orderSnapshot.getOrdersStatus())
|
||||||
&& orders.getCreateTime().isBefore(LocalDateTime.now().minusMinutes(PAY_OVERTIME_MINUTE))) {
|
&& orderSnapshot.getCreateTime().isBefore(LocalDateTime.now().minusMinutes(PAY_OVERTIME_MINUTE))) {
|
||||||
ordersCanceledService.cancelPayOverTimeOrder(orders);
|
ordersCanceledService.cancelPayOverTimeOrder(BeanUtils.toBean(orderSnapshot, Orders.class));
|
||||||
orderResDTO.setOrdersStatus(OrderStatusEnum.CANCELED.getStatus());
|
// 取消后重新获取最新的快照信息
|
||||||
|
orderSnapshot = JsonUtils.toBean(orderStateMachine.getCurrentSnapshotCache(id.toString()), OrderSnapshotDTO.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 订单取消/关闭获取取消/关闭原因
|
return BeanUtils.toBean(orderSnapshot, OrderResDTO.class);
|
||||||
Integer ordersStatus = orderResDTO.getOrdersStatus();
|
|
||||||
if (OrderStatusEnum.CANCELED.getStatus().equals(ordersStatus)
|
|
||||||
|| OrderStatusEnum.CLOSED.getStatus().equals(ordersStatus)) {
|
|
||||||
OrdersCanceled canceledDetail = ordersCanceledService.getById(id);
|
|
||||||
orderResDTO.setCancelTime(canceledDetail.getCancelTime());
|
|
||||||
orderResDTO.setCancelReason(canceledDetail.getCancelReason());
|
|
||||||
}
|
|
||||||
|
|
||||||
return orderResDTO;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -136,4 +150,20 @@ public class OrdersManagerServiceImpl extends ServiceImpl<OrdersMapper, Orders>
|
|||||||
.last("LIMIT " + count)
|
.last("LIMIT " + count)
|
||||||
.list();
|
.list();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public PageResult<OrderSimpleResDTO> operationQueryList(OrderPageQueryReqDTO orderPageQueryReqDTO) {
|
||||||
|
LambdaQueryWrapper<Orders> queryWrapper = Wrappers.<Orders>lambdaQuery()
|
||||||
|
.eq(ObjectUtils.isNotEmpty(orderPageQueryReqDTO.getId()), Orders::getId, orderPageQueryReqDTO.getId())
|
||||||
|
.eq(ObjectUtils.isNotEmpty(orderPageQueryReqDTO.getOrdersStatus()), Orders::getOrdersStatus, orderPageQueryReqDTO.getOrdersStatus())
|
||||||
|
.eq(ObjectUtils.isNotEmpty(orderPageQueryReqDTO.getPayStatus()), Orders::getPayStatus, orderPageQueryReqDTO.getPayStatus())
|
||||||
|
.eq(ObjectUtils.isNotEmpty(orderPageQueryReqDTO.getRefundStatus()), Orders::getRefundStatus, orderPageQueryReqDTO.getRefundStatus())
|
||||||
|
.eq(ObjectUtils.isNotEmpty(orderPageQueryReqDTO.getUserId()), Orders::getUserId, orderPageQueryReqDTO.getUserId())
|
||||||
|
.eq(ObjectUtils.isNotEmpty(orderPageQueryReqDTO.getContactsPhone()), Orders::getContactsPhone, orderPageQueryReqDTO.getContactsPhone())
|
||||||
|
.ge(ObjectUtils.isNotEmpty(orderPageQueryReqDTO.getMinCreateTime()), Orders::getCreateTime, orderPageQueryReqDTO.getMinCreateTime())
|
||||||
|
.le(ObjectUtils.isNotEmpty(orderPageQueryReqDTO.getMaxCreateTime()), Orders::getCreateTime, orderPageQueryReqDTO.getMaxCreateTime());
|
||||||
|
Page<Orders> ordersPage = PageUtils.parsePageQuery(orderPageQueryReqDTO, Orders.class);
|
||||||
|
|
||||||
|
return PageUtils.toPage(baseMapper.selectPage(ordersPage, queryWrapper), OrderSimpleResDTO.class);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -10,9 +10,9 @@ import com.jzo2o.common.utils.ObjectUtils;
|
|||||||
import com.jzo2o.orders.base.enums.OrderStatusEnum;
|
import com.jzo2o.orders.base.enums.OrderStatusEnum;
|
||||||
import com.jzo2o.orders.base.mapper.OrdersRefundMapper;
|
import com.jzo2o.orders.base.mapper.OrdersRefundMapper;
|
||||||
import com.jzo2o.orders.base.model.domain.OrdersRefund;
|
import com.jzo2o.orders.base.model.domain.OrdersRefund;
|
||||||
|
import com.jzo2o.orders.base.model.dto.OrderSnapshotDTO;
|
||||||
import com.jzo2o.orders.base.model.dto.OrderUpdateStatusDTO;
|
import com.jzo2o.orders.base.model.dto.OrderUpdateStatusDTO;
|
||||||
import com.jzo2o.orders.base.service.IOrdersCommonService;
|
import com.jzo2o.orders.base.service.IOrdersCommonService;
|
||||||
import com.jzo2o.orders.manager.model.dto.OrderCancelDTO;
|
|
||||||
import com.jzo2o.orders.manager.service.IOrdersRefundService;
|
import com.jzo2o.orders.manager.service.IOrdersRefundService;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.support.TransactionTemplate;
|
import org.springframework.transaction.support.TransactionTemplate;
|
||||||
@@ -50,11 +50,11 @@ public class OrdersRefundServiceImpl extends ServiceImpl<OrdersRefundMapper, Ord
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean saveRefundInfo(OrderCancelDTO orderRefundInfo) {
|
public boolean saveRefundInfo(OrderSnapshotDTO orderSnapshotDTO) {
|
||||||
return SqlHelper.retBool(baseMapper.insert(OrdersRefund.builder()
|
return SqlHelper.retBool(baseMapper.insert(OrdersRefund.builder()
|
||||||
.id(orderRefundInfo.getId())
|
.id(orderSnapshotDTO.getId())
|
||||||
.tradingOrderNo(orderRefundInfo.getTradingOrderNo())
|
.tradingOrderNo(orderSnapshotDTO.getTradingOrderNo())
|
||||||
.realPayAmount(orderRefundInfo.getRealPayAmount())
|
.realPayAmount(orderSnapshotDTO.getRealPayAmount())
|
||||||
.build()));
|
.build()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user