Browse Source

基础配置

release
张彭杰 2 years ago
parent
commit
d284872201
14 changed files with 431 additions and 0 deletions
  1. 34
      dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/paymentorder/constant/PaymentMethodEnum.java
  2. 40
      dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/paymentorder/constant/PaymentOrderStatusEnum.java
  3. 40
      dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/paymentorder/entity/PaymentOrder.java
  4. 31
      dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/order/user/OrderUserCommandController.java
  5. 35
      dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/order/user/request/UserSubmitOrderDto.java
  6. 23
      dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/order/user/response/UserSubmitOrderVo.java
  7. 86
      dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/order/OrderApplicationService.java
  8. 13
      dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/order/OrderAggregate.java
  9. 20
      dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/paymentorder/PaymentOrderAggregate.java
  10. 7
      dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/paymentorder/repository/PaymentOrderRepository.java
  11. 27
      dating-agency-mall-server/src/main/java/com/qniao/dam/domain/service/order/SubmitOrderDomainService.java
  12. 7
      dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/domain/PaymentOrderDao.java
  13. 31
      dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/repository/impl/PaymentOrderRepositoryImpl.java
  14. 37
      dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/utils/SnowFlakeUtil.java

34
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;
}
}

40
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;
}
}

40
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<OrderItem> {
@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;
}

31
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());
}
}

35
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<Order> {
@ApiModelProperty("征婚资料标识")
@NotNull(message = "征婚资料标识不能为空")
private Long miId;
@ApiModelProperty("产品规格标识")
@NotNull(message = "产品规格标识不能为空")
private Long productSpecId;
@Override
public Order trans2Domain() {
Order order = new Order();
order.setMiId(miId);
List<OrderItem> orderItemList = new ArrayList<>();
OrderItem orderItem = new OrderItem();
orderItem.setProductSpecId(productSpecId);
orderItem.setQuantity(1);
order.setOrderItemList(orderItemList);
return order;
}
}

23
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;
}

86
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());
});
}
}
}

13
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);
}
}

20
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);
}
}

7
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<PaymentOrder, Long> {
}

27
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);
}
}

7
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<PaymentOrder> {
}

31
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();
}
}

37
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();
}
}
Loading…
Cancel
Save