From d284872201b52a23c0b8917e7082c41e591958b8 Mon Sep 17 00:00:00 2001 From: Derran Date: Fri, 15 Mar 2024 18:13:14 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9F=BA=E7=A1=80=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../constant/PaymentMethodEnum.java | 34 ++++++++ .../constant/PaymentOrderStatusEnum.java | 40 +++++++++ .../paymentorder/entity/PaymentOrder.java | 40 +++++++++ .../user/OrderUserCommandController.java | 31 +++++++ .../user/request/UserSubmitOrderDto.java | 35 ++++++++ .../user/response/UserSubmitOrderVo.java | 23 +++++ .../order/OrderApplicationService.java | 86 +++++++++++++++++++ .../aggregate/order/OrderAggregate.java | 13 +++ .../paymentorder/PaymentOrderAggregate.java | 20 +++++ .../repository/PaymentOrderRepository.java | 7 ++ .../order/SubmitOrderDomainService.java | 27 ++++++ .../dao/domain/PaymentOrderDao.java | 7 ++ .../impl/PaymentOrderRepositoryImpl.java | 31 +++++++ .../infrastructure/utils/SnowFlakeUtil.java | 37 ++++++++ 14 files changed, 431 insertions(+) create mode 100644 dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/paymentorder/constant/PaymentMethodEnum.java create mode 100644 dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/paymentorder/constant/PaymentOrderStatusEnum.java create mode 100644 dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/paymentorder/entity/PaymentOrder.java create mode 100644 dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/order/user/OrderUserCommandController.java create mode 100644 dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/order/user/request/UserSubmitOrderDto.java create mode 100644 dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/order/user/response/UserSubmitOrderVo.java create mode 100644 dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/order/OrderApplicationService.java create mode 100644 dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/paymentorder/PaymentOrderAggregate.java create mode 100644 dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/paymentorder/repository/PaymentOrderRepository.java create mode 100644 dating-agency-mall-server/src/main/java/com/qniao/dam/domain/service/order/SubmitOrderDomainService.java create mode 100644 dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/domain/PaymentOrderDao.java create mode 100644 dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/repository/impl/PaymentOrderRepositoryImpl.java create mode 100644 dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/utils/SnowFlakeUtil.java diff --git a/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/paymentorder/constant/PaymentMethodEnum.java b/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/paymentorder/constant/PaymentMethodEnum.java new file mode 100644 index 0000000..521bdc6 --- /dev/null +++ b/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/paymentorder/constant/PaymentMethodEnum.java @@ -0,0 +1,34 @@ +package com.qniao.dam.domian.aggregate.paymentorder.constant; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonValue; +import lombok.Getter; + +@Getter +@JsonFormat(shape = JsonFormat.Shape.OBJECT) +public enum PaymentMethodEnum { + + WECHAT_PAY(1, "微信付款"); + + @EnumValue + @JsonValue + private final Integer value; + private final String desc; + + PaymentMethodEnum(Integer value, String desc) { + this.value = value; + this.desc = desc; + } + + @JsonCreator + public static PaymentMethodEnum get(Object code) { + for (PaymentMethodEnum e : PaymentMethodEnum.values()) { + if (e.getValue().equals(code)) { + return e; + } + } + return null; + } +} \ No newline at end of file diff --git a/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/paymentorder/constant/PaymentOrderStatusEnum.java b/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/paymentorder/constant/PaymentOrderStatusEnum.java new file mode 100644 index 0000000..56c12f4 --- /dev/null +++ b/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/paymentorder/constant/PaymentOrderStatusEnum.java @@ -0,0 +1,40 @@ +package com.qniao.dam.domian.aggregate.paymentorder.constant; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonValue; +import lombok.Getter; + +@Getter +@JsonFormat(shape = JsonFormat.Shape.OBJECT) +public enum PaymentOrderStatusEnum { + + UNPAID(1, "未付款"), + + PARTIAL_PAYMENT(2, "部分付款"), + + PAID(3, "已付款"), + + CANCELED(4, "已取消"); + + @EnumValue + @JsonValue + private final Integer value; + private final String desc; + + PaymentOrderStatusEnum(Integer value, String desc) { + this.value = value; + this.desc = desc; + } + + @JsonCreator + public static PaymentOrderStatusEnum get(Object code) { + for (PaymentOrderStatusEnum e : PaymentOrderStatusEnum.values()) { + if (e.getValue().equals(code)) { + return e; + } + } + return null; + } +} \ No newline at end of file diff --git a/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/paymentorder/entity/PaymentOrder.java b/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/paymentorder/entity/PaymentOrder.java new file mode 100644 index 0000000..c31b476 --- /dev/null +++ b/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/paymentorder/entity/PaymentOrder.java @@ -0,0 +1,40 @@ +package com.qniao.dam.domain.aggregate.paymentorder.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.qniao.dam.domain.aggregate.order.entity.OrderItem; +import com.qniao.dam.domian.aggregate.paymentorder.constant.PaymentMethodEnum; +import com.qniao.dam.domian.aggregate.paymentorder.constant.PaymentOrderStatusEnum; +import com.qniao.domain.Entity; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("da_order") +public class PaymentOrder extends Entity { + + @ApiModelProperty("订单标识") + private Long orderId; + + @ApiModelProperty("应付金额") + private BigDecimal payableAmount; + + @ApiModelProperty("未付金额") + private BigDecimal unpaidAmount; + + @ApiModelProperty("实付金额") + private BigDecimal paidAmount; + + @ApiModelProperty("付款时间") + private LocalDateTime paidTime; + + @ApiModelProperty("付款方式") + private PaymentMethodEnum paymentMethod; + + @ApiModelProperty("状态") + private PaymentOrderStatusEnum status; +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/order/user/OrderUserCommandController.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/order/user/OrderUserCommandController.java new file mode 100644 index 0000000..8431410 --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/order/user/OrderUserCommandController.java @@ -0,0 +1,31 @@ +package com.qniao.dam.api.command.order.user; + +import com.qniao.dam.api.command.order.user.request.UserSubmitOrderDto; +import com.qniao.dam.api.command.order.user.response.UserSubmitOrderVo; +import com.qniao.dam.application.service.order.OrderApplicationService; +import com.qniao.dam.domain.aggregate.order.entity.Order; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.validation.Valid; + +@RestController +@RequestMapping("user") +@Api(tags = "订单") +public class OrderUserCommandController { + + @Resource + private OrderApplicationService orderApplicationService; + + @ApiOperation("用户提交订单") + @PostMapping("submit/order") + public UserSubmitOrderVo userSubmitOrder(@RequestBody @Valid UserSubmitOrderDto dto, + @RequestParam("userId") Long userId) { + Order order = dto.trans2Domain(); + order.setUserId(userId); + return orderApplicationService.submit(dto.trans2Domain()); + } + +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/order/user/request/UserSubmitOrderDto.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/order/user/request/UserSubmitOrderDto.java new file mode 100644 index 0000000..cc189c3 --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/order/user/request/UserSubmitOrderDto.java @@ -0,0 +1,35 @@ +package com.qniao.dam.api.command.order.user.request; + +import com.qniao.dam.domain.aggregate.order.entity.Order; +import com.qniao.dam.domain.aggregate.order.entity.OrderItem; +import com.qniao.domain.Trans2DomainAssembler; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.ArrayList; +import java.util.List; + +@Data +public class UserSubmitOrderDto implements Trans2DomainAssembler { + + @ApiModelProperty("征婚资料标识") + @NotNull(message = "征婚资料标识不能为空") + private Long miId; + + @ApiModelProperty("产品规格标识") + @NotNull(message = "产品规格标识不能为空") + private Long productSpecId; + + @Override + public Order trans2Domain() { + Order order = new Order(); + order.setMiId(miId); + List orderItemList = new ArrayList<>(); + OrderItem orderItem = new OrderItem(); + orderItem.setProductSpecId(productSpecId); + orderItem.setQuantity(1); + order.setOrderItemList(orderItemList); + return order; + } +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/order/user/response/UserSubmitOrderVo.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/order/user/response/UserSubmitOrderVo.java new file mode 100644 index 0000000..62899ad --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/order/user/response/UserSubmitOrderVo.java @@ -0,0 +1,23 @@ +package com.qniao.dam.api.command.order.user.response; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@AllArgsConstructor +@NoArgsConstructor +@Data +public class UserSubmitOrderVo { + + @ApiModelProperty("订单标识") + @JsonSerialize(using = ToStringSerializer.class) + private Long orderId; + + @ApiModelProperty("付款单标识") + @JsonSerialize(using = ToStringSerializer.class) + private Long paymentOrderId; + +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/order/OrderApplicationService.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/order/OrderApplicationService.java new file mode 100644 index 0000000..12cda87 --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/order/OrderApplicationService.java @@ -0,0 +1,86 @@ +package com.qniao.dam.application.service.order; + +import cn.hutool.core.collection.CollUtil; +import com.qniao.dam.api.command.order.user.response.UserSubmitOrderVo; +import com.qniao.dam.domain.aggregate.order.entity.Order; +import com.qniao.dam.domain.aggregate.order.entity.OrderItem; +import com.qniao.dam.domain.aggregate.paymentorder.entity.PaymentOrder; +import com.qniao.dam.domain.aggregate.product.entity.Product; +import com.qniao.dam.domain.aggregate.product.repository.ProductRepository; +import com.qniao.dam.domain.aggregate.productspec.entity.ProductSpec; +import com.qniao.dam.domain.aggregate.productspec.repository.ProductSpecRepository; +import com.qniao.dam.domain.service.order.SubmitOrderDomainService; +import com.qniao.dam.infrastructure.utils.SnowFlakeUtil; +import com.qniao.dam.query.product.ProductQueryService; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.math.BigDecimal; + +@Service +public class OrderApplicationService { + + @Resource + private SubmitOrderDomainService submitOrderDomainService; + @Resource + private ProductSpecRepository productSpecRepository; + @Resource + private ProductRepository productRepository; + @Resource + private SnowFlakeUtil snowFlakeUtil; + + + /** + * todo 库存校验 暂时不用考虑 + * + * @param order + * @return + */ + public UserSubmitOrderVo submit(Order order) { + //1. 填充订单信息 + fillOrderInfo(order); + //2. 订单金额计算 + countOrderAmount(order); + //3. 设置订单号 + order.setOrderCode(snowFlakeUtil.getSnowflakeOrderCode()); + //4. 组织付款单信息 + PaymentOrder paymentOrder = makePaymentOrder(order); + submitOrderDomainService.handle(order,paymentOrder); + return new UserSubmitOrderVo(order.getId(), paymentOrder.getId()); + } + + private PaymentOrder makePaymentOrder(Order order) { + PaymentOrder paymentOrder = new PaymentOrder(); + paymentOrder.setPayableAmount(order.getSettlementAmount()); + paymentOrder.setUnpaidAmount(paymentOrder.getPayableAmount()); + paymentOrder.setPaidAmount(BigDecimal.ZERO); + return paymentOrder; + } + + private void countOrderAmount(Order order) { + if (CollUtil.isNotEmpty(order.getOrderItemList())) { + BigDecimal totalSettlementAmount = BigDecimal.ZERO; + for (OrderItem orderItem : order.getOrderItemList()) { + orderItem.setSettlementAmount(orderItem.getUnitSettlementPrice().multiply(BigDecimal.valueOf(orderItem.getQuantity()))); + totalSettlementAmount = totalSettlementAmount.add(orderItem.getSettlementAmount()); + } + order.setSettlementAmount(totalSettlementAmount); + } + } + + private void fillOrderInfo(Order order) { + if (CollUtil.isNotEmpty(order.getOrderItemList())) { + order.getOrderItemList().forEach(orderItem -> { + ProductSpec productSpec = productSpecRepository.load(orderItem.getProductSpecId()); + Product product = productRepository.load(productSpec.getProductId()); + orderItem.setProductId(product.getId()); + orderItem.setProductType(product.getProductType()); + orderItem.setMainCategory(product.getMainCategory()); + orderItem.setSubCategory(product.getSubCategory()); + orderItem.setProductTitle(product.getProductTitle()); + orderItem.setProductDesc(product.getProductDesc()); + orderItem.setUnitSettlementPrice(productSpec.getUnitSellingPrice()); + }); + } + } +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/order/OrderAggregate.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/order/OrderAggregate.java index d5666f2..b8394e7 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/order/OrderAggregate.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/order/OrderAggregate.java @@ -1,7 +1,20 @@ package com.qniao.dam.domain.aggregate.order; +import com.qniao.dam.domain.aggregate.order.entity.Order; +import com.qniao.dam.domain.aggregate.order.repository.OrderRepository; +import com.qniao.dam.domian.aggregate.order.constant.OrderStatusEnum; import org.springframework.stereotype.Service; +import javax.annotation.Resource; + @Service public class OrderAggregate { + + @Resource + private OrderRepository orderRepository; + + public void submit(Order order) { + order.setStatus(OrderStatusEnum.UNPAID); + orderRepository.save(order); + } } diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/paymentorder/PaymentOrderAggregate.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/paymentorder/PaymentOrderAggregate.java new file mode 100644 index 0000000..3c1f061 --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/paymentorder/PaymentOrderAggregate.java @@ -0,0 +1,20 @@ +package com.qniao.dam.domain.aggregate.paymentorder; + +import com.qniao.dam.domain.aggregate.paymentorder.entity.PaymentOrder; +import com.qniao.dam.domain.aggregate.paymentorder.repository.PaymentOrderRepository; +import com.qniao.dam.domian.aggregate.paymentorder.constant.PaymentOrderStatusEnum; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +@Service +public class PaymentOrderAggregate { + + @Resource + private PaymentOrderRepository paymentOrderRepository; + + public void create(PaymentOrder paymentOrder) { + paymentOrder.setStatus(PaymentOrderStatusEnum.UNPAID); + paymentOrderRepository.save(paymentOrder); + } +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/paymentorder/repository/PaymentOrderRepository.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/paymentorder/repository/PaymentOrderRepository.java new file mode 100644 index 0000000..862c368 --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/paymentorder/repository/PaymentOrderRepository.java @@ -0,0 +1,7 @@ +package com.qniao.dam.domain.aggregate.paymentorder.repository; + +import com.qniao.dam.domain.aggregate.paymentorder.entity.PaymentOrder; +import com.qniao.domain.Repository; + +public interface PaymentOrderRepository extends Repository { +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/service/order/SubmitOrderDomainService.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/service/order/SubmitOrderDomainService.java new file mode 100644 index 0000000..b8ba9af --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/service/order/SubmitOrderDomainService.java @@ -0,0 +1,27 @@ +package com.qniao.dam.domain.service.order; + +import com.qniao.dam.domain.aggregate.order.OrderAggregate; +import com.qniao.dam.domain.aggregate.order.entity.Order; +import com.qniao.dam.domain.aggregate.paymentorder.PaymentOrderAggregate; +import com.qniao.dam.domain.aggregate.paymentorder.entity.PaymentOrder; +import com.qniao.dam.domian.aggregate.paymentorder.constant.PaymentOrderStatusEnum; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; + +@Service +public class SubmitOrderDomainService { + + @Resource + private OrderAggregate orderAggregate; + @Resource + private PaymentOrderAggregate paymentOrderAggregate; + + @Transactional(rollbackFor = Exception.class) + public void handle(Order order, PaymentOrder paymentOrder) { + orderAggregate.submit(order); + paymentOrder.setOrderId(order.getId()); + paymentOrderAggregate.create(paymentOrder); + } +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/domain/PaymentOrderDao.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/domain/PaymentOrderDao.java new file mode 100644 index 0000000..6169c0d --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/domain/PaymentOrderDao.java @@ -0,0 +1,7 @@ +package com.qniao.dam.infrastructure.persistent.dao.domain; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.qniao.dam.domain.aggregate.paymentorder.entity.PaymentOrder; + +public interface PaymentOrderDao extends BaseMapper { +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/repository/impl/PaymentOrderRepositoryImpl.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/repository/impl/PaymentOrderRepositoryImpl.java new file mode 100644 index 0000000..ba82d2c --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/repository/impl/PaymentOrderRepositoryImpl.java @@ -0,0 +1,31 @@ +package com.qniao.dam.infrastructure.persistent.repository.impl; + +import com.qniao.dam.domain.aggregate.paymentorder.entity.PaymentOrder; +import com.qniao.dam.domain.aggregate.paymentorder.repository.PaymentOrderRepository; +import com.qniao.dam.infrastructure.persistent.dao.domain.PaymentOrderDao; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.Objects; + +@Service +public class PaymentOrderRepositoryImpl implements PaymentOrderRepository { + + @Resource + private PaymentOrderDao paymentOrderDao; + + @Override + public PaymentOrder load(Long id) { + return paymentOrderDao.selectById(id); + } + + @Override + public Long save(PaymentOrder entity) { + if (Objects.isNull(entity.getId()) || Objects.isNull(paymentOrderDao.selectById(entity.getId()))) { + paymentOrderDao.insert(entity); + } else { + paymentOrderDao.updateById(entity); + } + return entity.getId(); + } +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/utils/SnowFlakeUtil.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/utils/SnowFlakeUtil.java new file mode 100644 index 0000000..2fe4b6c --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/utils/SnowFlakeUtil.java @@ -0,0 +1,37 @@ +package com.qniao.dam.infrastructure.utils; + +import cn.hutool.core.lang.Snowflake; +import cn.hutool.core.net.NetUtil; +import cn.hutool.core.util.IdUtil; +import org.springframework.stereotype.Component; + +import java.text.SimpleDateFormat; +import java.time.LocalDate; + +@Component +public class SnowFlakeUtil { + + private long workerId = 1; + private long datacenter = 1; + private Snowflake snowflake = IdUtil.createSnowflake(workerId, datacenter); + + { + workerId = NetUtil.ipv4ToLong(NetUtil.getLocalhostStr()); + System.out.println(workerId); + } + + public long getSnowflakeId() { + return snowflake.nextId(); + } + + public String getSnowflakeOrderCode() { + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd"); + return "D" + dateFormat.format(LocalDate.now()) + getSnowflakeId(); + } + + public long snowflakeId(long workerId, long datacenterId) { + Snowflake snowflake = IdUtil.createSnowflake(workerId, datacenterId); + return snowflake.nextId(); + } + +}