diff --git a/jzo2o-oreders/jzo2o-orders-base/pom.xml b/jzo2o-oreders/jzo2o-orders-base/pom.xml
new file mode 100644
index 0000000..fb68f5c
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-base/pom.xml
@@ -0,0 +1,87 @@
+
+
+
+ jzo2o-oreders
+ com.jzo2o
+ 1.0-SNAPSHOT
+
+ 4.0.0
+
+ jzo2o-orders-base
+
+
+ 11
+ 11
+
+
+
+
+ com.jzo2o
+ jzo2o-common
+
+
+ com.jzo2o
+ jzo2o-mysql
+
+
+ com.jzo2o
+ jzo2o-redis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ com.jzo2o
+ jzo2o-canal-sync
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ org.antlr
+ antlr
+
+
+ com.jzo2o
+ jzo2o-mvc
+
+
+
+
\ No newline at end of file
diff --git a/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/config/AutoImportConfiguration.java b/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/config/AutoImportConfiguration.java
new file mode 100644
index 0000000..481213b
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/config/AutoImportConfiguration.java
@@ -0,0 +1,17 @@
+package com.jzo2o.orders.base.config;
+
+import com.jzo2o.orders.base.properties.DispatchProperties;
+import com.jzo2o.orders.base.properties.ExecutorProperties;
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Import;
+
+@Configuration
+@ComponentScan({"com.jzo2o.orders.base.service","com.jzo2o.orders.base.handler"})
+@MapperScan("com.jzo2o.orders.base.mapper")
+//@Import({OrderStateMachine.class})
+@EnableConfigurationProperties({DispatchProperties.class, ExecutorProperties.class})
+public class AutoImportConfiguration {
+}
diff --git a/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/constants/ErrorInfo.java b/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/constants/ErrorInfo.java
new file mode 100644
index 0000000..5701188
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/constants/ErrorInfo.java
@@ -0,0 +1,12 @@
+package com.jzo2o.orders.base.constants;
+
+public class ErrorInfo {
+ public static class Msg {
+ public static final String SEIZE_ORDERS_FAILD = "单子已经被抢走了";
+ public static final String SEIZE_ORDERS_SERVE_TIME_EXISTS = "当前服务预约时间冲突";
+ public static final String SEIZE_ORDERS_RECEIVE_ORDERS_NUM_OVER = "当前接单数已超出范围";
+
+ public static final String SEIZE_ORDERS_RECEIVE_CLOSED = "当前接单设置已关闭,如需抢单,需开启接单";
+
+ }
+}
diff --git a/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/constants/EsIndexConstants.java b/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/constants/EsIndexConstants.java
new file mode 100644
index 0000000..c8c00be
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/constants/EsIndexConstants.java
@@ -0,0 +1,10 @@
+package com.jzo2o.orders.base.constants;
+
+public class EsIndexConstants {
+ /**
+ * 服务人员信息索引
+ */
+ public static final String SERVER_PROVIDER_INFO = "serve_provider_info";
+
+ public static final String ORDERS_SEIZE = "orders_seize";
+}
diff --git a/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/constants/FieldConstants.java b/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/constants/FieldConstants.java
new file mode 100644
index 0000000..976c002
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/constants/FieldConstants.java
@@ -0,0 +1,50 @@
+package com.jzo2o.orders.base.constants;
+
+public class FieldConstants {
+ /**
+ * 预约时间
+ */
+ public static final String SERVE_START_TIME = "serve_start_time";
+
+ /**
+ * 城市编码
+ */
+ public static final String CITY_CODE = "city_code";
+
+ /**
+ * 服务类型id
+ */
+ public static final String SERVE_TYPE_ID = "serve_type_id";
+
+ /**
+ * 服务项id
+ */
+ public static final String SERVE_ITEM_ID = "serve_item_id";
+
+ /**
+ * 服务类型名称
+ */
+ public static final String SERVE_TYPE_NAME = "serve_type_name";
+
+ /**
+ * 服务项名称
+ */
+ public static final String SERVE_ITEM_NAME = "serve_item_name";
+
+ /**
+ * 关键字字段
+ */
+ public static final String KEY_WORDS = "key_words";
+
+ /**
+ * 经纬度
+ */
+ public static final String LOCATION = "location";
+
+ public static final String SERVE_TIME = "serve_time";
+
+ /**
+ * 排序字段
+ */
+ public static final String SORT_BY = "sort_by";
+}
diff --git a/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/constants/OrderConstants.java b/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/constants/OrderConstants.java
new file mode 100644
index 0000000..4978812
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/constants/OrderConstants.java
@@ -0,0 +1,36 @@
+package com.jzo2o.orders.base.constants;
+
+/**
+ * 订单常量
+ *
+ * @author itcast
+ * @create 2023/7/28 15:06
+ **/
+public class OrderConstants {
+ public static final class Status {
+ public static final String NO_PAY = "NO_PAY";
+ public static final String DISPATCHING = "DISPATCHING";
+ public static final String NO_SERVE = "NO_SERVE";
+ public static final String SERVING = "SERVING";
+ public static final String NO_EVALUATION = "NO_EVALUATION";
+ public static final String FINISHED = "FINISHED";
+ public static final String CANCELED = "CANCELED";
+ public static final String CHARGEBACK = "CHARGEBACK";
+ }
+
+ public static final class ChangeEvent {
+ public static final String PAYED = "PAYED";
+ public static final String DISPATCH = "DISPATCH";
+ public static final String START_SERVE = "START_SERVE";
+ public static final String COMPLETE_SERVE = "COMPLETE_SERVE";
+ public static final String EVALUATE = "EVALUATE";
+ public static final String CANCEL = "CANCEL";
+ public static final String SERVE_PROVIDER_CANCEL = "SERVE_PROVIDER_CANCEL";
+
+ public static final String CLOSE_DISPATCHING_ORDER = "CLOSE_DISPATCHING_ORDER";
+ public static final String CLOSE_NO_SERVE_ORDER = "CLOSE_NO_SERVE_ORDER";
+ public static final String CLOSE_SERVING_ORDER = "CLOSE_SERVING_ORDER";
+ public static final String CLOSE_NO_EVALUATION_ORDER = "CLOSE_NO_EVALUATION_ORDER";
+ public static final String CLOSE_FINISHED_ORDER = "CLOSE_FINISHED_ORDER";
+ }
+}
diff --git a/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/constants/OrdersOriginType.java b/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/constants/OrdersOriginType.java
new file mode 100644
index 0000000..e1781f4
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/constants/OrdersOriginType.java
@@ -0,0 +1,6 @@
+package com.jzo2o.orders.base.constants;
+
+public class OrdersOriginType {
+ public static final int SEIZE = 1;
+ public static final int DISPATCH = 2;
+}
diff --git a/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/constants/RedisConstants.java b/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/constants/RedisConstants.java
new file mode 100644
index 0000000..7b559a2
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/constants/RedisConstants.java
@@ -0,0 +1,169 @@
+package com.jzo2o.orders.base.constants;
+
+public class RedisConstants {
+ public static final class RedisFormatter {
+ /**
+ * 抢单用户锁模板,格式:ORDERS:SEIZE_#{serveProviderId}
+ */
+ public static final String SEIZE = "ORDERS:SEIZE_#{serveProviderId}";
+
+ /**
+ * 派单锁模板,格式:ORDERS:DISPATCH_#{id}
+ */
+ public static final String DISPATCH = "ORDERS:DISPATCH_#{id}";
+ /**
+ * 加入派单池锁模板,格式:ORDERS:JSONDISPATCHLIST_#{id}
+ */
+ public static final String JSONDISPATCHLIST = "ORDERS:JSONDISPATCHLIST_#{id}";
+
+ public static final String REJECT = "ORDERS:DISPATCH:REJECT_#{dispatchRejectReqDTO.id}";
+
+ /**
+ * 抢单超时
+ */
+ public static final String SEIZE_TIME_OUT = "ORDERS:SEIZE:TIME_OUT:#{cityCode}";
+
+ public static final String ORDERS_SERVE_TIMEOUT = "ORDERS:SEVER_TIMEOUT:#{ordersServe.id}";
+ }
+ public static final class RedisKey {
+ /**
+ * 抢单id列表redis key模板:ORDERS:SEIZE:IDS_{服务人员id或机构id}_{citycode}
+ */
+ public static final String ORDERS_SEIZE_IDS_FOR_SERVE_PROVIDE = "ORDERS:SEIZE:IDS_%s_%s";
+
+ /**
+ * 抢单列表redis key模板:ORDERS:SEIZE:PAGE_{citycode}
+ */
+ public static final String ORDERS_SEIZE_PAGE = "ORDERS:SEIZE:PAGE_%s";
+
+ // 抢单相关
+ /**
+ *抢单池,key格式:ORDERS:SEIZE:POOL_{抢单id}_{抢单id尾号}
+ */
+ public static final String ORDERS_SEIZE = "ORDERS:SEIZE:%s_{%s}";
+
+ /**
+ * 抢单结果同步队列,该队列分为10条,格式:ORDERS:SEIZE:SYNC_{抢单id尾号}
+ * 序号分别为:0到9的10个数字
+ */
+ public static final String ORERS_SEIZE_SYNC_QUEUE_NAME = "ORDERS:SEIZE:SYNC";
+
+ /**
+ * 当前用户/机构当前接单数量,接单+派单总数量
+ * 接单+派单操作+1
+ * 完成服务/取消服务-1
+ * 格式:PROVIDER:SERVE:NUM_{cityCode}_{序号}
+ */
+ public static final String PROVIDER_SERVE_NUM = "PROVIDER:SERVE:NUM_%s_{%s}";
+
+ /**
+ * 所有服务单放在一起
+ */
+ public static final String SERVE_ORDERS = "SERVE_ORDERS:PAGE_QUERY:PAGE_%s";
+
+ public static final String SERVE_ORDERS_KEY = "SERVE_ORDERS:PAGE_QUERY:PAGE_#{serveProviderId}";
+
+ /**
+ * 服务人员或机构每日取消服务单次数
+ */
+ public static final String SERVE_CANCEL_TIMES_EVERY_DAY = "ORDERS:SERVE:CANCEL_%s_%s";
+
+ public static final String SERVE_TIME_UPDATE = "ORDERS:SERVE_TIME:#{id}";
+
+ /**
+ * 库存,hash结构
+ */
+ public static final String ORDERS_RESOURCE_STOCK = "ORDERS:RESOURCE:STOCK:{%s}";
+
+ /**
+ * 派单连续失败次数 string
+ */
+ public static final String ORDERS_DISPATCH_FAILD_TIMES = "ORDERS:DISPATCH:FAILD_TIMES_%s_{%s}";
+
+ /**
+ * 派单成功同步队列名称
+ */
+ public static final String ORERS_DISPATCH_SYNC_QUEUE_NAME = "ORDERS:DISPATCH:SYNC";
+
+ /**
+ * 服务时间状态 string 格式:PROVIDER:SERVE_TIME:{serveProviderId}_{serveTime}_{序号}
+ */
+ public static final String SERVE_PROVIDER_TIMES = "PROVIDER:SERVE_TIME:%s_%s_{%s}";
+
+ /**
+ * 服务状态表 hash 格式:PROVIDER:SERVE_STATE:{序号}
+ * key 格式:{服务人员/机构id}_{times或num};time表示接单时间列表,nun表示接单数量
+ */
+ public static final String SERVE_PROVIDER_STATE = "PROVIDER:SERVE_STATE:{%s}";
+
+ /**
+ * 派单列表 - zSet结构
+ */
+ public static final String DISPATCH_LIST = "ORDERS:DISPATCH:LIST";
+
+ /**
+ * 用户端滚动分页查询订单
+ */
+ public static final String ORDERS = "ORDERS:PAGE_QUERY:PAGE_%s";
+ }
+
+ public static class Lock {
+ /**
+ * 抢派单分布式锁
+ */
+ public static final String DISPATCH_OR_SEIZE_LOCK = "ORDERS:DISPATCH_OR_SEIZE:%s";
+
+ public static final String PROVIDER_DISPATCH_LOCK = "PROVIDER:DISPATCH:LOCK_%s";
+
+ /**
+ * 派单同步锁定同步队列redis分布式锁
+ */
+ public static final String DISPATCH_SYNC_LOCK = "ORDERS:DISPATCH:SYNC_%s";
+
+ /**
+ * 接单超时
+ */
+ public static final String DISPATCH_RECEIVE_TIMEOUT_LOCK = "ORDERS:DISPATCH:TIMEOUT";
+
+ /**
+ * 抢单单同步锁定同步队列redis分布式锁
+ */
+ public static final String SEIZE_SYNC_LOCK = "ORDERS:SEIZE:SYNC_%s";
+
+ /**
+ * 订单分片id获取锁
+ */
+ public static final String ORDERS_SHARD_KEY_ID_LOCK = "ORDERS:SHARD_KEY:LOCK";
+
+ public static final String ORDERS_SHARD_KEY_ID_GENERATOR = "ORDERS:SHARD_KEY:GENERATOR";
+
+ }
+ public static class Ttl {
+ /**
+ * 订单抢单缓存 60s
+ */
+ public static final long ORDERS_SEIZE_PAGE_TTL = 60;
+
+ /**
+ * 服务单分页有效期
+ */
+ public static final long SERVE_ORSERS_PAGE_TTL = 600;
+
+
+ /**
+ * 订单分页有效期
+ */
+ public static final long ORDERS_PAGE_TTL = 600;
+
+
+ /**
+ * 抢单派单处理超时时间单位s
+ */
+ public static final long DISPATCH_SEIZE_LOCK_TTL = 10;
+
+ /**
+ * 派单锁定,10分钟内不能再次派单
+ */
+ public static final long PROVIDER_DISPATCH_LOCK_TTL = 600;
+ }
+}
diff --git a/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/enums/BreachHaviorTypeEnum.java b/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/enums/BreachHaviorTypeEnum.java
new file mode 100644
index 0000000..6f36158
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/enums/BreachHaviorTypeEnum.java
@@ -0,0 +1,19 @@
+package com.jzo2o.orders.base.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * 违约行为枚举
+ */
+@AllArgsConstructor
+@Getter
+public enum BreachHaviorTypeEnum {
+ CANCEL_ALLOCATION(1,"机构取消未分配服务单违约行为"),
+ CANCEL_NO_SERVE(2,"机构或服务人员取消待服务订单违约行为"),
+ CANCEL_SERVING(3,"机构或服务人员取消服务中订单违约行为"),
+ DISPATCH_REJECT(4,"机构或服务人员拒绝接单违约行为");
+ private int type;
+ private String desc;
+
+}
diff --git a/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/enums/OrderPayStatusEnum.java b/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/enums/OrderPayStatusEnum.java
new file mode 100644
index 0000000..77e3f97
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/enums/OrderPayStatusEnum.java
@@ -0,0 +1,24 @@
+package com.jzo2o.orders.base.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * @author itcast
+ */
+
+@Getter
+@AllArgsConstructor
+public enum OrderPayStatusEnum {
+ NO_PAY(2, "未支付"),
+ PAY_SUCCESS(4, "支付成功");
+
+ private int status;
+ private final String desc;
+
+ public boolean equals(int status) {
+ return this.status == status;
+ }
+
+
+}
diff --git a/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/enums/OrderRefundStatusEnum.java b/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/enums/OrderRefundStatusEnum.java
new file mode 100644
index 0000000..823305f
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/enums/OrderRefundStatusEnum.java
@@ -0,0 +1,26 @@
+package com.jzo2o.orders.base.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * @author itcast
+ */
+
+@Getter
+@AllArgsConstructor
+public enum OrderRefundStatusEnum {
+// APPLY_REFUND(0, "发起退款"),
+ REFUNDING(1, "退款中"),
+ REFUND_SUCCESS(2, "退款成功"),
+ REFUND_FAIL(3, "退款失败");
+
+ private int status;
+ private final String desc;
+
+ public boolean equals(int status) {
+ return this.status == status;
+ }
+
+
+}
diff --git a/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/enums/OrderStatusChangeEventEnum.java b/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/enums/OrderStatusChangeEventEnum.java
new file mode 100644
index 0000000..da5d604
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/enums/OrderStatusChangeEventEnum.java
@@ -0,0 +1,44 @@
+package com.jzo2o.orders.base.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * @author itcast
+ */
+@Getter
+@AllArgsConstructor
+public enum OrderStatusChangeEventEnum {
+ PAYED(OrderStatusEnum.NO_PAY, OrderStatusEnum.DISPATCHING, "支付成功", "payed"),
+ DISPATCH(OrderStatusEnum.DISPATCHING, OrderStatusEnum.NO_SERVE, "接单/抢单成功", "dispatch"),
+ START_SERVE(OrderStatusEnum.NO_SERVE, OrderStatusEnum.SERVING, "开始服务", "start_serve"),
+ COMPLETE_SERVE(OrderStatusEnum.SERVING, OrderStatusEnum.FINISHED, "完成服务", "complete_serve"),
+// EVALUATE(OrderStatusEnum.NO_EVALUATION, OrderStatusEnum.FINISHED, "评价完成", "evaluate"),
+ CANCEL(OrderStatusEnum.NO_PAY, OrderStatusEnum.CANCELED, "取消订单", "cancel"),
+ SERVE_PROVIDER_CANCEL(OrderStatusEnum.NO_SERVE, OrderStatusEnum.DISPATCHING, "服务人员/机构取消订单", "serve_provider_cancel"),
+ CLOSE_DISPATCHING_ORDER(OrderStatusEnum.DISPATCHING, OrderStatusEnum.CLOSED, "派单中订单关闭", "close_dispatching_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_NO_EVALUATION_ORDER(OrderStatusEnum.NO_EVALUATION, OrderStatusEnum.CLOSED, "待评价订单关闭", "close_no_evaluation_order"),
+ CLOSE_FINISHED_ORDER(OrderStatusEnum.FINISHED, OrderStatusEnum.CLOSED, "已完成订单关闭", "close_finished_order");
+
+ /**
+ * 源状态
+ */
+ private final OrderStatusEnum sourceStatus;
+
+ /**
+ * 目标状态
+ */
+ private final OrderStatusEnum targetStatus;
+
+ /**
+ * 描述
+ */
+ private final String desc;
+
+ /**
+ * 代码
+ */
+ private final String code;
+}
\ No newline at end of file
diff --git a/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/enums/OrderStatusEnum.java b/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/enums/OrderStatusEnum.java
new file mode 100644
index 0000000..be199ab
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/enums/OrderStatusEnum.java
@@ -0,0 +1,39 @@
+package com.jzo2o.orders.base.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * @author itcast
+ */
+@Getter
+@AllArgsConstructor
+public enum OrderStatusEnum {
+ NO_PAY(0, "待支付", "NO_PAY"),
+ DISPATCHING(100, "派单中", "DISPATCHING"),
+ NO_SERVE(200, "待服务", "NO_SERVE"),
+ SERVING(300, "服务中", "SERVING"),
+// NO_EVALUATION(400, "待评价", "NO_EVALUATION"),
+ FINISHED(500, "已完成", "FINISHED"),
+ CANCELED(600, "已取消", "CANCELED"),
+ CLOSED(700, "已关闭", "CLOSED");
+
+ private final Integer status;
+ private final String desc;
+ private final String code;
+
+ /**
+ * 根据状态值获得对应枚举
+ *
+ * @param status 状态
+ * @return 状态对应枚举
+ */
+ public static OrderStatusEnum codeOf(Integer status) {
+ for (OrderStatusEnum orderStatusEnum : values()) {
+ if (orderStatusEnum.status.equals(status)) {
+ return orderStatusEnum;
+ }
+ }
+ return null;
+ }
+}
diff --git a/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/enums/ServeStatusEnum.java b/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/enums/ServeStatusEnum.java
new file mode 100644
index 0000000..4267dd0
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/enums/ServeStatusEnum.java
@@ -0,0 +1,21 @@
+package com.jzo2o.orders.base.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@Getter
+@AllArgsConstructor
+public enum ServeStatusEnum {
+
+ NO_ALLOCATION(0, "待分配"),
+ NO_SERVED(1,"待服务"),
+ SERVING(2,"服务中"),
+ SERVE_FINISHED(3, "服务完成"),
+ CANCLE(4, "取消");
+ private int status;
+ private String desc;
+
+ public boolean equals(Integer status) {
+ return status != null && status.equals(this.getStatus());
+ }
+}
diff --git a/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/mapper/BreachRecordMapper.java b/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/mapper/BreachRecordMapper.java
new file mode 100644
index 0000000..7f10fe3
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/mapper/BreachRecordMapper.java
@@ -0,0 +1,34 @@
+package com.jzo2o.orders.base.mapper;
+
+import com.jzo2o.orders.base.model.domain.BreachRecord;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Insert;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+
+import java.util.List;
+
+/**
+ *
+ * 违约记录 Mapper 接口
+ *
+ *
+ * @author itcast
+ * @since 2023-08-02
+ */
+public interface BreachRecordMapper extends BaseMapper {
+
+ /**
+ * 批量添加违约记录
+ * @param breachRecords
+ * @return
+ */
+// @Insert("")
+// Integer batchAdd(@Param("breachRecords")List breachRecords);
+
+}
diff --git a/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/mapper/HistoryOrdersServeSyncMapper.java b/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/mapper/HistoryOrdersServeSyncMapper.java
new file mode 100644
index 0000000..8b3f59d
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/mapper/HistoryOrdersServeSyncMapper.java
@@ -0,0 +1,21 @@
+package com.jzo2o.orders.base.mapper;
+
+import com.jzo2o.orders.base.model.domain.HistoryOrdersServeSync;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Select;
+
+import java.time.LocalDateTime;
+
+/**
+ *
+ * 服务任务 Mapper 接口
+ *
+ *
+ * @author itcast
+ * @since 2023-09-14
+ */
+public interface HistoryOrdersServeSyncMapper extends BaseMapper {
+
+ @Select("select max(sort_time) from history_orders_sync")
+ LocalDateTime queryMaxSortTime();
+}
diff --git a/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/mapper/HistoryOrdersSyncMapper.java b/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/mapper/HistoryOrdersSyncMapper.java
new file mode 100644
index 0000000..e16369e
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/mapper/HistoryOrdersSyncMapper.java
@@ -0,0 +1,21 @@
+package com.jzo2o.orders.base.mapper;
+
+import com.jzo2o.orders.base.model.domain.HistoryOrdersSync;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Select;
+
+import java.time.LocalDateTime;
+
+/**
+ *
+ * 历史订单完成15天后同步到历史订单同步表中,通过canal同步到历史订单库中;1天后删除(删除条件当天数据和历史订单库中的订单数据数量一致) Mapper 接口
+ *
+ *
+ * @author itcast
+ * @since 2023-09-13
+ */
+public interface HistoryOrdersSyncMapper extends BaseMapper {
+
+ @Select("select max(sort_time) from history_orders_sync")
+ LocalDateTime queryMaxSortTime();
+}
diff --git a/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/mapper/OrdersCanceledMapper.java b/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/mapper/OrdersCanceledMapper.java
new file mode 100644
index 0000000..5a3390f
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/mapper/OrdersCanceledMapper.java
@@ -0,0 +1,16 @@
+package com.jzo2o.orders.base.mapper;
+
+import com.jzo2o.orders.base.model.domain.OrdersCanceled;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ *
+ * Mapper 接口
+ *
+ *
+ * @author itcast
+ * @since 2023-08-19
+ */
+public interface OrdersCanceledMapper extends BaseMapper {
+
+}
diff --git a/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/mapper/OrdersDispatchMapper.java b/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/mapper/OrdersDispatchMapper.java
new file mode 100644
index 0000000..779e9aa
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/mapper/OrdersDispatchMapper.java
@@ -0,0 +1,27 @@
+package com.jzo2o.orders.base.mapper;
+
+import com.jzo2o.orders.base.model.domain.OrdersDispatch;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Insert;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ *
+ * 派单池 Mapper 接口
+ *
+ *
+ * @author itcast
+ * @since 2023-08-08
+ */
+public interface OrdersDispatchMapper extends BaseMapper {
+
+// @Insert("")
+// Integer batchAdd(@Param("records")List ordersDispatches);
+
+}
diff --git a/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/mapper/OrdersMapper.java b/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/mapper/OrdersMapper.java
new file mode 100644
index 0000000..b1de8d7
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/mapper/OrdersMapper.java
@@ -0,0 +1,22 @@
+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 org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Update;
+
+import java.time.LocalDateTime;
+
+/**
+ *
+ * 订单表 Mapper 接口
+ *
+ *
+ * @author itcast
+ * @since 2023-08-02
+ */
+public interface OrdersMapper extends BaseMapper {
+
+
+}
diff --git a/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/mapper/OrdersRefundMapper.java b/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/mapper/OrdersRefundMapper.java
new file mode 100644
index 0000000..da50b0b
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/mapper/OrdersRefundMapper.java
@@ -0,0 +1,16 @@
+package com.jzo2o.orders.base.mapper;
+
+import com.jzo2o.orders.base.model.domain.OrdersRefund;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ *
+ * 订单退款表 Mapper 接口
+ *
+ *
+ * @author itcast
+ * @since 2023-09-07
+ */
+public interface OrdersRefundMapper extends BaseMapper {
+
+}
diff --git a/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/mapper/OrdersSeizeMapper.java b/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/mapper/OrdersSeizeMapper.java
new file mode 100644
index 0000000..7b0fd7e
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/mapper/OrdersSeizeMapper.java
@@ -0,0 +1,16 @@
+package com.jzo2o.orders.base.mapper;
+
+import com.jzo2o.orders.base.model.domain.OrdersSeize;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ *
+ * 抢单池 Mapper 接口
+ *
+ *
+ * @author itcast
+ * @since 2023-08-15
+ */
+public interface OrdersSeizeMapper extends BaseMapper {
+
+}
diff --git a/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/mapper/OrdersServeMapper.java b/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/mapper/OrdersServeMapper.java
new file mode 100644
index 0000000..68bbb5a
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/mapper/OrdersServeMapper.java
@@ -0,0 +1,26 @@
+package com.jzo2o.orders.base.mapper;
+
+import com.jzo2o.orders.base.model.domain.OrdersServe;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Delete;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ *
+ * 服务任务 Mapper 接口
+ *
+ *
+ * @author itcast
+ * @since 2023-08-02
+ */
+public interface OrdersServeMapper extends BaseMapper {
+
+ /**
+ * 物理删除服务单
+ * @param id 服务单id
+ * @param serveProviderId 服务人员或机构id
+ * @return 删除数量
+ */
+// @Delete("delete from orders_serve where id=#{id} and serve_provider_id=#{serveProviderId}")
+// Integer deleteByIdAndServeProviderId(@Param("id") Long id, @Param("serveProviderId") Long serveProviderId);
+}
diff --git a/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/mapper/ServeProviderSyncMapper.java b/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/mapper/ServeProviderSyncMapper.java
new file mode 100644
index 0000000..b7d66eb
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/mapper/ServeProviderSyncMapper.java
@@ -0,0 +1,21 @@
+package com.jzo2o.orders.base.mapper;
+
+import com.jzo2o.orders.base.model.domain.ServeProviderSync;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Update;
+
+/**
+ *
+ * 机构服务端更新服务时间 Mapper 接口
+ *
+ *
+ * @author itcast
+ * @since 2023-08-09
+ */
+public interface ServeProviderSyncMapper extends BaseMapper {
+
+// @Update("update serve_provider_sync set serve_times=JSON_ARRAY_APPEND(serve_times,'$',#{serveTime})," +
+// "acceptance_num=acceptance_num+1 where id=#{id}")
+// int addServeTimes(@Param("id")Long id, @Param("serveTime") Integer serveTime);
+}
diff --git a/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/model/domain/BreachRecord.java b/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/model/domain/BreachRecord.java
new file mode 100644
index 0000000..9c52b73
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/model/domain/BreachRecord.java
@@ -0,0 +1,95 @@
+package com.jzo2o.orders.base.model.domain;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ *
+ * 违约记录
+ *
+ *
+ * @author itcast
+ * @since 2023-08-06
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("breach_record")
+public class BreachRecord implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 违约id
+ */
+ @TableId(value = "id", type = IdType.NONE)
+ private Long id;
+
+ /**
+ * 违约机构或师傅
+ */
+ private Long serveProviderId;
+
+ /**
+ * 类型,2:师傅、3:机构
+ */
+ private Integer serveProviderType;
+
+ /**
+ * 行为类型,1:待分配时取消,2:待服务时取消,3:服务中取消,4:派单拒绝,5:派单超时
+ */
+ private Integer behaviorType;
+
+ /**
+ * 违约原因
+ */
+ private String breachReason;
+
+ /**
+ * 服务项名称
+ */
+ private String serveItemName;
+
+ /**
+ * 服务地址
+ */
+ private String serveAddress;
+
+ /**
+ * 被服务人
+ */
+ private Long servedUserId;
+
+ /**
+ * 被服务人员手机号,脱敏
+ */
+ private String servedPhone;
+
+ /**
+ * 违约时间
+ */
+ private LocalDateTime breachTime;
+
+ /**
+ * 违约日,格式例如20200512,2020年5月12日
+ */
+ private Integer breachDay;
+
+ /**
+ * 违约单订单id
+ */
+ private Long ordersId;
+
+ /**
+ * 服务单id
+ */
+ private Long ordersServeId;
+
+
+}
diff --git a/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/model/domain/CurrentServeProviderTime.java b/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/model/domain/CurrentServeProviderTime.java
new file mode 100644
index 0000000..3088dfd
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/model/domain/CurrentServeProviderTime.java
@@ -0,0 +1,38 @@
+package com.jzo2o.orders.base.model.domain;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.io.Serializable;
+import java.util.List;
+
+import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ *
+ * 机构服务端更新服务时间
+ *
+ *
+ * @author itcast
+ * @since 2023-08-08
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName(value = "current_serve_provider_time",autoResultMap = true)
+public class CurrentServeProviderTime implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "id", type = IdType.NONE)
+ private Long id;
+
+ @TableField(typeHandler = JacksonTypeHandler.class)
+ private List serveTimes;
+
+
+}
diff --git a/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/model/domain/HistoryOrdersServeSync.java b/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/model/domain/HistoryOrdersServeSync.java
new file mode 100644
index 0000000..d692a88
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/model/domain/HistoryOrdersServeSync.java
@@ -0,0 +1,222 @@
+package com.jzo2o.orders.base.model.domain;
+
+import java.math.BigDecimal;
+import com.baomidou.mybatisplus.annotation.IdType;
+import java.time.LocalDateTime;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.io.Serializable;
+import java.util.List;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ *
+ * 服务任务
+ *
+ *
+ * @author itcast
+ * @since 2023-09-14
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName(value = "history_orders_serve_sync",autoResultMap = true)
+public class HistoryOrdersServeSync implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 服务单id,和
+ */
+ @TableId(value = "id", type = IdType.NONE)
+ private Long id;
+
+ /**
+ * 服务人员或服务机构id
+ */
+ private Long serveProviderId;
+
+ /**
+ * 服务者类型,2:服务端服务,3:机构端服务
+ */
+ private Integer serveProviderType;
+
+ /**
+ * 机构服务人员id
+ */
+ private Long institutionStaffId;
+
+ /**
+ * 机构工作人员姓名
+ */
+ private String institutionStaffName;
+ /**
+ * 机构名称
+ */
+ private String institutionName;
+
+ /**
+ * 订单来源类型,1:抢单,2:派单
+ */
+ private Integer ordersOriginType;
+
+ /**
+ * 客户姓名
+ */
+ private String contactsName;
+
+ /**
+ * 客户电话
+ */
+ private String contactsPhone;
+
+ /**
+ * 服务地址
+ */
+ private String serveAddress;
+
+ /**
+ * 城市编码
+ */
+ private String cityCode;
+
+ /**
+ * 服务分类id
+ */
+ private Long serveTypeId;
+
+ /**
+ * 服务分裂名称
+ */
+ private String serveTypeName;
+
+ /**
+ * 预约时间
+ */
+ private LocalDateTime serveStartTime;
+
+ /**
+ * 服务项名称
+ */
+ private String serveItemName;
+
+ /**
+ * 服务项id
+ */
+ private Long serveItemId;
+
+ /**
+ * 服务图片
+ */
+ private String serveItemImg;
+
+ /**
+ * 服务单状态,3:服务完成,4:订单关闭
+ */
+ private Integer serveStatus;
+
+ /**
+ * 服务人姓名
+ */
+ private String serveProviderStaffName;
+
+ /**
+ * 服务人手机号
+ */
+ private String serveProviderStaffPhone;
+
+ /**
+ * 取消人姓名
+ */
+ private String cancelerName;
+ /**
+ * 取消/被退单时间
+ */
+ private LocalDateTime cancelTime;
+
+ /**
+ * 取消/被退单原因
+ */
+ private String cancelReason;
+
+ /**
+ * 实际服务开始时间
+ */
+ private LocalDateTime realServeStartTime;
+
+ /**
+ * 实际服务完结时间
+ */
+ private LocalDateTime realServeEndTime;
+
+ /**
+ * 服务前照片
+ */
+ @TableField(typeHandler = JacksonTypeHandler.class)
+ private List serveBeforeImgs;
+
+ /**
+ * 服务后照片
+ */
+ @TableField(typeHandler = JacksonTypeHandler.class)
+ private List serveAfterImgs;
+
+ /**
+ * 服务前说明
+ */
+ private String serveBeforeIllustrate;
+
+ /**
+ * 服务后说明
+ */
+ private String serveAfterIllustrate;
+
+ /**
+ * 订单金额
+ */
+ private BigDecimal ordersAmount;
+
+ /**
+ * 服务数量
+ */
+ private Integer serveNum;
+
+ /**
+ * 服务单位
+ */
+ private Integer unit;
+
+ /**
+ * 服务端/机构端是否展示,1:展示,0:隐藏
+ */
+ private Integer display;
+
+ /**
+ * 是否是逻辑删除
+ */
+ private Integer isDeleted;
+
+ /**
+ * 更新人
+ */
+ private Long updateBy;
+
+ /**
+ * 排序时间(15天后数据无法再次修改,并迁移到历史订单中)
+ */
+ private LocalDateTime sortTime;
+
+ /**
+ * 更新时间
+ */
+ private LocalDateTime updateTime;
+
+
+}
diff --git a/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/model/domain/HistoryOrdersSync.java b/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/model/domain/HistoryOrdersSync.java
new file mode 100644
index 0000000..274a0ae
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/model/domain/HistoryOrdersSync.java
@@ -0,0 +1,301 @@
+package com.jzo2o.orders.base.model.domain;
+
+import java.math.BigDecimal;
+import com.baomidou.mybatisplus.annotation.IdType;
+import java.time.LocalDateTime;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.io.Serializable;
+import java.util.List;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ *
+ * 历史订单完成15天后同步到历史订单同步表中,通过canal同步到历史订单库中;1天后删除(删除条件当天数据和历史订单库中的订单数据数量一致)
+ *
+ *
+ * @author itcast
+ * @since 2023-09-13
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName(value = "history_orders_sync",autoResultMap = true)
+public class HistoryOrdersSync implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 订单id
+ */
+ @TableId(value = "id", type = IdType.NONE)
+ private Long id;
+
+ /**
+ * 订单所属人
+ */
+ private Long userId;
+
+ /**
+ * 服务类型id
+ */
+ private Long serveTypeId;
+
+ /**
+ * 服务人
+ */
+ private Long serveProviderId;
+
+ /**
+ * 服务人类型,2:服务人员,3:机构
+ */
+ private Integer serveProviderType;
+
+ /**
+ * 服务项id
+ */
+ private Long serveItemId;
+
+ /**
+ * 服务id
+ */
+ private Long serveId;
+
+ /**
+ * 城市编码
+ */
+ private String cityCode;
+
+ /**
+ * 服务类型名称
+ */
+ private String serveTypeName;
+
+ /**
+ * 服务项名称
+ */
+ private String serveItemName;
+
+ /**
+ * 服务项图片
+ */
+ private String serveItemImg;
+
+ /**
+ * 服务单位
+ */
+ private Integer unit;
+
+ /**
+ * 订单状态,500:订单完成,600:已取消,700:已关闭
+ */
+ private Integer ordersStatus;
+
+ /**
+ * 支付状态,1:支付成功,2:已关闭
+ */
+ private Integer payStatus;
+
+
+ /**
+ * 退款,0:发起退款,1:退款中,2:退款成功 3:退款失败
+ */
+ private Integer refundStatus;
+
+ /**
+ * 订单完成时间
+ */
+ private LocalDateTime tradeFinishTime;
+
+ /**
+ * 支付渠道,ALI_PAY:支付宝,WECHAT_PAY:微信
+ */
+ private String tradingChannel;
+
+ /**
+ * 支付流水
+ */
+ private String thirdOrderId;
+
+ /**
+ * 派单时间
+ */
+ private LocalDateTime dispatchTime;
+
+ /**
+ * 单价
+ */
+ private BigDecimal price;
+
+ /**
+ * 购买数量
+ */
+ private Integer purNum;
+
+ /**
+ * 订单总金额
+ */
+ private BigDecimal totalAmount;
+
+ /**
+ * 实际支付金额
+ */
+ private BigDecimal realPayAmount;
+
+ /**
+ * 退款流水
+ */
+ private String thirdRefundOrderId;
+
+ /**
+ * 取消人姓名
+ */
+ private String cancelerName;
+
+ /**
+ * 优惠金额
+ */
+ private BigDecimal discountAmount;
+
+ /**
+ * 服务详细地址
+ */
+ private String serveAddress;
+
+ /**
+ * 联系人手机号
+ */
+ private String contactsPhone;
+
+ /**
+ * 联系人姓名
+ */
+ private String contactsName;
+
+ /**
+ * 服务人姓名
+ */
+ private String serveProviderStaffName;
+
+ /**
+ * 服务人手机号
+ */
+ private String serveProviderStaffPhone;
+
+ /**
+ * 机构名称
+ */
+ private String institutionName;
+
+ /**
+ * 机构电话
+ */
+ private String institutionPhone;
+
+ /**
+ * 下单时间
+ */
+ private LocalDateTime placeOrderTime;
+
+ /**
+ * 服务开始时间
+ */
+ private LocalDateTime serveStartTime;
+
+ /**
+ * 实际服务开始时间
+ */
+ private LocalDateTime realServeStartTime;
+
+ /**
+ * 实际服务结束时间
+ */
+ private LocalDateTime realServeEndTime;
+
+ /**
+ * 服务开始图片
+ */
+ @TableField(typeHandler = JacksonTypeHandler.class)
+ private List serveBeforeImgs;
+
+ /**
+ * 服务开始说明
+ */
+ private String serveBeforeIllustrate;
+
+ /**
+ * 服务完成图片
+ */
+ @TableField(typeHandler = JacksonTypeHandler.class)
+ private List serveAfterImgs;
+
+ /**
+ * 服务完成说明
+ */
+ private String serveAfterIllustrate;
+
+ /**
+ * 支付超时时间,该时间只对待支付有意义
+ */
+ private LocalDateTime paymentTimeout;
+
+ /**
+ * 经度
+ */
+ private Double lon;
+
+ /**
+ * 纬度
+ */
+ private Double lat;
+
+ /**
+ * 支付时间
+ */
+ private LocalDateTime payTime;
+
+ /**
+ * 取消/被退单时间
+ */
+ private LocalDateTime cancelTime;
+
+ /**
+ * 取消/被退单原因
+ */
+ private String cancelReason;
+
+ /**
+ * 下单年份,格式:yyyy
+ */
+ private Integer year;
+
+ /**
+ * 下单月份,格式:yyyyMM
+ */
+ private Integer month;
+
+ /**
+ * 下单所在日,格式:yyyyMMdd
+ */
+ private Integer day;
+
+ /**
+ * 下单所在小时,格式:yyyyMMddHH
+ */
+ private Integer hour;
+
+ /**
+ * 排序时间字段(15天后数据无法再次修改,并迁移到历史订单中)
+ */
+ private LocalDateTime sortTime;
+
+ private LocalDateTime updateTime;
+
+
+}
diff --git a/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/model/domain/Orders.java b/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/model/domain/Orders.java
new file mode 100644
index 0000000..56acf39
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/model/domain/Orders.java
@@ -0,0 +1,201 @@
+package com.jzo2o.orders.base.model.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ *
+ * 订单表
+ *
+ *
+ * @author itcast
+ * @since 2023-08-02
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("orders")
+public class Orders implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 订单id
+ */
+ @TableId(value = "id", type = IdType.NONE)
+ private Long id;
+
+ /**
+ * 订单所属人
+ */
+ private Long userId;
+
+ /**
+ * 服务类型id
+ */
+ private Long serveTypeId;
+
+ /**
+ * 服务类型名称
+ */
+ private String serveTypeName;
+
+ /**
+ * 服务项id
+ */
+ private Long serveItemId;
+
+ /**
+ * 服务项名称
+ */
+ private String serveItemName;
+
+ /**
+ * 服务项图片
+ */
+ private String serveItemImg;
+
+ /**
+ * 服务单位
+ */
+ private Integer unit;
+
+ /**
+ * 服务id
+ */
+ private Long serveId;
+
+ /**
+ * 订单状态,0:待支付,100:派单中,200:待服务,300:服务中,400:待评价,500:订单完成,600:已取消,700:已关闭
+ */
+ private Integer ordersStatus;
+
+ /**
+ * 交易状态,0:待支付,1:支付成功
+ */
+ private Integer payStatus;
+
+ /**
+ * 退款,0:发起退款,1:退款中,2:退款成功 3:退款失败
+ */
+ private Integer refundStatus;
+
+ /**
+ * 单价
+ */
+ private BigDecimal price;
+
+ /**
+ * 购买数量
+ */
+ private Integer purNum;
+
+ /**
+ * 订单总金额
+ */
+ private BigDecimal totalAmount;
+
+ /**
+ * 实际支付金额
+ */
+ private BigDecimal realPayAmount;
+
+ /**
+ * 优惠金额
+ */
+ private BigDecimal discountAmount;
+
+ /**
+ * 城市编码
+ */
+ private String cityCode;
+
+ /**
+ * 服务详细地址
+ */
+ private String serveAddress;
+
+ /**
+ * 联系人手机号
+ */
+ private String contactsPhone;
+
+ /**
+ * 联系人姓名
+ */
+ private String contactsName;
+
+ /**
+ * 服务开始时间
+ */
+ private LocalDateTime serveStartTime;
+
+ /**
+ * 经度
+ */
+ private Double lon;
+
+ /**
+ * 纬度
+ */
+ private Double lat;
+
+ /**
+ * 支付时间
+ */
+ private LocalDateTime payTime;
+
+ /**
+ * 评价时间
+ */
+ private LocalDateTime evaluationTime;
+
+ /**
+ * 用户端是否展示,1:展示,0:隐藏
+ */
+ private Integer display;
+
+ /**
+ * 排序字段(serve_start_time秒级时间戳+订单id后6位)
+ */
+ private Long sortBy;
+
+ private LocalDateTime createTime;
+
+ private LocalDateTime updateTime;
+
+ /**
+ * 支付服务交易单号
+ */
+ private Long tradingOrderNo;
+
+ /**
+ * 第三方支付的交易号
+ */
+ private String transactionId;
+
+ /**
+ * 支付服务退款单号
+ */
+ private Long refundNo;
+
+ /**
+ * 第三方支付的退款单号
+ */
+ private String refundId;
+
+ /**
+ * 支付渠道
+ */
+ private String tradingChannel;
+
+
+}
diff --git a/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/model/domain/OrdersCanceled.java b/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/model/domain/OrdersCanceled.java
new file mode 100644
index 0000000..bd7a5f4
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/model/domain/OrdersCanceled.java
@@ -0,0 +1,68 @@
+package com.jzo2o.orders.base.model.domain;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ *
+ *
+ *
+ *
+ * @author itcast
+ * @since 2023-08-19
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("orders_canceled")
+public class OrdersCanceled implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 订单id
+ */
+ @TableId(value = "id", type = IdType.ASSIGN_ID)
+ private Long id;
+
+ /**
+ * 取消人
+ */
+ private Long cancellerId;
+
+ /**
+ * 取消人名称
+ */
+ private String cancelerName;
+
+ /**
+ * 取消人类型,1:普通用户,4:运营人员
+ */
+ private Integer cancellerType;
+
+ /**
+ * 取消原因
+ */
+ private String cancelReason;
+
+ /**
+ * 取消时间
+ */
+ private LocalDateTime cancelTime;
+
+ /**
+ * 创建时间
+ */
+ private LocalDateTime createTime;
+
+ /**
+ * 更新时间
+ */
+ private LocalDateTime updateTime;
+}
diff --git a/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/model/domain/OrdersDispatch.java b/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/model/domain/OrdersDispatch.java
new file mode 100644
index 0000000..d0ad400
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/model/domain/OrdersDispatch.java
@@ -0,0 +1,114 @@
+package com.jzo2o.orders.base.model.domain;
+
+import java.math.BigDecimal;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.io.Serializable;
+
+import lombok.*;
+import lombok.experimental.Accessors;
+
+/**
+ *
+ * 派单池
+ *
+ *
+ * @author itcast
+ * @since 2023-08-08
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("orders_dispatch")
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+public class OrdersDispatch implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 订单id
+ */
+ @TableId(value = "id", type = IdType.NONE)
+ private Long id;
+
+ /**
+ * 城市编码
+ */
+ private String cityCode;
+
+ /**
+ * 服务分类id
+ */
+ private Long serveTypeId;
+
+ /**
+ * 服务名称
+ */
+ private String serveItemName;
+
+ /**
+ * 服务分类名称
+ */
+ private String serveTypeName;
+
+ /**
+ * 服务项id
+ */
+ private Long serveItemId;
+
+ /**
+ * 服务地址
+ */
+ private String serveAddress;
+
+ /**
+ * 服务项目图片
+ */
+ private String serveItemImg;
+
+ /**
+ * 订单金额
+ */
+ private BigDecimal ordersAmount;
+
+ /**
+ * 服务开始时间
+ */
+ private LocalDateTime serveStartTime;
+
+ /**
+ * 经度
+ */
+ private Double lon;
+
+ /**
+ * 纬度
+ */
+ private Double lat;
+
+ /**
+ * 服务数量
+ */
+ private Integer purNum;
+
+ /**
+ * 是否转人工
+ */
+ private Integer isTransferManual;
+
+ /**
+ * 创建时间
+ */
+ private LocalDateTime createTime;
+
+ /**
+ * 更新时间
+ */
+ private LocalDateTime updateTime;
+
+
+}
diff --git a/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/model/domain/OrdersRefund.java b/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/model/domain/OrdersRefund.java
new file mode 100644
index 0000000..b1fbb73
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/model/domain/OrdersRefund.java
@@ -0,0 +1,51 @@
+package com.jzo2o.orders.base.model.domain;
+
+import java.math.BigDecimal;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.time.LocalDateTime;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ *
+ * 订单退款表
+ *
+ *
+ * @author itcast
+ * @since 2023-09-07
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("orders_refund")
+public class OrdersRefund implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 订单id
+ */
+ @TableId(value = "id", type = IdType.ASSIGN_ID)
+ private Long id;
+
+ /**
+ * 支付服务交易单号
+ */
+ private Long tradingOrderNo;
+
+ /**
+ * 实付金额
+ */
+ private BigDecimal realPayAmount;
+
+ /**
+ * 创建时间
+ */
+ private LocalDateTime createTime;
+
+
+}
diff --git a/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/model/domain/OrdersSeize.java b/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/model/domain/OrdersSeize.java
new file mode 100644
index 0000000..63c5d32
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/model/domain/OrdersSeize.java
@@ -0,0 +1,122 @@
+package com.jzo2o.orders.base.model.domain;
+
+import java.math.BigDecimal;
+import com.baomidou.mybatisplus.annotation.IdType;
+import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.io.Serializable;
+
+import lombok.*;
+import lombok.experimental.Accessors;
+
+/**
+ *
+ * 抢单池
+ *
+ *
+ * @author itcast
+ * @since 2023-08-15
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class OrdersSeize implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 订单id
+ */
+ @TableId(value = "id", type = IdType.NONE)
+ private Long id;
+
+ /**
+ * 城市编码
+ */
+ private String cityCode;
+
+ /**
+ * 服务分类id
+ */
+ private Long serveTypeId;
+
+ /**
+ * 服务名称
+ */
+ private String serveItemName;
+
+ /**
+ * 服务分类名称
+ */
+ private String serveTypeName;
+
+ /**
+ * 服务项id
+ */
+ private Long serveItemId;
+
+ /**
+ * 服务地址
+ */
+ private String serveAddress;
+
+ /**
+ * 服务项目图片
+ */
+ private String serveItemImg;
+
+ /**
+ * 订单总金额
+ */
+ private BigDecimal ordersAmount;
+
+ /**
+ * 服务开始时间
+ */
+ private LocalDateTime serveStartTime;
+
+ /**
+ * 订单支付成功时间,用于计算是否进入派单
+ */
+ private LocalDateTime paySuccessTime;
+
+ /**
+ * 经度
+ */
+ private Double lon;
+
+ /**
+ * 纬度
+ */
+ private Double lat;
+
+ /**
+ * 服务数量
+ */
+ private Integer purNum;
+
+ /**
+ * 抢单是否超时
+ */
+ private Integer isTimeOut;
+
+ /**
+ * 抢单列表排序字段
+ */
+ private Long sortBy;
+
+ /**
+ * 创建时间
+ */
+ private LocalDateTime createTime;
+
+ /**
+ * 更新时间
+ */
+ private LocalDateTime updateTime;
+
+
+}
diff --git a/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/model/domain/OrdersServe.java b/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/model/domain/OrdersServe.java
new file mode 100644
index 0000000..596f1ff
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/model/domain/OrdersServe.java
@@ -0,0 +1,178 @@
+package com.jzo2o.orders.base.model.domain;
+
+import java.math.BigDecimal;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.io.Serializable;
+import java.util.List;
+
+import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ *
+ * 服务任务
+ *
+ *
+ * @author itcast
+ * @since 2023-08-02
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName(value = "orders_serve",autoResultMap = true)
+public class OrdersServe implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 任务id
+ */
+ @TableId(value = "id", type = IdType.NONE)
+ private Long id;
+
+ /**
+ * 属于哪个用户
+ */
+ private Long userId;
+
+ /**
+ * 服务人员或服务机构id
+ */
+ private Long serveProviderId;
+
+ /**
+ * 服务者类型,2:服务端服务,3:机构端服务
+ */
+ private Integer serveProviderType;
+
+ /**
+ * 机构服务人员id
+ */
+ private Long institutionStaffId;
+
+ /**
+ * 订单id
+ */
+ private Long ordersId;
+
+ /**
+ * 订单来源类型,1:抢单,2:派单
+ */
+ private Integer ordersOriginType;
+
+ /**
+ * 城市编码
+ */
+ private String cityCode;
+
+ /**
+ * 服务分类id
+ */
+ private Long serveTypeId;
+
+ /**
+ * 预约时间
+ */
+ private LocalDateTime serveStartTime;
+
+ /**
+ * 服务项id
+ */
+ private Long serveItemId;
+
+ /**
+ * 服务图片地址
+ */
+ private String serveItemImg;
+
+ /**
+ * 任务状态
+ */
+ private Integer serveStatus;
+
+ /**
+ * 结算状态,0:不可结算,1:待结算,2:结算完成
+ */
+ private Integer settlementStatus;
+
+ /**
+ * 实际服务开始时间
+ */
+ private LocalDateTime realServeStartTime;
+
+ /**
+ * 实际服务完结时间
+ */
+ private LocalDateTime realServeEndTime;
+
+ /**
+ * 服务前照片
+ */
+ @TableField(typeHandler = JacksonTypeHandler.class)
+ private List serveBeforeImgs;
+
+ /**
+ * 服务后照片
+ */
+ @TableField(typeHandler = JacksonTypeHandler.class)
+ private List serveAfterImgs;
+
+ /**
+ * 服务前说明
+ */
+ private String serveBeforeIllustrate;
+
+ /**
+ * 服务后说明
+ */
+ private String serveAfterIllustrate;
+
+ /**
+ * 取消时间,可以是退单,可以是取消时间
+ */
+ private LocalDateTime cancelTime;
+
+ /**
+ * 订单金额
+ */
+ private BigDecimal ordersAmount;
+
+ /**
+ * 购买数量
+ */
+ private Integer purNum;
+
+ /**
+ * 创建时间
+ */
+ private LocalDateTime createTime;
+
+ /**
+ * 更新时间
+ */
+ private LocalDateTime updateTime;
+
+ /**
+ * 排序字段(serve_start_time(秒级时间戳)+订单id(后6位))
+ */
+ private Long sortBy;
+
+ /**
+ * 服务端/机构端是否展示,1:展示,0:隐藏
+ */
+ private Integer display;
+
+
+ /**
+ * 更新人
+ */
+ private Long updateBy;
+
+
+}
diff --git a/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/model/domain/ServeProviderInfo.java b/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/model/domain/ServeProviderInfo.java
new file mode 100644
index 0000000..28d0c33
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/model/domain/ServeProviderInfo.java
@@ -0,0 +1,71 @@
+package com.jzo2o.orders.base.model.domain;
+
+import com.jzo2o.common.model.Location;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class ServeProviderInfo {
+ /**
+ * 服务人员或机构同步表
+ */
+ private Long id;
+
+ /**
+ * 类型,2:服务人员,3:机构
+ */
+ private Integer serveProviderType;
+
+ /**
+ * 技能列表
+ */
+ private List serveItemIds;
+
+ /**
+ * 经纬度
+ */
+ private Location location;
+
+ /**
+ * 城市编码
+ */
+ private String cityCode;
+
+// /**
+// * 接单距离
+// */
+// private Double receiveDistance;
+
+ /**
+ * 接单开关1,:接单开启,0:接单关闭
+ */
+ private Integer pickUp;
+
+ /**
+ * 评分,默认50分
+ */
+ private Double evaluationScore;
+
+ /**
+ * 服务时间
+ */
+ private List serveTimes;
+
+ /**
+ * 首次设置状态,0:未完成,1:已完成设置
+ */
+ private Integer settingStatus;
+
+ /**
+ * 接单数
+ */
+ private Integer acceptanceNum;
+
+ /**
+ * 状态,0:正常,1:冻结
+ */
+ private Integer status;
+}
diff --git a/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/model/domain/ServeProviderSync.java b/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/model/domain/ServeProviderSync.java
new file mode 100644
index 0000000..766bb69
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/model/domain/ServeProviderSync.java
@@ -0,0 +1,48 @@
+package com.jzo2o.orders.base.model.domain;
+
+import java.math.BigDecimal;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.io.Serializable;
+import java.util.List;
+
+import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ *
+ * 机构服务端更新服务时间
+ *
+ *
+ * @author itcast
+ * @since 2023-08-09
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName(value = "serve_provider_sync",autoResultMap = true)
+public class ServeProviderSync implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "id", type = IdType.NONE)
+ private Long id;
+
+ /**
+ * 服务时间段
+ */
+ @TableField(typeHandler = JacksonTypeHandler.class)
+ private List serveTimes;
+
+ /**
+ * 接单数
+ */
+ private Integer acceptanceNum;
+
+
+}
diff --git a/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/model/dto/OrderSnapshotDTO.java b/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/model/dto/OrderSnapshotDTO.java
new file mode 100644
index 0000000..62409bb
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/model/dto/OrderSnapshotDTO.java
@@ -0,0 +1,247 @@
+package com.jzo2o.orders.base.model.dto;
+
+//import com.jzo2o.statemachine.core.StateMachineSnapshot;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ * 订单快照
+ *
+ * @author itcast
+ * @create 2023/8/19 10:30
+ **/
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class OrderSnapshotDTO {
+ /**
+ * 订单id
+ */
+ private Long id;
+
+ /**
+ * 订单所属人
+ */
+ private Long userId;
+
+ /**
+ * 服务类型id
+ */
+ private Long serveTypeId;
+
+ /**
+ * 服务类型名称
+ */
+ private String serveTypeName;
+
+ /**
+ * 服务项id
+ */
+ private Long serveItemId;
+
+ /**
+ * 服务项名称
+ */
+ private String serveItemName;
+
+ /**
+ * 服务项图片
+ */
+ private String serveItemImg;
+
+ /**
+ * 服务单位
+ */
+ private Integer unit;
+
+ /**
+ * 服务id
+ */
+ private Long serveId;
+
+ /**
+ * 订单状态,0:待支付,100:派单中,200:待服务,300:服务中,500:订单完成,600:订单取消,700已关闭
+ */
+ private Integer ordersStatus;
+
+ /**
+ * 支付状态,2:待支付,4:支付成功
+ */
+ private Integer payStatus;
+
+ /**
+ * 退款,0:发起退款,1:退款中,2:退款成功 3:退款失败
+ */
+ private Integer refundStatus;
+
+ /**
+ * 单价
+ */
+ private BigDecimal price;
+
+ /**
+ * 购买数量
+ */
+ private Integer purNum;
+
+ /**
+ * 订单总金额
+ */
+ private BigDecimal totalAmount;
+
+ /**
+ * 实际支付金额
+ */
+ private BigDecimal realPayAmount;
+
+ /**
+ * 优惠金额
+ */
+ private BigDecimal discountAmount;
+
+ /**
+ * 城市编码
+ */
+ private String cityCode;
+
+ /**
+ * 服务详细地址
+ */
+ private String serveAddress;
+
+ /**
+ * 联系人手机号
+ */
+ private String contactsPhone;
+
+ /**
+ * 联系人姓名
+ */
+ private String contactsName;
+
+ /**
+ * 服务开始时间
+ */
+ private LocalDateTime serveStartTime;
+
+ /**
+ * 经度
+ */
+ private String lon;
+
+ /**
+ * 纬度
+ */
+ private String lat;
+
+ /**
+ * 支付时间
+ */
+ private LocalDateTime payTime;
+
+ /**
+ * 评价时间
+ */
+ private LocalDateTime evaluationTime;
+
+ /**
+ * 订单创建时间
+ */
+ private LocalDateTime createTime;
+
+ /**
+ * 订单更新时间
+ */
+ private LocalDateTime updateTime;
+
+ /**
+ * 支付服务交易单号
+ */
+ private Long tradingOrderNo;
+
+ /**
+ * 支付服务退款单号
+ */
+ private Long refundNo;
+
+
+
+ /**
+ * 支付渠道【支付宝、微信、现金、免单挂账】
+ */
+ private String tradingChannel;
+
+
+ /**
+ * 三方流水,微信支付订单号或支付宝订单号
+ */
+ private String thirdOrderId;
+
+ /**
+ * 退款三方流水,微信支付订单号或支付宝订单号
+ */
+ private String thirdRefundOrderId;
+
+
+ /**
+ * 取消人id
+ */
+ private Long cancellerId;
+
+ /**
+ * 取消人名称
+ */
+ private String cancelerName;
+
+ /**
+ * 取消人类型
+ */
+ private Integer cancellerType;
+
+ /**
+ * 取消时间
+ */
+ private LocalDateTime cancelTime;
+
+ /**
+ * 取消原因
+ */
+ private String cancelReason;
+
+ /**
+ * 实际服务完成时间
+ */
+ private LocalDateTime realServeEndTime;
+
+ /**
+ * 评价状态
+ */
+ private Integer evaluationStatus;
+
+
+// @Override
+// public String getSnapshotId() {
+// return String.valueOf(id);
+// }
+//
+// @Override
+// public Integer getSnapshotStatus() {
+// return ordersStatus;
+// }
+//
+// @Override
+// public void setSnapshotId(String snapshotId) {
+// this.id = Long.parseLong(snapshotId);
+// }
+//
+// @Override
+// public void setSnapshotStatus(Integer snapshotStatus) {
+// this.ordersStatus = snapshotStatus;
+// }
+}
diff --git a/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/model/dto/OrderUpdateStatusDTO.java b/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/model/dto/OrderUpdateStatusDTO.java
new file mode 100644
index 0000000..be60f36
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/model/dto/OrderUpdateStatusDTO.java
@@ -0,0 +1,73 @@
+package com.jzo2o.orders.base.model.dto;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.time.LocalDateTime;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+public class OrderUpdateStatusDTO {
+ /**
+ * 订单id
+ */
+ private Long id;
+
+ /**
+ * 原订单状态
+ */
+ private Integer originStatus;
+
+ /**
+ * 目标订单状态
+ */
+ private Integer targetStatus;
+
+ /**
+ * 支付状态
+ */
+ private Integer payStatus;
+ /**
+ * 退款状态
+ */
+ private Integer refundStatus;
+
+ /**
+ * 支付时间
+ */
+ private LocalDateTime payTime;
+
+ /**
+ * 评价时间
+ */
+ private LocalDateTime evaluationTime;
+
+ /**
+ * 支付服务交易单号
+ */
+ private Long tradingOrderNo;
+
+ /**
+ * 第三方支付的交易号
+ */
+ private String transactionId;
+
+ /**
+ * 支付渠道
+ */
+ private String tradingChannel;
+
+ /**
+ * 实际服务完成时间
+ */
+ private LocalDateTime realServeEndTime;
+
+ /**
+ * 评价状态
+ */
+ private Integer evaluationStatus;
+}
diff --git a/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/properties/DispatchProperties.java b/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/properties/DispatchProperties.java
new file mode 100644
index 0000000..bcb2643
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/properties/DispatchProperties.java
@@ -0,0 +1,32 @@
+package com.jzo2o.orders.base.properties;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * 派单配置
+ */
+@Configuration
+@ConfigurationProperties(prefix = "orders.dispatch")
+@Data
+public class DispatchProperties {
+ /**
+ * 机构端展示抢单列表数量
+ */
+ public Integer seizeListDispalyNumOfInstitution = 50;
+ /**
+ * 服务端展示抢单列表数量
+ */
+ public Integer seizeListDispalyNumOfServe = 20;
+
+ /**
+ * 机构端拥有服务单数量
+ */
+ public Integer serveTaskNumOrInstitution = 50;
+
+ /**
+ * 服务人员最大拥有服务数量
+ */
+ public Integer serveTaskNumOfServe = 10;
+}
diff --git a/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/properties/ExecutorProperties.java b/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/properties/ExecutorProperties.java
new file mode 100644
index 0000000..6d8cd36
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/properties/ExecutorProperties.java
@@ -0,0 +1,61 @@
+package com.jzo2o.orders.base.properties;
+
+import com.jzo2o.common.utils.ObjectUtils;
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.boot.context.properties.NestedConfigurationProperty;
+import org.springframework.context.annotation.Configuration;
+
+import java.util.HashMap;
+import java.util.Map;
+
+@Configuration
+@ConfigurationProperties(prefix = "executor")
+@Data
+public class ExecutorProperties {
+
+ /**
+ * 线程池配置
+ */
+ @NestedConfigurationProperty
+ private Map pools = new HashMap<>();
+
+ /**
+ * 线程池配置
+ */
+ @Data
+ public static class ThreadPool {
+ /**
+ * 核心线程数 默认15
+ */
+ private Integer corePoolSize = 15;
+
+ /**
+ * 最大线程数 默认30
+ */
+ private Integer maxPoolSize = 30;
+
+ /**
+ * 队列大小默认 5000
+ */
+ private Integer queueCapacity = 5000;
+
+ /**
+ * 线程名称,默认orders-
+ */
+ private String threadNamePrefix = "orders-";
+ }
+
+ /**
+ * 线程池名称
+ *
+ * @param name
+ * @return
+ */
+ public final ThreadPool get(String name) {
+ ThreadPool threadPool = pools.get(name);
+ return ObjectUtils.isNull(threadPool) ? new ThreadPool() : threadPool;
+ }
+
+
+}
diff --git a/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/service/IOrdersCommonService.java b/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/service/IOrdersCommonService.java
new file mode 100644
index 0000000..c35345b
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/service/IOrdersCommonService.java
@@ -0,0 +1,18 @@
+package com.jzo2o.orders.base.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.jzo2o.orders.base.model.domain.Orders;
+import com.jzo2o.orders.base.model.dto.OrderUpdateStatusDTO;
+
+/**
+ *
+ * 订单表 服务类
+ *
+ *
+ * @author itcast
+ * @since 2023-08-02
+ */
+public interface IOrdersCommonService extends IService {
+
+ Integer updateStatus(OrderUpdateStatusDTO orderUpdateStatusReqDTO);
+}
diff --git a/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/service/IOrdersDiversionCommonService.java b/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/service/IOrdersDiversionCommonService.java
new file mode 100644
index 0000000..530e34f
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/service/IOrdersDiversionCommonService.java
@@ -0,0 +1,17 @@
+package com.jzo2o.orders.base.service;
+
+import com.jzo2o.orders.base.model.domain.Orders;
+
+/**
+ * 订单分流
+ */
+public interface IOrdersDiversionCommonService {
+
+ /**
+ * 订单分流,所有订单均可抢单
+ *
+ * @param orders
+ */
+ void diversion(Orders orders);
+
+}
diff --git a/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/service/impl/OrdersCommonServiceImpl.java b/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/service/impl/OrdersCommonServiceImpl.java
new file mode 100644
index 0000000..72c781c
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/service/impl/OrdersCommonServiceImpl.java
@@ -0,0 +1,40 @@
+package com.jzo2o.orders.base.service.impl;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.jzo2o.orders.base.mapper.OrdersMapper;
+import com.jzo2o.orders.base.model.domain.Orders;
+import com.jzo2o.orders.base.model.dto.OrderUpdateStatusDTO;
+import com.jzo2o.orders.base.service.IOrdersCommonService;
+import org.springframework.stereotype.Service;
+
+/**
+ *
+ * 订单表 服务实现类
+ *
+ *
+ * @author itcast
+ * @since 2023-08-02
+ */
+@Service
+public class OrdersCommonServiceImpl extends ServiceImpl implements IOrdersCommonService {
+ @Override
+ public Integer updateStatus(OrderUpdateStatusDTO orderUpdateStatusReqDTO) {
+ LambdaUpdateWrapper updateWrapper = Wrappers.lambdaUpdate()
+ .eq(Orders::getId, orderUpdateStatusReqDTO.getId())
+ .gt(Orders::getUserId, 0)
+ .eq(ObjectUtil.isNotNull(orderUpdateStatusReqDTO.getOriginStatus()),Orders::getOrdersStatus,orderUpdateStatusReqDTO.getOriginStatus())
+ .set(Orders::getOrdersStatus, orderUpdateStatusReqDTO.getTargetStatus())
+ .set(ObjectUtil.isNotNull(orderUpdateStatusReqDTO.getPayStatus()),Orders::getPayStatus,orderUpdateStatusReqDTO.getPayStatus())
+ .set(ObjectUtil.isNotNull(orderUpdateStatusReqDTO.getPayTime()),Orders::getPayTime,orderUpdateStatusReqDTO.getPayTime())
+ .set(ObjectUtil.isNotNull(orderUpdateStatusReqDTO.getEvaluationTime()),Orders::getEvaluationTime,orderUpdateStatusReqDTO.getEvaluationTime())
+ .set(ObjectUtil.isNotNull(orderUpdateStatusReqDTO.getTradingOrderNo()),Orders::getTradingOrderNo,orderUpdateStatusReqDTO.getTradingOrderNo())
+ .set(ObjectUtil.isNotNull(orderUpdateStatusReqDTO.getTransactionId()),Orders::getTransactionId,orderUpdateStatusReqDTO.getTransactionId())
+ .set(ObjectUtil.isNotNull(orderUpdateStatusReqDTO.getTradingChannel()),Orders::getTradingChannel,orderUpdateStatusReqDTO.getTradingChannel())
+ .set(ObjectUtil.isNotNull(orderUpdateStatusReqDTO.getRefundStatus()),Orders::getRefundStatus,orderUpdateStatusReqDTO.getRefundStatus());
+ boolean update = super.update(updateWrapper);
+ return update?1:0;
+ }
+}
diff --git a/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/service/impl/OrdersDiversionCommonServiceImpl.java b/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/service/impl/OrdersDiversionCommonServiceImpl.java
new file mode 100644
index 0000000..ea0d566
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/service/impl/OrdersDiversionCommonServiceImpl.java
@@ -0,0 +1,119 @@
+//package com.jzo2o.orders.base.service.impl;
+//
+//import com.jzo2o.api.foundations.RegionApi;
+//import com.jzo2o.api.foundations.ServeApi;
+//import com.jzo2o.api.foundations.dto.response.ConfigRegionInnerResDTO;
+//import com.jzo2o.api.foundations.dto.response.ServeAggregationResDTO;
+//import com.jzo2o.common.utils.BooleanUtils;
+//import com.jzo2o.common.utils.DateUtils;
+//import com.jzo2o.common.utils.ObjectUtils;
+//import com.jzo2o.orders.base.mapper.OrdersDispatchMapper;
+//import com.jzo2o.orders.base.mapper.OrdersSeizeMapper;
+//import com.jzo2o.orders.base.model.domain.Orders;
+//import com.jzo2o.orders.base.model.domain.OrdersDispatch;
+//import com.jzo2o.orders.base.model.domain.OrdersSeize;
+//import com.jzo2o.orders.base.service.IOrdersDiversionCommonService;
+//import lombok.extern.slf4j.Slf4j;
+//import org.springframework.data.redis.core.RedisTemplate;
+//import org.springframework.stereotype.Service;
+//import org.springframework.transaction.annotation.Transactional;
+//
+//import javax.annotation.Resource;
+//import java.time.Duration;
+//
+//@Service
+//@Slf4j
+//public class OrdersDiversionCommonServiceImpl implements IOrdersDiversionCommonService {
+//
+//
+// @Resource
+// private RedisTemplate redisTemplate;
+//
+// @Resource
+// private RegionApi regionApi;
+//
+// @Resource
+// private ServeApi serveApi;
+//
+// @Resource
+// private OrdersDiversionCommonServiceImpl owner;
+//
+// @Resource
+// private OrdersSeizeMapper ordersSeizeMapper;
+// @Resource
+// private OrdersDispatchMapper ordersDispatchMapper;
+//
+// @Override
+// public void diversion(Orders orders) {
+// log.debug("订单分流,id:{}",orders.getId());
+// // 1.当前时间已超过服务预约时间则不再分流
+// if (orders.getServeStartTime().compareTo(DateUtils.now()) < 0) {
+// log.debug("订单{}当前时间已超过服务预约时间则不再分流",orders.getId());
+// return;
+// }
+// ConfigRegionInnerResDTO configRegion = regionApi.findConfigRegionByCityCode(orders.getCityCode());
+// ServeAggregationResDTO serveAggregationResDTO = serveApi.findById(orders.getServeId());
+// //订单分流数据存储
+// owner.diversionCommit(orders,configRegion,serveAggregationResDTO);
+// }
+//
+// @Transactional(rollbackFor = Exception.class)
+// public void diversionCommit(Orders orders, ConfigRegionInnerResDTO configRegion, ServeAggregationResDTO serveAggregationResDTO) {
+// //流间隔(单位分钟),即当前时间与服务预计开始时间的间隔
+// Integer diversionInterval = configRegion.getDiversionInterval();
+//
+// //当前时间与服务预约时间的间隔
+// Duration between = DateUtils.between(DateUtils.now(), orders.getServeStartTime());
+// //服务类型名称
+// String serveTypeName = ObjectUtils.get(serveAggregationResDTO, ServeAggregationResDTO::getServeTypeName);
+// //服务类型id
+// Long serveTypeId = ObjectUtils.get(serveAggregationResDTO, ServeAggregationResDTO::getServeTypeId);
+// //服务项名称
+// String serveItemName = ObjectUtils.get(serveAggregationResDTO, ServeAggregationResDTO::getServeItemName);
+// //服务项图片
+// String serveItemImg = ObjectUtils.get(serveAggregationResDTO, ServeAggregationResDTO::getServeItemImg);
+// //用于排序,服务预约时间戳加订单号后5位
+// long sortBy = DateUtils.toEpochMilli(orders.getServeStartTime()) + orders.getId() % 100000;
+// OrdersSeize ordersSeize = OrdersSeize.builder()
+// .id(orders.getId())
+// .ordersAmount(orders.getRealPayAmount())
+// .cityCode(orders.getCityCode())
+// .serveTypeId(serveTypeId)
+// .serveTypeName(serveTypeName)
+// .serveItemId(orders.getServeItemId())
+// .serveItemName(serveItemName)
+// .serveItemImg(serveItemImg)
+// .ordersAmount(orders.getRealPayAmount())
+// .serveStartTime(orders.getServeStartTime())
+// .serveAddress(orders.getServeAddress())
+// .lon(orders.getLon())
+// .lat(orders.getLat())
+// .paySuccessTime(DateUtils.now())
+// .paySuccessTime(orders.getPayTime())
+// .sortBy(sortBy)
+// .isTimeOut(BooleanUtils.toInt(between.toMinutes() < diversionInterval))
+// .purNum(orders.getPurNum()).build();
+// ordersSeizeMapper.insert(ordersSeize);
+// //当前时间与服务预约时间的间隔 小于指定间隔则插入派单表
+// if (between.toMinutes() < diversionInterval) {
+// OrdersDispatch ordersDispatch = OrdersDispatch.builder()
+// .id(orders.getId())
+// .ordersAmount(orders.getRealPayAmount())
+// .cityCode(orders.getCityCode())
+// .serveTypeId(serveTypeId)
+// .serveTypeName(serveTypeName)
+// .serveItemId(orders.getServeItemId())
+// .serveItemName(serveItemName)
+// .serveItemImg(serveItemImg)
+// .ordersAmount(orders.getRealPayAmount())
+// .serveStartTime(orders.getServeStartTime())
+// .serveAddress(orders.getServeAddress())
+// .lon(orders.getLon())
+// .lat(orders.getLat())
+// .purNum(orders.getPurNum()).build();
+// ordersDispatchMapper.insert(ordersDispatch);
+// }
+// }
+//
+//
+//}
diff --git a/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/utils/RedisUtils.java b/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/utils/RedisUtils.java
new file mode 100644
index 0000000..fa38e6c
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/utils/RedisUtils.java
@@ -0,0 +1,16 @@
+package com.jzo2o.orders.base.utils;
+
+import com.jzo2o.common.utils.NumberUtils;
+
+public class RedisUtils {
+
+ /**
+ * 获取城市编码最后以为数字
+ *
+ * @param cityCode
+ * @return
+ */
+ public static int getCityIndex(String cityCode) {
+ return NumberUtils.parseInt(cityCode) % 10;
+ }
+}
diff --git a/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/utils/ServeTimeUtils.java b/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/utils/ServeTimeUtils.java
new file mode 100644
index 0000000..46652a7
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/utils/ServeTimeUtils.java
@@ -0,0 +1,24 @@
+package com.jzo2o.orders.base.utils;
+
+import com.jzo2o.common.utils.DateUtils;
+import com.jzo2o.common.utils.NumberUtils;
+
+import java.time.LocalDateTime;
+
+public class ServeTimeUtils {
+
+ /**
+ * 获取服务时间,用来处理抢单和派单的时间冲突问题
+ *
+ * @param serveStartTime
+ * @return
+ */
+ public static int getServeTimeInt(LocalDateTime serveStartTime) {
+ return NumberUtils.parseInt(DateUtils.format(serveStartTime, "yyyyMMddHH"));
+ }
+
+ public static void main(String[] args) {
+ long number = 2023082400000000001L;
+ System.out.println(number % 10000000000L % 150000);
+ }
+}
diff --git a/jzo2o-oreders/jzo2o-orders-base/src/main/resources/META-INF/spring-configuration-metadata.json b/jzo2o-oreders/jzo2o-orders-base/src/main/resources/META-INF/spring-configuration-metadata.json
new file mode 100644
index 0000000..799a9c6
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-base/src/main/resources/META-INF/spring-configuration-metadata.json
@@ -0,0 +1,9 @@
+{
+ "groups": [
+
+ ],
+ "properties": [
+
+ ],
+ "hints": []
+}
\ No newline at end of file
diff --git a/jzo2o-oreders/jzo2o-orders-base/src/main/resources/META-INF/spring.factories b/jzo2o-oreders/jzo2o-orders-base/src/main/resources/META-INF/spring.factories
new file mode 100644
index 0000000..c069af3
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-base/src/main/resources/META-INF/spring.factories
@@ -0,0 +1,2 @@
+org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
+ com.jzo2o.orders.base.config.AutoImportConfiguration
\ No newline at end of file
diff --git a/jzo2o-oreders/jzo2o-orders-base/src/main/resources/mapper/BreachRecordMapper.xml b/jzo2o-oreders/jzo2o-orders-base/src/main/resources/mapper/BreachRecordMapper.xml
new file mode 100644
index 0000000..2aac618
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-base/src/main/resources/mapper/BreachRecordMapper.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/jzo2o-oreders/jzo2o-orders-base/src/main/resources/mapper/HistoryOrdersServeSyncMapper.xml b/jzo2o-oreders/jzo2o-orders-base/src/main/resources/mapper/HistoryOrdersServeSyncMapper.xml
new file mode 100644
index 0000000..608f6f3
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-base/src/main/resources/mapper/HistoryOrdersServeSyncMapper.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/jzo2o-oreders/jzo2o-orders-base/src/main/resources/mapper/HistoryOrdersSyncMapper.xml b/jzo2o-oreders/jzo2o-orders-base/src/main/resources/mapper/HistoryOrdersSyncMapper.xml
new file mode 100644
index 0000000..d4886ef
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-base/src/main/resources/mapper/HistoryOrdersSyncMapper.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/jzo2o-oreders/jzo2o-orders-base/src/main/resources/mapper/IDispatchService.xml b/jzo2o-oreders/jzo2o-orders-base/src/main/resources/mapper/IDispatchService.xml
new file mode 100644
index 0000000..4662a1b
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-base/src/main/resources/mapper/IDispatchService.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/jzo2o-oreders/jzo2o-orders-base/src/main/resources/mapper/IHistoryOrdersSyncService.xml b/jzo2o-oreders/jzo2o-orders-base/src/main/resources/mapper/IHistoryOrdersSyncService.xml
new file mode 100644
index 0000000..d6ea21e
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-base/src/main/resources/mapper/IHistoryOrdersSyncService.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/jzo2o-oreders/jzo2o-orders-base/src/main/resources/mapper/OrdersCanceledMapper.xml b/jzo2o-oreders/jzo2o-orders-base/src/main/resources/mapper/OrdersCanceledMapper.xml
new file mode 100644
index 0000000..2c72a34
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-base/src/main/resources/mapper/OrdersCanceledMapper.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/jzo2o-oreders/jzo2o-orders-base/src/main/resources/mapper/OrdersDispatchMapper.xml b/jzo2o-oreders/jzo2o-orders-base/src/main/resources/mapper/OrdersDispatchMapper.xml
new file mode 100644
index 0000000..b8a672c
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-base/src/main/resources/mapper/OrdersDispatchMapper.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/jzo2o-oreders/jzo2o-orders-base/src/main/resources/mapper/OrdersMapper.xml b/jzo2o-oreders/jzo2o-orders-base/src/main/resources/mapper/OrdersMapper.xml
new file mode 100644
index 0000000..e6bde84
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-base/src/main/resources/mapper/OrdersMapper.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/jzo2o-oreders/jzo2o-orders-base/src/main/resources/mapper/OrdersRefundMapper.xml b/jzo2o-oreders/jzo2o-orders-base/src/main/resources/mapper/OrdersRefundMapper.xml
new file mode 100644
index 0000000..aa7032e
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-base/src/main/resources/mapper/OrdersRefundMapper.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/jzo2o-oreders/jzo2o-orders-base/src/main/resources/mapper/OrdersSeizeMapper.xml b/jzo2o-oreders/jzo2o-orders-base/src/main/resources/mapper/OrdersSeizeMapper.xml
new file mode 100644
index 0000000..7fc9199
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-base/src/main/resources/mapper/OrdersSeizeMapper.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/jzo2o-oreders/jzo2o-orders-base/src/main/resources/mapper/ServeProviderSyncMapper.xml b/jzo2o-oreders/jzo2o-orders-base/src/main/resources/mapper/ServeProviderSyncMapper.xml
new file mode 100644
index 0000000..c09a5ba
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-base/src/main/resources/mapper/ServeProviderSyncMapper.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/jzo2o-oreders/jzo2o-orders-manager/Dockerfile b/jzo2o-oreders/jzo2o-orders-manager/Dockerfile
new file mode 100644
index 0000000..bf35fbb
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-manager/Dockerfile
@@ -0,0 +1,8 @@
+FROM openjdk:11-jdk
+LABEL maintainer="研究院研发组 "
+RUN echo "Asia/Shanghai" > /etc/timezone
+ARG PACKAGE_PATH=./target/jzo2o-orders-manager.jar
+
+ADD ${PACKAGE_PATH:-./} app.jar
+EXPOSE 11504
+ENTRYPOINT ["sh","-c","java -jar $JAVA_OPTS app.jar"]
\ No newline at end of file
diff --git a/jzo2o-oreders/jzo2o-orders-manager/pom.xml b/jzo2o-oreders/jzo2o-orders-manager/pom.xml
new file mode 100644
index 0000000..f931d9a
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-manager/pom.xml
@@ -0,0 +1,121 @@
+
+
+
+ jzo2o-oreders
+ com.jzo2o
+ 1.0-SNAPSHOT
+
+ 4.0.0
+
+ jzo2o-orders-manager
+
+
+ 11
+ 11
+
+
+
+
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-nacos-discovery
+
+
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-nacos-config
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter-bootstrap
+
+
+ com.jzo2o
+ jzo2o-mvc
+
+
+
+ com.jzo2o
+ jzo2o-knife4j-web
+
+
+
+ com.jzo2o
+ jzo2o-mysql
+
+
+ com.mysql
+ mysql-connector-j
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+
+ com.jzo2o
+ jzo2o-api
+
+
+
+ com.jzo2o
+ jzo2o-redis
+
+
+
+ mysql
+ mysql-connector-java
+ 8.0.19
+
+
+
+ com.jzo2o
+ jzo2o-orders-base
+
+
+
+ com.fasterxml.jackson.datatype
+ jackson-datatype-jsr310
+
+
+ junit
+ junit
+ test
+
+
+ com.jzo2o
+ jzo2o-xxl-job
+
+
+ com.jzo2o
+ jzo2o-es
+
+
+
+
+
+ ${project.artifactId}
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+ build-info
+
+
+
+
+ com.jzo2o.orders.manager.OrdersManagerApplication
+
+
+
+
+
\ No newline at end of file
diff --git a/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/OrdersManagerApplication.java b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/OrdersManagerApplication.java
new file mode 100644
index 0000000..e006be7
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/OrdersManagerApplication.java
@@ -0,0 +1,23 @@
+package com.jzo2o.orders.manager;
+
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.builder.SpringApplicationBuilder;
+import org.springframework.context.annotation.EnableAspectJAutoProxy;
+import org.springframework.transaction.annotation.EnableTransactionManagement;
+
+/**
+ * @author itcast
+ */
+@SpringBootApplication
+@EnableAspectJAutoProxy
+@Slf4j
+@EnableTransactionManagement
+public class OrdersManagerApplication {
+ public static void main(String[] args) {
+ new SpringApplicationBuilder(OrdersManagerApplication.class)
+ .build(args)
+ .run(args);
+ log.info("家政服务-订单管理微服务启动");
+ }
+}
diff --git a/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/constants/EsIndex.java b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/constants/EsIndex.java
new file mode 100644
index 0000000..eea8ec9
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/constants/EsIndex.java
@@ -0,0 +1,5 @@
+package com.jzo2o.orders.manager.constants;
+
+public class EsIndex {
+ public static final String SERVE_PROVIDER_INFO = "serve_provider_info";
+}
diff --git a/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/controller/agency/AgencyOrdersServeController.java b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/controller/agency/AgencyOrdersServeController.java
new file mode 100644
index 0000000..976b228
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/controller/agency/AgencyOrdersServeController.java
@@ -0,0 +1,23 @@
+package com.jzo2o.orders.manager.controller.agency;
+
+import com.jzo2o.common.model.PageResult;
+import com.jzo2o.mvc.utils.UserContext;
+import com.jzo2o.orders.manager.model.dto.request.*;
+import com.jzo2o.orders.manager.model.dto.response.OrdersServeDetailResDTO;
+import com.jzo2o.orders.manager.model.dto.response.OrdersServeResDTO;
+import com.jzo2o.orders.manager.model.dto.response.OrdersServeStatusNumResDTO;
+import com.jzo2o.orders.manager.service.IOrdersServeManagerService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+
+@RestController("orders-agency")
+@Api(tags = "机构端-服务单相关接口")
+@RequestMapping("/agency")
+public class AgencyOrdersServeController {
+}
diff --git a/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/controller/consumer/ConsumerOrdersController.java b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/controller/consumer/ConsumerOrdersController.java
new file mode 100644
index 0000000..fd2c70b
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/controller/consumer/ConsumerOrdersController.java
@@ -0,0 +1,56 @@
+package com.jzo2o.orders.manager.controller.consumer;
+
+import cn.hutool.core.bean.BeanUtil;
+import com.jzo2o.api.market.dto.response.AvailableCouponsResDTO;
+import com.jzo2o.api.orders.dto.request.OrderCancelReqDTO;
+import com.jzo2o.api.orders.dto.response.OrderResDTO;
+import com.jzo2o.api.orders.dto.response.OrderSimpleResDTO;
+import com.jzo2o.common.model.CurrentUserInfo;
+import com.jzo2o.mvc.utils.UserContext;
+import com.jzo2o.orders.manager.model.dto.OrderCancelDTO;
+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.response.OrdersPayResDTO;
+import com.jzo2o.orders.manager.model.dto.response.PlaceOrderResDTO;
+import com.jzo2o.orders.manager.service.IOrdersCreateService;
+import com.jzo2o.orders.manager.service.IOrdersManagerService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * @author itcast
+ */
+@RestController("consumerOrdersController")
+@Api(tags = "用户端-订单相关接口")
+@RequestMapping("/consumer/orders")
+public class ConsumerOrdersController {
+
+ @Resource
+ private IOrdersManagerService ordersManagerService;
+
+
+ @GetMapping("/{id}")
+ @ApiOperation("根据订单id查询")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "id", value = "订单id", required = true, dataTypeClass = Long.class)
+ })
+ public OrderResDTO detail(@PathVariable("id") Long id) {
+ return ordersManagerService.getDetail(id);
+ }
+ @GetMapping("/consumerQueryList")
+ @ApiOperation("订单滚动分页查询")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "ordersStatus", value = "订单状态,0:待支付,100:派单中,200:待服务,300:服务中,400:待评价,500:订单完成,600:订单取消,700:已关闭", required = false, dataTypeClass = Integer.class),
+ @ApiImplicitParam(name = "sortBy", value = "排序字段", required = false, dataTypeClass = Long.class)
+ })
+ public List consumerQueryList(@RequestParam(value = "ordersStatus", required = false) Integer ordersStatus,
+ @RequestParam(value = "sortBy", required = false) Long sortBy) {
+ return ordersManagerService.consumerQueryList(UserContext.currentUserId(), ordersStatus, sortBy);
+ }
+}
diff --git a/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/controller/inner/InnerOrdersController.java b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/controller/inner/InnerOrdersController.java
new file mode 100644
index 0000000..b32f7ba
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/controller/inner/InnerOrdersController.java
@@ -0,0 +1,60 @@
+package com.jzo2o.orders.manager.controller.inner;
+
+import cn.hutool.core.bean.BeanUtil;
+import com.jzo2o.api.orders.OrdersApi;
+import com.jzo2o.api.orders.dto.response.OrderResDTO;
+import com.jzo2o.orders.base.model.domain.Orders;
+import com.jzo2o.orders.manager.service.IOrdersManagerService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * @author itcast
+ */
+@RestController
+@Api(tags = "内部接口 - 订单相关接口")
+@RequestMapping("/inner/orders")
+public class InnerOrdersController implements OrdersApi {
+
+ @Resource
+ private IOrdersManagerService ordersManagerService;
+
+
+ @Override
+ @GetMapping("/{id}")
+ @ApiOperation("根据订单id查询")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "id", value = "订单id", required = true, dataTypeClass = Long.class),
+ })
+ public OrderResDTO queryById(@PathVariable("id") Long id) {
+ Orders orders = ordersManagerService.queryById(id);
+ return BeanUtil.toBean(orders, OrderResDTO.class);
+ }
+
+ @Override
+ @GetMapping("queryByIds")
+ @ApiOperation("根据订单id列表批量查询")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "ids", value = "订单id列表", required = true, dataTypeClass = Long.class),
+ })
+ public List queryByIds(@RequestParam("ids") List ids) {
+ List ordersList = ordersManagerService.batchQuery(ids);
+ return BeanUtil.copyToList(ordersList, OrderResDTO.class);
+ }
+
+ @Override
+ @PutMapping("evaluate/{id}")
+ @ApiOperation("根据订单id评价")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "id", value = "订单id", required = true, dataTypeClass = Long.class),
+ })
+ public void evaluate(@PathVariable("id") Long id) {
+ ordersManagerService.evaluationOrder(id);
+ }
+}
diff --git a/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/controller/inner/InnerOrdersServeController.java b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/controller/inner/InnerOrdersServeController.java
new file mode 100644
index 0000000..ffa7dbe
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/controller/inner/InnerOrdersServeController.java
@@ -0,0 +1,47 @@
+package com.jzo2o.orders.manager.controller.inner;
+
+import com.jzo2o.api.orders.OrdersServeApi;
+//import com.jzo2o.api.orders.dto.response.InstitutionStaffServeCountResDTO;
+import com.jzo2o.api.orders.dto.response.InstitutionStaffServeCountResDTO;
+import com.jzo2o.api.orders.dto.response.ServeProviderIdResDTO;
+import com.jzo2o.orders.base.model.domain.OrdersServe;
+import com.jzo2o.orders.manager.service.IOrdersServeManagerService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.Map;
+
+@RestController
+@Api(tags = "内部接口 - 服务单相关接口")
+@RequestMapping("/inner/orders-serve")
+public class InnerOrdersServeController implements OrdersServeApi {
+
+ @Resource
+ private IOrdersServeManagerService ordersServeManagerService;
+
+ @Override
+ @GetMapping("/queryServeProviderIdByOrderId/{id}")
+ @ApiOperation("根据订单id查询服务人员/机构id")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "id", value = "订单id", required = true, dataTypeClass = Long.class),
+ })
+ public ServeProviderIdResDTO queryServeProviderIdByOrderId(@PathVariable("id") Long id) {
+ OrdersServe ordersServe = ordersServeManagerService.queryById(id);
+ return new ServeProviderIdResDTO(ordersServe.getServeProviderId());
+ }
+
+ @Override
+ @GetMapping("/countByInstitutionStaffId")
+ @ApiOperation("根据机构服务人员查询服务数量")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "institutionStaffId", value = "机构服务人员id", required = true, dataTypeClass = Long.class),
+ })
+ public InstitutionStaffServeCountResDTO countByInstitutionStaffId(@RequestParam("institutionStaffId") Long institutionStaffId) {
+ return ordersServeManagerService.countByInstitutionStaffId(institutionStaffId);
+ }
+}
diff --git a/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/controller/operation/OperationOrdersController.java b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/controller/operation/OperationOrdersController.java
new file mode 100644
index 0000000..87d762f
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/controller/operation/OperationOrdersController.java
@@ -0,0 +1,30 @@
+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.common.model.CurrentUserInfo;
+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.OrderCancelDTO;
+import com.jzo2o.orders.manager.model.dto.response.OperationOrdersDetailResDTO;
+import com.jzo2o.orders.manager.service.IOrdersManagerService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+
+/**
+ * @author itcast
+ */
+@RestController("operationOrdersController")
+@Api(tags = "运营端-订单相关接口")
+@RequestMapping("/operation/orders")
+public class OperationOrdersController {
+
+
+}
diff --git a/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/controller/operation/OperationOrdersServeController.java b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/controller/operation/OperationOrdersServeController.java
new file mode 100644
index 0000000..2b9e4e4
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/controller/operation/OperationOrdersServeController.java
@@ -0,0 +1,22 @@
+package com.jzo2o.orders.manager.controller.operation;
+
+import com.jzo2o.common.model.PageResult;
+import com.jzo2o.orders.manager.model.dto.request.OrdersServePageQueryByServeProviderReqDTO;
+import com.jzo2o.orders.manager.model.dto.response.*;
+import com.jzo2o.orders.manager.service.IOrdersServeManagerService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+
+/**
+ * @author itcast
+ */
+@RestController("orders-operation")
+@Api(tags = "运营端-服务单相关接口")
+@RequestMapping("/operation/ordersServe")
+public class OperationOrdersServeController {
+
+
+}
diff --git a/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/controller/worker/WorkerOrdersServeController.java b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/controller/worker/WorkerOrdersServeController.java
new file mode 100644
index 0000000..25c87aa
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/controller/worker/WorkerOrdersServeController.java
@@ -0,0 +1,25 @@
+package com.jzo2o.orders.manager.controller.worker;
+
+import com.jzo2o.mvc.utils.UserContext;
+import com.jzo2o.orders.manager.model.dto.request.*;
+import com.jzo2o.orders.manager.model.dto.response.OrdersServeDetailResDTO;
+import com.jzo2o.orders.manager.model.dto.response.OrdersServeListResDTO;
+import com.jzo2o.orders.manager.model.dto.response.OrdersServeResDTO;
+import com.jzo2o.orders.manager.model.dto.response.OrdersServeStatusNumResDTO;
+import com.jzo2o.orders.manager.service.IOrdersServeManagerService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+@RestController("orders-worker")
+@Api(tags = "服务端-服务单相关接口")
+@RequestMapping("/worker")
+public class WorkerOrdersServeController {
+
+}
diff --git a/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/model/dto/OrderCancelDTO.java b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/model/dto/OrderCancelDTO.java
new file mode 100644
index 0000000..8dc5693
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/model/dto/OrderCancelDTO.java
@@ -0,0 +1,71 @@
+package com.jzo2o.orders.manager.model.dto;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ * 订单取消模型
+ *
+ * @author itcast
+ * @create 2023/8/7 17:12
+ **/
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class OrderCancelDTO {
+ /**
+ * 订单id
+ */
+ private Long id;
+
+ /**
+ * 用户id
+ */
+ private Long userId;
+
+ /**
+ * 当前用户id
+ */
+ private Long currentUserId;
+
+ /**
+ * 当前用户名称
+ */
+ private String currentUserName;
+
+ /**
+ * 当前用户类型
+ */
+ private Integer currentUserType;
+
+ /**
+ * 取消原因
+ */
+ private String cancelReason;
+
+ /**
+ * 预约服务开始时间
+ */
+ private LocalDateTime serveStartTime;
+
+ /**
+ * 实际支付金额
+ */
+ private BigDecimal realPayAmount;
+
+ /**
+ * 城市编码
+ */
+ private String cityCode;
+
+ /**
+ * 支付服务交易单号
+ */
+ private Long tradingOrderNo;
+}
diff --git a/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/model/dto/ServeProviderInfo.java b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/model/dto/ServeProviderInfo.java
new file mode 100644
index 0000000..b84b047
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/model/dto/ServeProviderInfo.java
@@ -0,0 +1,55 @@
+package com.jzo2o.orders.manager.model.dto;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class ServeProviderInfo {
+ /**
+ * 服务人员或机构同步表
+ */
+ private Long id;
+
+ /**
+ * 技能列表
+ */
+ private List serveItemIds;
+
+ /**
+ * 经纬度
+ */
+ private String location;
+
+ /**
+ * 城市编码
+ */
+ private String cityCode;
+
+ /**
+ * 接单距离
+ */
+ private Double recieveDistance;
+
+ /**
+ * 接单开关1,:接单开启,0:接单关闭
+ */
+ private Integer pickUp;
+
+ /**
+ * 评分,默认50分
+ */
+ private Double evaluationScore;
+
+ /**
+ * 服务时间
+ */
+ private List serveTimes;
+
+ /**
+ * 首次设置状态,0:未完成,1:已完成设置
+ */
+ private Integer setttingStatus;
+}
diff --git a/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/model/dto/request/OrderPageQueryReqDTO.java b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/model/dto/request/OrderPageQueryReqDTO.java
new file mode 100644
index 0000000..ec48636
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/model/dto/request/OrderPageQueryReqDTO.java
@@ -0,0 +1,75 @@
+package com.jzo2o.orders.manager.model.dto.request;
+
+import com.jzo2o.common.model.dto.PageQueryDTO;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * 订单分页查询请求
+ *
+ * @author itcast
+ * @create 2023/7/20 21:17
+ **/
+@Data
+@ApiModel("订单分页查询请求")
+public class OrderPageQueryReqDTO extends PageQueryDTO {
+ /**
+ * 订单状态,0:待支付,100:派单中,200:待服务,300:服务中,400:待评价,500:订单完成,600:订单取消,700:订单关闭
+ */
+ @ApiModelProperty("订单状态,0:待支付,100:派单中,200:待服务,300:服务中,400:待评价,500:订单完成,600:订单取消,700:订单关闭")
+ private Integer ordersStatus;
+
+ /**
+ * 支付状态,0:待支付,1:支付成功
+ */
+ @ApiModelProperty("支付状态,0:待支付,1:支付成功")
+ private Integer payStatus;
+
+ /**
+ * 退款状态,0:发起退款,1:退款中,2:退款成功 3:退款失败
+ */
+ @ApiModelProperty("退款状态,0:发起退款,1:退款中,2:退款成功 3:退款失败")
+ private Integer refundStatus;
+ /**
+ * 用户id
+ */
+ @ApiModelProperty("用户id")
+ private Long userId;
+
+ /**
+ * 订单id
+ */
+ @ApiModelProperty("订单id")
+ private Long id;
+
+ /**
+ * 客户电话
+ */
+ @ApiModelProperty("客户电话")
+ private String contactsPhone;
+
+ /**
+ * 最小创建时间
+ */
+ @ApiModelProperty("最小创建时间")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime minCreateTime;
+
+ /**
+ * 最大创建时间
+ */
+ @ApiModelProperty("最大创建时间")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime maxCreateTime;
+
+ /**
+ * 订单id列表
+ */
+ @ApiModelProperty("订单id列表")
+ private List ordersIdList;
+}
diff --git a/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/model/dto/request/OrderServeCancelReqDTO.java b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/model/dto/request/OrderServeCancelReqDTO.java
new file mode 100644
index 0000000..2c0e4df
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/model/dto/request/OrderServeCancelReqDTO.java
@@ -0,0 +1,23 @@
+package com.jzo2o.orders.manager.model.dto.request;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * @author itcast
+ */
+@Data
+@ApiModel("服务取消模型")
+public class OrderServeCancelReqDTO {
+ @ApiModelProperty(value = "服务单id",required = true)
+ @NotNull(message = "操作失败")
+ private Long id;
+
+ @ApiModelProperty(value = "取消原因",required = true)
+ @NotNull(message = "操作失败")
+ private String cancelReason;
+
+}
diff --git a/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/model/dto/request/OrdersDispatchReceiveReqDTO.java b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/model/dto/request/OrdersDispatchReceiveReqDTO.java
new file mode 100644
index 0000000..b6356f6
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/model/dto/request/OrdersDispatchReceiveReqDTO.java
@@ -0,0 +1,18 @@
+package com.jzo2o.orders.manager.model.dto.request;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * @author itcast
+ */
+@ApiModel("接单模型")
+@Data
+public class OrdersDispatchReceiveReqDTO {
+ @ApiModelProperty(value = "派单id",required = true)
+ @NotNull(message = "接单失败")
+ private Long id;
+}
diff --git a/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/model/dto/request/OrdersDispatchRejectReqDTO.java b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/model/dto/request/OrdersDispatchRejectReqDTO.java
new file mode 100644
index 0000000..ee3dd44
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/model/dto/request/OrdersDispatchRejectReqDTO.java
@@ -0,0 +1,21 @@
+package com.jzo2o.orders.manager.model.dto.request;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * @author itcast
+ */
+@ApiModel("接单模型")
+@Data
+public class OrdersDispatchRejectReqDTO {
+ @ApiModelProperty(value = "派单id",required = true)
+ @NotNull(message = "接单失败")
+ private Long id;
+ @ApiModelProperty(value = "拒单原因",required = true)
+ @NotNull(message = "拒单失败")
+ private String rejectReason;
+}
diff --git a/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/model/dto/request/OrdersPayReqDTO.java b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/model/dto/request/OrdersPayReqDTO.java
new file mode 100644
index 0000000..4f4cce3
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/model/dto/request/OrdersPayReqDTO.java
@@ -0,0 +1,22 @@
+package com.jzo2o.orders.manager.model.dto.request;
+
+import com.jzo2o.api.trade.enums.PayChannelEnum;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * 订单支付请求体
+ *
+ * @author itcast
+ * @create 2023/9/4 10:00
+ **/
+@Data
+@ApiModel("订单支付请求体")
+public class OrdersPayReqDTO {
+ @ApiModelProperty(value = "支付渠道", required = true)
+ @NotNull(message = "支付渠道不能为空")
+ private PayChannelEnum tradingChannel;
+}
diff --git a/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/model/dto/request/OrdersSeizeReqDTO.java b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/model/dto/request/OrdersSeizeReqDTO.java
new file mode 100644
index 0000000..6d2f05f
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/model/dto/request/OrdersSeizeReqDTO.java
@@ -0,0 +1,15 @@
+package com.jzo2o.orders.manager.model.dto.request;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel("抢单模型")
+public class OrdersSeizeReqDTO {
+ /**
+ * 抢单id
+ */
+ @ApiModelProperty("抢单id")
+ private Long id;
+}
diff --git a/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/model/dto/request/OrdersServeAllocationReqDTO.java b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/model/dto/request/OrdersServeAllocationReqDTO.java
new file mode 100644
index 0000000..b6a9ca1
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/model/dto/request/OrdersServeAllocationReqDTO.java
@@ -0,0 +1,20 @@
+package com.jzo2o.orders.manager.model.dto.request;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * @author itcast
+ */
+@Data
+public class OrdersServeAllocationReqDTO {
+
+ @ApiModelProperty("服务单id")
+ @NotNull(message = "人员分配失败")
+ private Long id;
+ @ApiModelProperty("服务人员id")
+ @NotNull(message = "人员分配失败")
+ private Long institutionStaffId;
+}
diff --git a/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/model/dto/request/OrdersServePageQueryByServeProviderReqDTO.java b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/model/dto/request/OrdersServePageQueryByServeProviderReqDTO.java
new file mode 100644
index 0000000..4ffdc0c
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/model/dto/request/OrdersServePageQueryByServeProviderReqDTO.java
@@ -0,0 +1,28 @@
+package com.jzo2o.orders.manager.model.dto.request;
+
+import com.jzo2o.common.model.dto.PageQueryDTO;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 根据服务人员/机构分页查询服务数据
+ *
+ * @author itcast
+ * @create 2023/9/15 18:55
+ **/
+@Data
+@ApiModel("根据服务人员/机构分页查询服务单相关模型")
+public class OrdersServePageQueryByServeProviderReqDTO extends PageQueryDTO {
+ /**
+ * 用户类型,2:服务人员,3:机构
+ */
+ @ApiModelProperty(value = "用户类型,2:服务人员,3:机构")
+ private Integer userType;
+
+ /**
+ * 服务人员/机构id
+ */
+ @ApiModelProperty(value = "服务人员/机构id")
+ private Long serveProviderId;
+}
diff --git a/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/model/dto/request/OrdersServePageQueryReqDTO.java b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/model/dto/request/OrdersServePageQueryReqDTO.java
new file mode 100644
index 0000000..f03827f
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/model/dto/request/OrdersServePageQueryReqDTO.java
@@ -0,0 +1,31 @@
+package com.jzo2o.orders.manager.model.dto.request;
+
+import com.jzo2o.common.model.dto.PageQueryDTO;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @author itcast
+ */
+@Data
+@ApiModel("服务单分页查询相关模型")
+public class OrdersServePageQueryReqDTO extends PageQueryDTO {
+
+ @ApiModelProperty(value = "服务状态,0:待分配,1:待上门,2:服务中(待完工),3:服务完成,4:取消,5:被退单")
+ private Integer serveStatus;
+
+ @ApiModelProperty(value = "服务单编码")
+ private Long id;
+
+ @ApiModelProperty(value = "服务项id")
+ private String serveItemId;
+
+ @ApiModelProperty(value = "服务时间 - 最小")
+ private Date minServeStartTime;
+
+ @ApiModelProperty(value = "服务时间 - 最大")
+ private Date maxServeStartTime;
+}
diff --git a/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/model/dto/request/PlaceOrderReqDTO.java b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/model/dto/request/PlaceOrderReqDTO.java
new file mode 100644
index 0000000..3520cd4
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/model/dto/request/PlaceOrderReqDTO.java
@@ -0,0 +1,29 @@
+package com.jzo2o.orders.manager.model.dto.request;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.time.LocalDateTime;
+
+@ApiModel("下单请求信息")
+@Data
+public class PlaceOrderReqDTO {
+ @ApiModelProperty(value = "服务id",required = true)
+ @NotNull(message = "您还未选择服务")
+ private Long serveId;
+
+ @ApiModelProperty(value = "预约地址id",required = true)
+ @NotNull(message = "您还未选择服务地址")
+ private Long addressBookId;
+
+ @ApiModelProperty(value = "购买数量",required = false)
+ private Integer purNum;
+
+ @ApiModelProperty(value = "预约时间",required = true)
+ private LocalDateTime serveStartTime;
+
+ @ApiModelProperty(value = "优惠券id", required = false)
+ private Long couponId;
+}
diff --git a/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/model/dto/request/ServeFinishedReqDTO.java b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/model/dto/request/ServeFinishedReqDTO.java
new file mode 100644
index 0000000..568e47e
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/model/dto/request/ServeFinishedReqDTO.java
@@ -0,0 +1,24 @@
+package com.jzo2o.orders.manager.model.dto.request;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+import java.util.List;
+
+@Data
+@ApiModel("服务开始模型")
+public class ServeFinishedReqDTO {
+ @ApiModelProperty("服务id")
+ private Long id;
+
+ @ApiModelProperty("服务完成图片")
+ @NotNull(message = "请上传服务完成图片")
+ @Size(min = 1, max = 3, message = "上传1-3张照片")
+ private List serveAfterImgs;
+
+ @ApiModelProperty("服务完成说明")
+ private String serveAfterIllustrate;
+}
diff --git a/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/model/dto/request/ServeStartReqDTO.java b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/model/dto/request/ServeStartReqDTO.java
new file mode 100644
index 0000000..6f9b76e
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/model/dto/request/ServeStartReqDTO.java
@@ -0,0 +1,23 @@
+package com.jzo2o.orders.manager.model.dto.request;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author itcast
+ */
+@Data
+@ApiModel("服务完成模型")
+public class ServeStartReqDTO {
+ @ApiModelProperty("服务开始id")
+ private Long id;
+
+ @ApiModelProperty("服务图片")
+ private List serveBeforeImgs;
+
+ @ApiModelProperty("服务前说明")
+ private String serveBeforeIllustrate;
+}
diff --git a/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/model/dto/response/OperationOrdersDetailResDTO.java b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/model/dto/response/OperationOrdersDetailResDTO.java
new file mode 100644
index 0000000..cabe773
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/model/dto/response/OperationOrdersDetailResDTO.java
@@ -0,0 +1,200 @@
+package com.jzo2o.orders.manager.model.dto.response;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * 管理端订单详情
+ *
+ * @author itcast
+ * @create 2023/9/12 21:05
+ **/
+@Data
+@ApiModel("管理端订单详情响应数据")
+public class OperationOrdersDetailResDTO {
+ @ApiModelProperty("状态流转")
+ private List ordersProgress;
+
+ @ApiModelProperty("订单信息")
+ private OrderInfo orderInfo;
+
+ @ApiModelProperty("支付信息")
+ private PayInfo payInfo;
+
+ @ApiModelProperty("服务信息")
+ private ServeInfo serveInfo;
+
+ @ApiModelProperty("退款信息")
+ private RefundInfo refundInfo;
+
+ @ApiModelProperty("订单取消理由")
+ private CancelInfo cancelInfo;
+
+ @Data
+ @ApiModel("订单信息模型")
+ public static class OrderInfo {
+ @ApiModelProperty("订单id")
+ private Long id;
+
+ @ApiModelProperty("订单状态,0:待支付,100:派单中,200:待服务,300:服务中,400:待评价,500:订单完成,600:订单取消,700已关闭")
+ private Integer ordersStatus;
+
+ @ApiModelProperty("服务项名称")
+ private String serveItemName;
+
+ @ApiModelProperty("下单时间")
+ private LocalDateTime createTime;
+
+ @ApiModelProperty("客户名称")
+ private String contactsName;
+
+ @ApiModelProperty("客户电话")
+ private String contactsPhone;
+
+ @ApiModelProperty("服务地址")
+ private String serveAddress;
+
+ @ApiModelProperty("预约时间")
+ private LocalDateTime serveStartTime;
+
+ @ApiModelProperty("订单总金额")
+ private BigDecimal totalAmount;
+
+ @ApiModelProperty("实际支付金额")
+ private BigDecimal realPayAmount;
+
+ @ApiModelProperty("购买数量")
+ private Integer purNum;
+
+ @ApiModelProperty("服务单位")
+ private Integer unit;
+
+ @ApiModelProperty("服务人员类型,2:服务人员,3:机构")
+ private Integer serveProviderType;
+
+ @ApiModelProperty("服务人员/机构名称")
+ private String serveProviderName;
+
+ @ApiModelProperty("服务人员/机构电话")
+ private String serveProviderPhone;
+
+ @ApiModelProperty("机构下属服务人员姓名")
+ private String institutionStaffName;
+
+ @ApiModelProperty("机构下属服务人员电话")
+ private String institutionStaffPhone;
+
+ }
+
+ @Data
+ @ApiModel("支付记录模型")
+ public static class PayInfo {
+ @ApiModelProperty("支付状态,2:待支付,4:支付成功")
+ private Integer payStatus;
+
+ @ApiModelProperty("支付渠道,ALI_PAY:支付宝,WECHAT_PAY:微信")
+ private String tradingChannel;
+
+ @ApiModelProperty("三方流水,微信支付订单号或支付宝订单号")
+ private String thirdOrderId;
+
+ @ApiModelProperty("订单总金额")
+ private BigDecimal totalAmount;
+
+ @ApiModelProperty("实付金额")
+ private BigDecimal realPayAmount;
+ }
+
+ @Data
+ @ApiModel("服务信息模型")
+ public static class ServeInfo {
+ @ApiModelProperty("服务人员类型")
+ private Integer serveProviderType;
+
+ @ApiModelProperty("服务人员/机构名称")
+ private String serveProviderName;
+
+ @ApiModelProperty("机构下属服务人员姓名")
+ private String institutionStaffName;
+
+ @ApiModelProperty("服务实际开始时间")
+ private LocalDateTime realServeStartTime;
+
+ @ApiModelProperty("服务开始图片")
+ private List serveBeforeImgs;
+
+ @ApiModelProperty("服务开始说明")
+ private String serveBeforeIllustrate;
+
+ @ApiModelProperty("服务完成时间")
+ private LocalDateTime realServeEndTime;
+
+ @ApiModelProperty("服务完成图片")
+ private List serveAfterImgs;
+
+ @ApiModelProperty("服务完成说明")
+ private String serveAfterIllustrate;
+ }
+
+ @Data
+ @ApiModel("退款信息模型")
+ public static class RefundInfo {
+ @ApiModelProperty("退款状态:0:发起退款,1:退款中,2:成功,3:失败")
+ private Integer refundStatus;
+
+ @ApiModelProperty("取消人类型,0:系统,1:普通用户,4:管理员")
+ private Integer cancellerType;
+
+ @ApiModelProperty("退款人,退款人和取消人保持一致")
+ private String cancelerName;
+
+ @ApiModelProperty("退款理由和取消理由一致")
+ private String cancelReason;
+
+ @ApiModelProperty("支付渠道,ALI_PAY:支付宝,WECHAT_PAY:微信")
+ private String tradingChannel;
+
+ @ApiModelProperty("退款三方流水,微信支付订单号或支付宝订单号")
+ private String thirdRefundOrderId;
+
+ @ApiModelProperty("退款金额,和实付金额保持一致")
+ private BigDecimal realPayAmount;
+
+ @ApiModelProperty("退款时间;和取消时间保持一致")
+ private LocalDateTime cancelTime;
+ }
+
+ @Data
+ @ApiModel("订单取消模型")
+ public static class CancelInfo {
+ @ApiModelProperty("取消人类型,0:系统,1:普通用户,4:管理员")
+ private Integer cancellerType;
+
+ @ApiModelProperty("取消人")
+ private String cancelerName;
+
+ @ApiModelProperty("取消时间")
+ private LocalDateTime cancelTime;
+
+ @ApiModelProperty("取消理由")
+ private String cancelReason;
+
+ }
+
+ @Data
+ @ApiModel("状态节点流转模型")
+ @AllArgsConstructor
+ public static class OrderProgress {
+ @ApiModelProperty("订单状态,0:待支付,100:派单中,200:待服务,300:服务中,400:待评价,500:订单完成,600:订单取消,700已退单")
+ private Integer status;
+
+ @ApiModelProperty("时间")
+ private LocalDateTime dateTime;
+ }
+}
diff --git a/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/model/dto/response/OrdersDispatchResDTO.java b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/model/dto/response/OrdersDispatchResDTO.java
new file mode 100644
index 0000000..4355504
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/model/dto/response/OrdersDispatchResDTO.java
@@ -0,0 +1,31 @@
+package com.jzo2o.orders.manager.model.dto.response;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ * @author itcast
+ */
+@Data
+@ApiModel("派单列表")
+public class OrdersDispatchResDTO {
+ @ApiModelProperty(value = "派单id",required = true)
+ private Long id;
+ @ApiModelProperty(value = "订单编号", required = true)
+ private String ordersNo;
+ @ApiModelProperty(value = "分类名称",required = true)
+ private String serveTypeName;
+ @ApiModelProperty(value = "服务项名称",required = true)
+ private String serveItemName;
+ @ApiModelProperty(value = "服务费",required = true)
+ private BigDecimal serveFee;
+ @ApiModelProperty(value = "预约时间",required = true)
+ private LocalDateTime serveStartTime;
+ @ApiModelProperty(value = "服务地址",required = true)
+ private String serveAddress;
+
+}
diff --git a/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/model/dto/response/OrdersPayResDTO.java b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/model/dto/response/OrdersPayResDTO.java
new file mode 100644
index 0000000..e922b47
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/model/dto/response/OrdersPayResDTO.java
@@ -0,0 +1,30 @@
+package com.jzo2o.orders.manager.model.dto.response;
+
+import com.jzo2o.api.trade.enums.PayChannelEnum;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * 订单支付响应体
+ *
+ * @author itcast
+ * @create 2023/9/4 10:00
+ **/
+@Data
+@ApiModel("订单支付响应体")
+public class OrdersPayResDTO {
+
+ @ApiModelProperty(value = "二维码base64数据")
+ private String qrCode;
+ @ApiModelProperty(value = "业务系统订单号")
+ private Long productOrderNo;
+ @ApiModelProperty(value = "交易系统订单号【对于三方来说:商户订单】")
+ private Long tradingOrderNo;
+ @ApiModelProperty(value = "支付渠道【支付宝、微信、现金、免单挂账】")
+ private String tradingChannel;
+ @ApiModelProperty(value = "支付状态 待支付或支付成功")
+ private int payStatus;
+}
diff --git a/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/model/dto/response/OrdersSeizeListResDTO.java b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/model/dto/response/OrdersSeizeListResDTO.java
new file mode 100644
index 0000000..8e754ea
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/model/dto/response/OrdersSeizeListResDTO.java
@@ -0,0 +1,89 @@
+package com.jzo2o.orders.manager.model.dto.response;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Data
+@ApiModel("抢单列表")
+@NoArgsConstructor
+@AllArgsConstructor
+public class OrdersSeizeListResDTO implements Serializable {
+
+ @ApiModelProperty("抢单列表")
+ private List ordersSeizes;
+
+ @Data
+ public static class OrdersSeize implements Serializable{
+ /**
+ * 订单id
+ */
+ @ApiModelProperty(value = "订单id",required = true)
+ private Long id;
+
+ /**
+ * 服务名称
+ */
+ @ApiModelProperty(value = "服务项名称",required = true)
+ private String serveItemName;
+
+ @ApiModelProperty(value = "服务分类id",required = true)
+ private Long serveTypeId;
+
+ /**
+ * 服务分类名称
+ */
+ @ApiModelProperty(value = "服务类型名称",required = true)
+ private String serveTypeName;
+
+ /**
+ * 服务地址
+ */
+ @ApiModelProperty(value = "服务地址",required = true)
+ private String serveAddress;
+
+ /**
+ * 服务项目图片
+ */
+ @ApiModelProperty(value = "服务图片",required = true)
+ private String serveItemImg;
+
+ /**
+ * 收益
+ */
+ @ApiModelProperty(value = "服务费",required = true)
+ private BigDecimal serveFee;
+
+ /**
+ * 服务开始时间
+ */
+ @ApiModelProperty(value = "服务开始时间",required = true)
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
+ @JsonSerialize(using = LocalDateTimeSerializer.class)
+ private LocalDateTime serveStartTime;
+
+ /**
+ * 开始派单时间
+ */
+ @ApiModelProperty(value = "服务开始派单时间",required = true)
+ private LocalDateTime startDispatchTime;
+
+
+ /**
+ * 服务数量
+ */
+ @ApiModelProperty(value = "服务数量",required = true)
+ private Integer purNum;
+
+ }
+}
diff --git a/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/model/dto/response/OrdersServeDetailResDTO.java b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/model/dto/response/OrdersServeDetailResDTO.java
new file mode 100644
index 0000000..cf77d05
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/model/dto/response/OrdersServeDetailResDTO.java
@@ -0,0 +1,125 @@
+package com.jzo2o.orders.manager.model.dto.response;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * @author itcast
+ */
+@Data
+@ApiModel("订单详情信息")
+public class OrdersServeDetailResDTO {
+ @ApiModelProperty("服务单id")
+ private Long id;
+ @ApiModelProperty(value = "服务单状态,0:待分配,1:待服务,2:服务中,3:服务完成,4:已取消,5:被退单", required = true)
+ private Integer serveStatus;
+
+ @ApiModelProperty("服务信息")
+ private ServeInfo serveInfo;
+
+ @ApiModelProperty("客户信息")
+ private CustomerInfo customerInfo;
+
+ @ApiModelProperty("订单信息")
+ private OrdersInfo ordersInfo;
+
+ @ApiModelProperty("退款信息")
+ private RefundInfo refundInfo;
+
+ @ApiModelProperty("取消信息")
+ private CancelInfo cancelInfo;
+//
+//
+ @Data
+ @ApiModel("取消详情")
+ @NoArgsConstructor
+ @AllArgsConstructor
+ @Builder
+ public static class CancelInfo {
+ @ApiModelProperty("取消原因")
+ private String cancelReason;
+ @ApiModelProperty("取消时间")
+ private LocalDateTime cancelTime;
+ }
+ @Data
+ @ApiModel("退款信息")
+ private static class RefundInfo {
+ @ApiModelProperty("退款时间")
+ private LocalDateTime refundTime;
+ @ApiModelProperty("退款原因")
+ private String refundReason;
+ @ApiModelProperty("退款金额")
+ private BigDecimal refundAmount;
+ }
+ @Data
+ @ApiModel("服务信息")
+ @NoArgsConstructor
+ @AllArgsConstructor
+ @Builder
+ public static class ServeInfo {
+ @ApiModelProperty(value = "服务类型", required = true)
+ private String serveTypeName;
+ @ApiModelProperty(value = "服务项名称", required = true)
+ private String serveItemName;
+ @ApiModelProperty(value = "服务数量", required = true)
+ private Integer serveNum;
+ @ApiModelProperty(value = "服务单位", required = true)
+ private Integer unit;
+ @ApiModelProperty(value = "机构服务人", required = true)
+ private String institutionStaffName;
+ @ApiModelProperty(value = "服务前照片列表")
+ private List serveBeforeImgs;
+ @ApiModelProperty(value = "服务前照片列表")
+ private List serveAfterImgs;
+ @ApiModelProperty(value = "服务开始说明")
+ private String serveBeforeIllustrate;
+ @ApiModelProperty(value = "服务完成说明")
+ private String serveAfterIllustrate;
+ @ApiModelProperty("服务实际开始时间")
+ private LocalDateTime realServeStartTime;
+ @ApiModelProperty("服务实际完成时间")
+ private LocalDateTime realServeEndTime;
+ @ApiModelProperty("服务图片地址")
+ private String serveItemImg;
+ }
+
+
+ @Data
+ @ApiModel("客户信息")
+ @NoArgsConstructor
+ @AllArgsConstructor
+ @Builder
+ public static class CustomerInfo {
+ @ApiModelProperty(value = "联系人", required = true)
+ private String contactsName;
+ @ApiModelProperty(value = "联系人手机号", required = true)
+ private String contactsPhone;
+ @ApiModelProperty(value = "服务地址", required = true)
+ private String serveAddress;
+ }
+
+
+ @Data
+ @ApiModel("订单信息")
+ @NoArgsConstructor
+ @AllArgsConstructor
+ @Builder
+ public static class OrdersInfo {
+
+ @ApiModelProperty(value = "服务单单编号", required = true)
+ private Long ordersId;
+ @ApiModelProperty(value = "服务开始时间", required = true)
+ private LocalDateTime serveStartTime;
+ @ApiModelProperty("订单金额")
+ private BigDecimal ordersAmount;
+ }
+
+}
diff --git a/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/model/dto/response/OrdersServeListResDTO.java b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/model/dto/response/OrdersServeListResDTO.java
new file mode 100644
index 0000000..274f07e
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/model/dto/response/OrdersServeListResDTO.java
@@ -0,0 +1,19 @@
+package com.jzo2o.orders.manager.model.dto.response;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+@Data
+@ApiModel("服务单列表,无分页")
+@NoArgsConstructor
+@AllArgsConstructor
+public class OrdersServeListResDTO {
+
+ @ApiModelProperty("服务单列表")
+ private List ordersServes;
+}
diff --git a/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/model/dto/response/OrdersServeResDTO.java b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/model/dto/response/OrdersServeResDTO.java
new file mode 100644
index 0000000..f5a61b5
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/model/dto/response/OrdersServeResDTO.java
@@ -0,0 +1,60 @@
+package com.jzo2o.orders.manager.model.dto.response;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ * @author itcast
+ */
+@Data
+@ApiModel("服务分页查询相关模型")
+public class OrdersServeResDTO {
+
+ @ApiModelProperty(value = "服务单id",required = true)
+ private Long id;
+
+ @ApiModelProperty(value = "服务分类名称",required = true)
+ private String serveTypeName;
+
+ @ApiModelProperty("服务名称")
+ private String serveItemName;
+
+ @ApiModelProperty(value = "服务地址",required = true)
+ private String serveAddress;
+
+ @ApiModelProperty(value = "服务开始时间",required = true)
+ private LocalDateTime serveStartTime;
+
+ @ApiModelProperty("服务图片地址")
+ private String serveItemImg;
+
+ @ApiModelProperty(value = "订单金额",required = true)
+ private BigDecimal ordersAmount;
+
+ @ApiModelProperty(value = "创建时间",required = true)
+ private LocalDateTime createTime;
+
+ @ApiModelProperty("服务状态:服务状态,0:待分配,1:待服务,2:服务中,3:服务完成,4:已取消,5:被退单")
+ private Integer serveStatus;
+
+ @ApiModelProperty("取消时间")
+ private LocalDateTime cancelTime;
+
+ @ApiModelProperty("实际服务开始时间")
+ private LocalDateTime realServeStartTime;
+
+ @ApiModelProperty("实际服务结束时间")
+ private LocalDateTime realServeEndTime;
+
+ @ApiModelProperty("订单id")
+ private Long ordersId;
+
+ @ApiModelProperty("排序字段")
+ private Long sortBy;
+
+
+}
diff --git a/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/model/dto/response/OrdersServeStatusNumResDTO.java b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/model/dto/response/OrdersServeStatusNumResDTO.java
new file mode 100644
index 0000000..3920950
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/model/dto/response/OrdersServeStatusNumResDTO.java
@@ -0,0 +1,27 @@
+package com.jzo2o.orders.manager.model.dto.response;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author itcast
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@ApiModel("服务单状态的数量")
+public class OrdersServeStatusNumResDTO {
+ @ApiModelProperty(required = true, value = "未分配")
+ private Long noAllocation;
+ @ApiModelProperty(required = true, value = "未开始服务")
+ private Long noServed;
+ @ApiModelProperty(required = true, value = "服务中,待服务完成")
+ private Long serving;
+
+ public static OrdersServeStatusNumResDTO empty() {
+ return new OrdersServeStatusNumResDTO(0L,0L,0L);
+ }
+}
diff --git a/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/model/dto/response/PlaceOrderResDTO.java b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/model/dto/response/PlaceOrderResDTO.java
new file mode 100644
index 0000000..7bfd719
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/model/dto/response/PlaceOrderResDTO.java
@@ -0,0 +1,19 @@
+package com.jzo2o.orders.manager.model.dto.response;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author itcast
+ */
+@ApiModel("下单响应信息")
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class PlaceOrderResDTO {
+ @ApiModelProperty("订单id")
+ private Long id;
+}
diff --git a/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/model/dto/response/ServeProviderServeResDTO.java b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/model/dto/response/ServeProviderServeResDTO.java
new file mode 100644
index 0000000..7ad8d93
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/model/dto/response/ServeProviderServeResDTO.java
@@ -0,0 +1,65 @@
+package com.jzo2o.orders.manager.model.dto.response;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * 服务人员/机构服务数据
+ *
+ * @author itcast
+ * @create 2023/9/15 14:26
+ **/
+@Data
+@ApiModel("服务人员/机构服务数据")
+public class ServeProviderServeResDTO {
+
+ @ApiModelProperty("订单id")
+ private Long id;
+
+ @ApiModelProperty("服务名称")
+ private String serveItemName;
+
+ @ApiModelProperty("机构下属服务人员id")
+ private Long institutionStaffId;
+
+ @ApiModelProperty("机构下属服务人员姓名")
+ private String institutionStaffName;
+
+ @ApiModelProperty("机构下属服务人员电话")
+ private String institutionStaffPhone;
+
+ /**
+ * 服务前照片
+ */
+ @ApiModelProperty("服务前照片")
+ private List serveBeforeImgs;
+
+ /**
+ * 服务后照片
+ */
+ @ApiModelProperty("服务后照片")
+ private List serveAfterImgs;
+
+ /**
+ * 实际支付金额
+ */
+ @ApiModelProperty("实际支付金额")
+ private BigDecimal ordersAmount;
+
+ /**
+ * 评分
+ */
+ @ApiModelProperty("评分")
+ private Double score;
+
+ /**
+ * 实际服务完结时间
+ */
+ @ApiModelProperty("实际服务完结时间")
+ private LocalDateTime realServeEndTime;
+}
diff --git a/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/porperties/OrdersJobProperties.java b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/porperties/OrdersJobProperties.java
new file mode 100644
index 0000000..bc91b3d
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/porperties/OrdersJobProperties.java
@@ -0,0 +1,34 @@
+package com.jzo2o.orders.manager.porperties;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author itcast
+ */
+@Data
+@Component
+@ConfigurationProperties(prefix = "jzo2o.job")
+public class OrdersJobProperties {
+
+ /**
+ * 自动评价订单数量,默认100
+ */
+ private Integer autoEvaluateCount = 100;
+
+ /**
+ * 退款订单数量,默认100
+ */
+ private Integer refundOrderCount = 100;
+
+ /**
+ * 超时支付订单数量,默认100
+ */
+ private Integer overTimePayOrderCount = 100;
+
+ /**
+ * 派单超时订单数量,默认100
+ */
+ private Integer dispatchOverTimeOrderCount = 100;
+}
\ No newline at end of file
diff --git a/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/porperties/TradeProperties.java b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/porperties/TradeProperties.java
new file mode 100644
index 0000000..9f58a27
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/porperties/TradeProperties.java
@@ -0,0 +1,24 @@
+package com.jzo2o.orders.manager.porperties;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author itcast
+ */
+@Data
+@Component
+@ConfigurationProperties(prefix = "jzo2o.trade")
+public class TradeProperties {
+
+ /**
+ * 支付宝商户id
+ */
+ private Long aliEnterpriseId;
+
+ /**
+ * 微信支付商户id
+ */
+ private Long wechatEnterpriseId;
+}
\ No newline at end of file
diff --git a/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/service/IBreachRecordService.java b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/service/IBreachRecordService.java
new file mode 100644
index 0000000..b9b3080
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/service/IBreachRecordService.java
@@ -0,0 +1,34 @@
+package com.jzo2o.orders.manager.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.jzo2o.orders.base.enums.BreachHaviorTypeEnum;
+import com.jzo2o.orders.base.model.domain.BreachRecord;
+
+/**
+ *
+ * 违约记录 服务类
+ *
+ *
+ * @author itcast
+ * @since 2023-08-02
+ */
+public interface IBreachRecordService extends IService {
+
+
+ /**
+ * 单独添加违约记录
+ *
+ * @param breachRecord 违约信息
+ */
+ void add(BreachRecord breachRecord);
+
+
+ /**
+ * 统计违约记录
+ * @param serveProviderId 服务人员或机构id
+ * @param breachHaviorTypeEnum 拒单类型
+ * @return
+ */
+ int count(Long serveProviderId, BreachHaviorTypeEnum breachHaviorTypeEnum, int breachDay);
+
+}
diff --git a/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/service/IOrdersCanceledService.java b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/service/IOrdersCanceledService.java
new file mode 100644
index 0000000..45c90c3
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/service/IOrdersCanceledService.java
@@ -0,0 +1,16 @@
+package com.jzo2o.orders.manager.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.jzo2o.orders.base.model.domain.OrdersCanceled;
+
+/**
+ *
+ * 订单取消服务类
+ *
+ *
+ * @author itcast
+ * @since 2023-08-19
+ */
+public interface IOrdersCanceledService extends IService {
+
+}
diff --git a/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/service/IOrdersCreateService.java b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/service/IOrdersCreateService.java
new file mode 100644
index 0000000..0728e0f
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/service/IOrdersCreateService.java
@@ -0,0 +1,33 @@
+package com.jzo2o.orders.manager.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.jzo2o.api.market.dto.request.CouponUseBackReqDTO;
+import com.jzo2o.api.market.dto.response.AvailableCouponsResDTO;
+import com.jzo2o.api.orders.dto.response.OrderResDTO;
+import com.jzo2o.api.orders.dto.response.OrderSimpleResDTO;
+import com.jzo2o.common.model.PageResult;
+import com.jzo2o.common.model.msg.TradeStatusMsg;
+import com.jzo2o.orders.base.model.domain.Orders;
+import com.jzo2o.orders.manager.model.dto.OrderCancelDTO;
+import com.jzo2o.orders.manager.model.dto.request.OrderPageQueryReqDTO;
+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.response.OperationOrdersDetailResDTO;
+import com.jzo2o.orders.manager.model.dto.response.OrdersPayResDTO;
+import com.jzo2o.orders.manager.model.dto.response.PlaceOrderResDTO;
+
+import java.util.List;
+
+/**
+ *
+ * 下单服务类
+ *
+ *
+ * @author itcast
+ * @since 2023-07-10
+ */
+public interface IOrdersCreateService extends IService {
+
+
+}
diff --git a/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/service/IOrdersManagerService.java b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/service/IOrdersManagerService.java
new file mode 100644
index 0000000..ed1301c
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/service/IOrdersManagerService.java
@@ -0,0 +1,65 @@
+package com.jzo2o.orders.manager.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.jzo2o.api.market.dto.request.CouponUseBackReqDTO;
+import com.jzo2o.api.market.dto.response.AvailableCouponsResDTO;
+import com.jzo2o.api.orders.dto.response.OrderResDTO;
+import com.jzo2o.api.orders.dto.response.OrderSimpleResDTO;
+import com.jzo2o.common.model.PageResult;
+import com.jzo2o.common.model.msg.TradeStatusMsg;
+import com.jzo2o.orders.base.model.domain.Orders;
+import com.jzo2o.orders.manager.model.dto.OrderCancelDTO;
+import com.jzo2o.orders.manager.model.dto.request.OrderPageQueryReqDTO;
+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.response.OperationOrdersDetailResDTO;
+import com.jzo2o.orders.manager.model.dto.response.OrdersPayResDTO;
+import com.jzo2o.orders.manager.model.dto.response.PlaceOrderResDTO;
+
+import java.util.List;
+
+/**
+ *
+ * 订单表 服务类
+ *
+ *
+ * @author itcast
+ * @since 2023-07-10
+ */
+public interface IOrdersManagerService extends IService {
+
+ /**
+ * @param ids
+ * @return
+ */
+ List batchQuery(List ids);
+
+ Orders queryById(Long id);
+
+ /**
+ * 滚动分页查询
+ *
+ * @param currentUserId 当前用户id
+ * @param ordersStatus 订单状态,0:待支付,100:派单中,200:待服务,300:服务中,400:待评价,500:订单完成,600:已取消,700:已关闭
+ * @param sortBy 排序字段
+ * @return 订单列表
+ */
+ List consumerQueryList(Long currentUserId, Integer ordersStatus, Long sortBy);
+
+
+ /**
+ * 根据订单id查询
+ *
+ * @param id 订单id
+ * @return 订单详情
+ */
+ OrderResDTO getDetail(Long id);
+ /**
+ * 订单评价
+ *
+ * @param ordersId 订单id
+ */
+ void evaluationOrder(Long ordersId);
+
+}
diff --git a/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/service/IOrdersRefundService.java b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/service/IOrdersRefundService.java
new file mode 100644
index 0000000..6707a4b
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/service/IOrdersRefundService.java
@@ -0,0 +1,24 @@
+package com.jzo2o.orders.manager.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.jzo2o.orders.base.model.domain.OrdersRefund;
+
+import java.util.List;
+
+/**
+ *
+ * 订单退款表 服务类
+ *
+ *
+ * @author itcast
+ * @since 2023-09-07
+ */
+public interface IOrdersRefundService extends IService {
+
+ /**
+ * 查询指定数量的退款订单
+ *
+ * @param count 数量
+ */
+ List queryRefundOrderListByCount(Integer count);
+}
diff --git a/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/service/IOrdersServeManagerService.java b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/service/IOrdersServeManagerService.java
new file mode 100644
index 0000000..08076a0
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/service/IOrdersServeManagerService.java
@@ -0,0 +1,48 @@
+package com.jzo2o.orders.manager.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.jzo2o.api.orders.dto.response.InstitutionStaffServeCountResDTO;
+import com.jzo2o.common.model.PageResult;
+import com.jzo2o.orders.base.model.domain.OrdersServe;
+import com.jzo2o.orders.manager.model.dto.request.*;
+import com.jzo2o.orders.manager.model.dto.response.OrdersServeDetailResDTO;
+import com.jzo2o.orders.manager.model.dto.response.OrdersServeResDTO;
+import com.jzo2o.orders.manager.model.dto.response.OrdersServeStatusNumResDTO;
+import com.jzo2o.orders.manager.model.dto.response.ServeProviderServeResDTO;
+
+import java.util.List;
+
+/**
+ *
+ * 服务服务单 服务类
+ *
+ *
+ * @author itcast
+ * @since 2023-07-26
+ */
+public interface IOrdersServeManagerService extends IService {
+
+
+ /**
+ * 批量获取服务单
+ *
+ * @param ids 服务单id列表
+ * @return 服务单列表
+ */
+ List batchQuery(List ids);
+
+ /**
+ * 获取服务单信息
+ * @param id
+ * @return 服务单信息
+ */
+ OrdersServe queryById(Long id);
+
+ /**
+ * 根据机构服务人员id查询服务数量
+ *
+ * @param institutionStaffId 机构服务人员id
+ * @return 服务数量
+ */
+ InstitutionStaffServeCountResDTO countByInstitutionStaffId(Long institutionStaffId);
+}
diff --git a/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/service/impl/BreachRecordServiceImpl.java b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/service/impl/BreachRecordServiceImpl.java
new file mode 100644
index 0000000..b3e326b
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/service/impl/BreachRecordServiceImpl.java
@@ -0,0 +1,39 @@
+package com.jzo2o.orders.manager.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.jzo2o.common.utils.DateUtils;
+import com.jzo2o.orders.base.enums.BreachHaviorTypeEnum;
+import com.jzo2o.orders.base.mapper.BreachRecordMapper;
+import com.jzo2o.orders.base.model.domain.BreachRecord;
+import com.jzo2o.orders.manager.service.IBreachRecordService;
+import org.springframework.stereotype.Service;
+
+/**
+ *
+ * 违约记录 服务实现类
+ *
+ *
+ * @author itcast
+ * @since 2023-08-02
+ */
+@Service
+public class BreachRecordServiceImpl extends ServiceImpl implements IBreachRecordService {
+
+
+
+ @Override
+ public void add(BreachRecord breachRecord) {
+ breachRecord.setBreachDay(DateUtils.getDay());
+ breachRecord.setBreachTime(DateUtils.now());
+ baseMapper.insert(breachRecord);
+ }
+
+
+ @Override
+ public int count(Long serveProviderId, BreachHaviorTypeEnum breachHaviorTypeEnum, int breachDay) {
+ return lambdaQuery().eq(BreachRecord::getServeProviderId, serveProviderId)
+ .eq(BreachRecord::getBehaviorType, breachHaviorTypeEnum.getType())
+ .eq(BreachRecord::getBreachDay, breachDay)
+ .count();
+ }
+}
diff --git a/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/service/impl/OrdersCanceledServiceImpl.java b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/service/impl/OrdersCanceledServiceImpl.java
new file mode 100644
index 0000000..bbdf8e3
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/service/impl/OrdersCanceledServiceImpl.java
@@ -0,0 +1,20 @@
+package com.jzo2o.orders.manager.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.jzo2o.orders.base.mapper.OrdersCanceledMapper;
+import com.jzo2o.orders.base.model.domain.OrdersCanceled;
+import com.jzo2o.orders.manager.service.IOrdersCanceledService;
+import org.springframework.stereotype.Service;
+
+/**
+ *
+ * 订单取消服务实现类
+ *
+ *
+ * @author itcast
+ * @since 2023-08-19
+ */
+@Service
+public class OrdersCanceledServiceImpl extends ServiceImpl implements IOrdersCanceledService {
+
+}
diff --git a/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/service/impl/OrdersCreateServiceImpl.java b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/service/impl/OrdersCreateServiceImpl.java
new file mode 100644
index 0000000..5863b4c
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/service/impl/OrdersCreateServiceImpl.java
@@ -0,0 +1,22 @@
+package com.jzo2o.orders.manager.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.jzo2o.orders.base.mapper.OrdersMapper;
+import com.jzo2o.orders.base.model.domain.Orders;
+import com.jzo2o.orders.manager.service.IOrdersCreateService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+/**
+ *
+ * 下单服务类
+ *
+ *
+ * @author itcast
+ * @since 2023-07-10
+ */
+@Slf4j
+@Service
+public class OrdersCreateServiceImpl extends ServiceImpl implements IOrdersCreateService {
+
+}
diff --git a/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/service/impl/OrdersManagerServiceImpl.java b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/service/impl/OrdersManagerServiceImpl.java
new file mode 100644
index 0000000..129a217
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/service/impl/OrdersManagerServiceImpl.java
@@ -0,0 +1,109 @@
+package com.jzo2o.orders.manager.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.json.JSONUtil;
+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.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.jzo2o.api.orders.dto.response.OrderResDTO;
+import com.jzo2o.api.orders.dto.response.OrderSimpleResDTO;
+import com.jzo2o.common.enums.EnableStatusEnum;
+import com.jzo2o.common.utils.ObjectUtils;
+import com.jzo2o.orders.base.mapper.OrdersMapper;
+import com.jzo2o.orders.base.model.domain.Orders;
+import com.jzo2o.orders.base.model.dto.OrderSnapshotDTO;
+import com.jzo2o.orders.manager.service.IOrdersManagerService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+import static com.jzo2o.orders.base.constants.FieldConstants.SORT_BY;
+
+/**
+ *
+ * 订单表 服务实现类
+ *
+ *
+ * @author itcast
+ * @since 2023-07-10
+ */
+@Slf4j
+@Service
+public class OrdersManagerServiceImpl extends ServiceImpl implements IOrdersManagerService {
+
+ @Override
+ public List batchQuery(List ids) {
+ LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery().in(Orders::getId, ids).ge(Orders::getUserId, 0);
+ return baseMapper.selectList(queryWrapper);
+ }
+
+ @Override
+ public Orders queryById(Long id) {
+ return baseMapper.selectById(id);
+ }
+
+ /**
+ * 滚动分页查询
+ *
+ * @param currentUserId 当前用户id
+ * @param ordersStatus 订单状态,0:待支付,100:派单中,200:待服务,300:服务中,400:待评价,500:订单完成,600:已取消,700:已关闭
+ * @param sortBy 排序字段
+ * @return 订单列表
+ */
+ @Override
+ public List consumerQueryList(Long currentUserId, Integer ordersStatus, Long sortBy) {
+ //1.构件查询条件
+ LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery()
+ .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 queryPage = new Page<>();
+ queryPage.addOrder(OrderItem.desc(SORT_BY));
+ queryPage.setSearchCount(false);
+
+ //2.查询订单列表
+ Page ordersPage = baseMapper.selectPage(queryPage, queryWrapper);
+ List records = ordersPage.getRecords();
+ List orderSimpleResDTOS = BeanUtil.copyToList(records, OrderSimpleResDTO.class);
+ return orderSimpleResDTOS;
+
+ }
+ /**
+ * 根据订单id查询
+ *
+ * @param id 订单id
+ * @return 订单详情
+ */
+ @Override
+ public OrderResDTO getDetail(Long id) {
+ Orders orders = queryById(id);
+ OrderResDTO orderResDTO = BeanUtil.toBean(orders, OrderResDTO.class);
+ return orderResDTO;
+ }
+
+ /**
+ * 订单评价
+ *
+ * @param ordersId 订单id
+ */
+ @Override
+ @Transactional
+ public void evaluationOrder(Long ordersId) {
+// //查询订单详情
+// Orders orders = queryById(ordersId);
+//
+// //构建订单快照
+// OrderSnapshotDTO orderSnapshotDTO = OrderSnapshotDTO.builder()
+// .evaluationTime(LocalDateTime.now())
+// .build();
+//
+// //订单状态变更
+// orderStateMachine.changeStatus(orders.getUserId(), orders.getId().toString(), OrderStatusChangeEventEnum.EVALUATE, orderSnapshotDTO);
+ }
+
+}
diff --git a/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/service/impl/OrdersRefundServiceImpl.java b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/service/impl/OrdersRefundServiceImpl.java
new file mode 100644
index 0000000..d959208
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/service/impl/OrdersRefundServiceImpl.java
@@ -0,0 +1,36 @@
+package com.jzo2o.orders.manager.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.jzo2o.orders.base.mapper.OrdersRefundMapper;
+import com.jzo2o.orders.base.model.domain.OrdersRefund;
+import com.jzo2o.orders.manager.service.IOrdersRefundService;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ *
+ * 订单退款表 服务实现类
+ *
+ *
+ * @author itcast
+ * @since 2023-09-07
+ */
+@Service
+public class OrdersRefundServiceImpl extends ServiceImpl implements IOrdersRefundService {
+
+ /**
+ * 查询指定数量的退款订单
+ *
+ * @param count 数量
+ */
+ @Override
+ public List queryRefundOrderListByCount(Integer count) {
+ LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery()
+ .orderByAsc(OrdersRefund::getCreateTime)
+ .last("limit " + count);
+ return baseMapper.selectList(queryWrapper);
+ }
+}
diff --git a/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/service/impl/OrdersServeManagerServiceImpl.java b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/service/impl/OrdersServeManagerServiceImpl.java
new file mode 100644
index 0000000..2dd47ab
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/service/impl/OrdersServeManagerServiceImpl.java
@@ -0,0 +1,63 @@
+package com.jzo2o.orders.manager.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.jzo2o.api.orders.dto.response.InstitutionStaffServeCountResDTO;
+import com.jzo2o.common.utils.CollUtils;
+import com.jzo2o.orders.base.mapper.OrdersServeMapper;
+import com.jzo2o.orders.base.model.domain.OrdersServe;
+import com.jzo2o.orders.manager.service.IOrdersServeManagerService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ *
+ * 服务服务单 服务实现类
+ *
+ *
+ * @author itcast
+ * @since 2023-07-26
+ */
+@Service
+@Slf4j
+public class OrdersServeManagerServiceImpl extends ServiceImpl implements IOrdersServeManagerService {
+
+
+ @Override
+ public List batchQuery(List ids) {
+ return lambdaQuery()
+ .in(OrdersServe::getId, ids)
+ .ge(OrdersServe::getServeProviderId, 0)
+ .list();
+ }
+
+ @Override
+ public OrdersServe queryById(Long id) {
+ List list = lambdaQuery()
+ .eq(OrdersServe::getId, id)
+ .ge(OrdersServe::getServeProviderId, 0)
+ .last(" limit 1")
+ .list();
+ return CollUtils.getFirst(list);
+ }
+
+
+ /**
+ * 根据机构服务人员id查询服务数量
+ *
+ * @param institutionStaffId 机构服务人员id
+ * @return 服务数量
+ */
+ @Override
+ public InstitutionStaffServeCountResDTO countByInstitutionStaffId(Long institutionStaffId) {
+ LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery()
+ .eq(OrdersServe::getInstitutionStaffId, institutionStaffId)
+ .gt(OrdersServe::getId, 0)
+ .gt(OrdersServe::getServeProviderId, 0);
+ Integer count = baseMapper.selectCount(queryWrapper);
+ return new InstitutionStaffServeCountResDTO(count);
+ }
+}
diff --git a/jzo2o-oreders/jzo2o-orders-manager/src/main/resources/bootstrap-dev.yml b/jzo2o-oreders/jzo2o-orders-manager/src/main/resources/bootstrap-dev.yml
new file mode 100644
index 0000000..f6f1d00
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-manager/src/main/resources/bootstrap-dev.yml
@@ -0,0 +1,18 @@
+spring:
+ cloud:
+ nacos:
+ username: nacos
+ password: nacos
+ server-addr: 192.168.122.135:8848
+ config:
+ namespace: 75a593f5-33e6-4c65-b2a0-18c403d20f63
+ file-extension: yaml
+ discovery:
+ namespace: 75a593f5-33e6-4c65-b2a0-18c403d20f63
+ ip: ${ACCESS_IP:}
+
+################# 日志配置 #################
+logging:
+ level:
+ com.jzo2o: debug
+ org.mongodb.driver: info
\ No newline at end of file
diff --git a/jzo2o-oreders/jzo2o-orders-manager/src/main/resources/bootstrap-prod.yml b/jzo2o-oreders/jzo2o-orders-manager/src/main/resources/bootstrap-prod.yml
new file mode 100644
index 0000000..7569cd9
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-manager/src/main/resources/bootstrap-prod.yml
@@ -0,0 +1,14 @@
+spring:
+ cloud:
+ nacos:
+ username: ${NACOS_USERNAME}
+ password: ${NACOS_PASSWORD}
+ server-addr: ${NACOS_ADDR}
+ config:
+ namespace: ${NACOS_NAMESPACE}
+ file-extension: yaml
+ discovery:
+ namespace: ${NACOS_NAMESPACE}
+logging:
+ level:
+ com.jzo2o: debug
\ No newline at end of file
diff --git a/jzo2o-oreders/jzo2o-orders-manager/src/main/resources/bootstrap-test.yml b/jzo2o-oreders/jzo2o-orders-manager/src/main/resources/bootstrap-test.yml
new file mode 100644
index 0000000..7569cd9
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-manager/src/main/resources/bootstrap-test.yml
@@ -0,0 +1,14 @@
+spring:
+ cloud:
+ nacos:
+ username: ${NACOS_USERNAME}
+ password: ${NACOS_PASSWORD}
+ server-addr: ${NACOS_ADDR}
+ config:
+ namespace: ${NACOS_NAMESPACE}
+ file-extension: yaml
+ discovery:
+ namespace: ${NACOS_NAMESPACE}
+logging:
+ level:
+ com.jzo2o: debug
\ No newline at end of file
diff --git a/jzo2o-oreders/jzo2o-orders-manager/src/main/resources/bootstrap.yml b/jzo2o-oreders/jzo2o-orders-manager/src/main/resources/bootstrap.yml
new file mode 100644
index 0000000..3c239a9
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-manager/src/main/resources/bootstrap.yml
@@ -0,0 +1,76 @@
+################# 服务器配置 #################
+server:
+ port: 11504
+ undertow:
+ accesslog:
+ enabled: true
+ pattern: "%t %a "%r" %s (%D ms)"
+ dir: /data/logs/undertow/${spring.application.name}/access-logs/
+ servlet:
+ context-path: /orders-manager
+################# spring公共配置 #################
+spring:
+ mvc:
+ path-match:
+ matching-strategy: ant_path_matcher
+ format:
+ date: yyyy-MM-dd HH:mm:ss
+ jackson:
+ time-zone: GMT+8
+ date-format: yyyy-MM-dd HH:mm:ss
+ profiles:
+ active: dev
+ application:
+ name: jzo2o-orders-manager
+ main:
+ # 支持循环依赖注入
+ allow-circular-references: true
+ # bean名相同覆盖
+ allow-bean-definition-overriding: true
+ cloud:
+ nacos:
+ config:
+ file-extension: yaml
+ shared-configs: # 共享配置
+ - data-id: shared-redis-cluster.yaml # 共享redis集群配置
+ refresh: false
+ - data-id: shared-xxl-job.yaml # xxl-job配置
+ refresh: false
+ - data-id: shared-rabbitmq.yaml # rabbitmq配置
+ refresh: false
+ - data-id: shared-es.yaml # es
+ refresh: false
+ - data-id: shared-mysql.yaml # mysql配置
+ refresh: false
+# - data-id: shared-spring-seata.yaml # seata
+# refresh: false
+
+
+################# 项目独有配置 #################
+mysql:
+ db-name: jzo2o-orders
+mybatis:
+ mapper-locations: mapper/*.xml
+ type-aliases-package: com.jzo2o.orders.base.mapper
+swagger:
+ enable: true
+ package-path: com.jzo2o.orders.manager.controller
+ title: 家政服务-订单管理模块接口文档
+ description: 管理订单的生命周期、订单状态、订单信息
+ contact-name: 传智教育·研究院
+ contact-url: http://www.itcast.cn/
+ contact-email: yjy@itcast.cn
+ version: v1.0
+feign:
+ enable: true
+seata:
+ enabled: true
+
+
+
+################# 日志配置 #################
+logging:
+ level:
+ com.jzo2o: debug
+ io.seata: debug
+ org.apache.shardingsphere: debug
diff --git a/jzo2o-oreders/jzo2o-orders-manager/src/main/resources/seata.conf b/jzo2o-oreders/jzo2o-orders-manager/src/main/resources/seata.conf
new file mode 100644
index 0000000..763df30
--- /dev/null
+++ b/jzo2o-oreders/jzo2o-orders-manager/src/main/resources/seata.conf
@@ -0,0 +1,5 @@
+client {
+ application.id = jzo2o-orders-manager ## 应用唯一主键
+; transaction.service.group = DEFAULT_GROUP ## 所属事务组
+ transaction.service.group = jzo2o-seata
+}
\ No newline at end of file
diff --git a/jzo2o-oreders/pom.xml b/jzo2o-oreders/pom.xml
new file mode 100644
index 0000000..b4042b6
--- /dev/null
+++ b/jzo2o-oreders/pom.xml
@@ -0,0 +1,27 @@
+
+
+ 4.0.0
+
+ jzo2o-oreders
+ 1.0-SNAPSHOT
+ pom
+
+
+ jzo2o-parent
+ com.jzo2o
+ 1.0-SNAPSHOT
+
+
+
+ jzo2o-orders-base
+ jzo2o-orders-manager
+
+
+
+ 11
+ 11
+ UTF-8
+
+
\ No newline at end of file