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