Browse Source

玫瑰

master
张彭杰 4 months ago
parent
commit
0f4cfb584a
11 changed files with 123 additions and 8 deletions
  1. 4
      dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/order/constant/OrderTypeEnum.java
  2. 4
      dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/product/constant/ProductMainCategoryEnum.java
  3. 2
      dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/product/constant/ProductSubCategoryEnum.java
  4. 3
      dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/virtualaccount/valobj/VirtualAccountRecord.java
  5. 3
      dating-agency-mall-sdk/src/main/java/com/qniao/dam/application/request/UserConsumeVirtualAccountDto.java
  6. 2
      dating-agency-mall-sdk/src/main/java/com/qniao/dam/application/response/ConsumeVirtualAccountVo.java
  7. 2
      dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/virtualaccount/user/request/UserConsumeVirtualAccountDto.java
  8. 2
      dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/virtualaccount/user/response/UserConsumeVirtualAccountVo.java
  9. 66
      dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/virtualaccount/VirtualAccountApplicationService.java
  10. 16
      dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/virtualaccount/VirtualAccountAggregate.java
  11. 27
      dating-agency-mall-server/src/main/java/com/qniao/dam/domain/service/virtualaccount/ConsumeVirtualAccountDomainService.java

4
dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/order/constant/OrderTypeEnum.java

@ -12,7 +12,9 @@ public enum OrderTypeEnum {
NORMAL(1, "普通"),
MARRIAGE_BOUNTY(2, "悬赏招亲");
MARRIAGE_BOUNTY(2, "悬赏招亲"),
VIRTUAL_TYPE(3, "虚拟类型");
@EnumValue
@JsonValue

4
dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/product/constant/ProductMainCategoryEnum.java

@ -25,7 +25,9 @@ public enum ProductMainCategoryEnum {
VIRTUAL_CURRENCY(20, "虚拟货币"),
VIRTUAL_PROP(21, "虚拟道具"),
CHAT_FEE(21, "聊天"),
VIRTUAL_PROP(22, "虚拟道具"),
MATCHMAKER(888, "红娘合伙人"),

2
dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/product/constant/ProductSubCategoryEnum.java

@ -46,6 +46,8 @@ public enum ProductSubCategoryEnum {
VIRTUAL_CURRENCY(2001, "虚拟货币"),
CHAT_FEE(2101, "聊天费用"),
MATCHMAKER_FRANCHISE_FEE(88801, "高级红娘"),
MATCHMAKER_ONLINE_FEE(88802, "线上红娘"),

3
dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/virtualaccount/valobj/VirtualAccountRecord.java

@ -31,6 +31,9 @@ public class VirtualAccountRecord extends ValueObject<VirtualAccountRecord> {
@ApiModelProperty("当前数量")
private Integer currentBalance;
@ApiModelProperty("关联ID")
private Long associateId;
@ApiModelProperty("备注")
private String remark;

3
dating-agency-mall-sdk/src/main/java/com/qniao/dam/application/request/UserConsumeVirtualAccountDto.java

@ -12,8 +12,9 @@ public class UserConsumeVirtualAccountDto {
private Long userId;
private Integer spend;
private Long productSpecId;
private VirtualAccountTradeTypeEnum tradeType;
}

2
dating-agency-mall-sdk/src/main/java/com/qniao/dam/application/response/ConsumeVirtualAccountVo.java

@ -7,4 +7,6 @@ public class ConsumeVirtualAccountVo {
private Boolean success = false;
private String orderId;
}

2
dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/virtualaccount/user/request/UserConsumeVirtualAccountDto.java

@ -12,7 +12,7 @@ public class UserConsumeVirtualAccountDto {
private Long userId;
@NotNull
private Integer spend;
private Long productSpecId;
@NotNull
private VirtualAccountTradeTypeEnum tradeType;

2
dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/virtualaccount/user/response/UserConsumeVirtualAccountVo.java

@ -7,4 +7,6 @@ public class UserConsumeVirtualAccountVo {
private Boolean success = false;
private Long orderId;
}

66
dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/virtualaccount/VirtualAccountApplicationService.java

@ -2,12 +2,26 @@ package com.qniao.dam.application.service.virtualaccount;
import com.qniao.dam.api.command.virtualaccount.user.request.UserConsumeVirtualAccountDto;
import com.qniao.dam.api.command.virtualaccount.user.response.UserConsumeVirtualAccountVo;
import com.qniao.dam.domain.aggregate.order.entity.Order;
import com.qniao.dam.domain.aggregate.order.entity.OrderItem;
import com.qniao.dam.domain.aggregate.product.entity.Product;
import com.qniao.dam.domain.aggregate.productspec.entity.ProductSpec;
import com.qniao.dam.domain.aggregate.virtualaccount.VirtualAccountAggregate;
import com.qniao.dam.domain.aggregate.virtualaccount.entity.VirtualAccount;
import com.qniao.dam.domain.service.virtualaccount.ConsumeVirtualAccountDomainService;
import com.qniao.dam.domian.aggregate.order.constant.OrderBelongingEnum;
import com.qniao.dam.domian.aggregate.order.constant.OrderStatusEnum;
import com.qniao.dam.domian.aggregate.order.constant.OrderTypeEnum;
import com.qniao.dam.infrastructure.persistent.dao.domain.OrderDao;
import com.qniao.dam.infrastructure.persistent.dao.domain.ProductDao;
import com.qniao.dam.infrastructure.persistent.dao.domain.ProductSpecDao;
import com.qniao.dam.infrastructure.utils.SnowFlakeUtil;
import com.qniao.dam.query.virtualaccount.VirtualAccountQueryService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.Collections;
@Service
public class VirtualAccountApplicationService {
@ -16,6 +30,14 @@ public class VirtualAccountApplicationService {
private VirtualAccountAggregate virtualAccountAggregate;
@Resource
private VirtualAccountQueryService virtualAccountQueryService;
@Resource
private ProductDao productDao;
@Resource
private ProductSpecDao productSpecDao;
@Resource
private SnowFlakeUtil snowFlakeUtil;
@Resource
private ConsumeVirtualAccountDomainService consumeVirtualAccountDomainService;
public void create(VirtualAccount virtualAccount) {
virtualAccountAggregate.create(virtualAccount);
@ -33,13 +55,49 @@ public class VirtualAccountApplicationService {
UserConsumeVirtualAccountVo vo = new UserConsumeVirtualAccountVo();
synchronized (dto.getUserId().toString().intern()) {
VirtualAccount virtualAccount = virtualAccountQueryService.queryBy(dto.getUserId());
if (virtualAccount != null && virtualAccount.getBalance() >= dto.getSpend()) {
//找到对应产品
ProductSpec productSpec = productSpecDao.selectById(dto.getProductSpecId());
if (virtualAccount != null && virtualAccount.getBalance() >= productSpec.getUnitSellingPrice().intValue()) {
//余额充足 创建消费订单+扣除余额
Order order = handleOrder(dto.getUserId(), productSpec);
//虚拟账户处理
virtualAccountAggregate.handleData(virtualAccount, order.getSettlementAmount().intValue(), dto.getTradeType());
//保存
consumeVirtualAccountDomainService.handle(virtualAccount, order);
vo.setSuccess(true);
vo.setOrderId(order.getId());
}
}
return vo;
}
private Order handleOrder(Long userId, ProductSpec productSpec) {
Product product = productDao.selectById(productSpec.getProductId());
Order order = new Order();
order.setUserId(userId);
order.setOrderBelonging(OrderBelongingEnum.CUSTOMER);
order.setName(product.getProductTitle());
order.setOrderType(OrderTypeEnum.VIRTUAL_TYPE);
order.setOrderCode(snowFlakeUtil.getSnowflakeOrderCode());
order.setOriginalAmount(productSpec.getUnitSellingPrice());
order.setSettlementAmount(productSpec.getUnitSellingPrice());
order.setPaidTime(LocalDateTime.now());
order.setStatus(OrderStatusEnum.COMPLETED);
OrderItem orderItem = new OrderItem();
orderItem.setProductId(product.getId());
orderItem.setProductSpecId(productSpec.getId());
orderItem.setProductType(product.getProductType());
orderItem.setMainCategory(product.getMainCategory());
orderItem.setSubCategory(product.getSubCategory());
orderItem.setProductTitle(product.getProductTitle());
orderItem.setProductDesc(product.getProductDesc());
orderItem.setUnitOriginalPrice(productSpec.getUnitSellingPrice());
orderItem.setUnitSettlementPrice(productSpec.getUnitSellingPrice());
orderItem.setQuantity(1);
orderItem.setOriginalAmount(productSpec.getUnitSellingPrice());
orderItem.setSettlementAmount(productSpec.getUnitSellingPrice());
order.setOrderItemList(Collections.singletonList(orderItem));
return order;
}
}

16
dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/virtualaccount/VirtualAccountAggregate.java

@ -2,9 +2,12 @@ package com.qniao.dam.domain.aggregate.virtualaccount;
import com.qniao.dam.domain.aggregate.virtualaccount.entity.VirtualAccount;
import com.qniao.dam.domain.aggregate.virtualaccount.repository.VirtualAccountRepository;
import com.qniao.dam.domain.aggregate.virtualaccount.valobj.VirtualAccountRecord;
import com.qniao.dam.domian.aggregate.virtualaccount.constant.VirtualAccountTradeTypeEnum;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.Collections;
/**
* 虚拟账号
@ -28,4 +31,17 @@ public class VirtualAccountAggregate {
public void delete(Long id) {
repository.delete(id);
}
public void handleData(VirtualAccount virtualAccount,
Integer tradeBalance,
VirtualAccountTradeTypeEnum tradeType) {
Integer originalBalance = virtualAccount.getBalance();
virtualAccount.setBalance(originalBalance - tradeBalance);
VirtualAccountRecord record = new VirtualAccountRecord();
record.setTradeType(tradeType);
record.setTradeBalance(tradeBalance);
record.setOriginalBalance(originalBalance);
record.setCurrentBalance(virtualAccount.getBalance());
virtualAccount.setRecordList(Collections.singletonList(record));
}
}

27
dating-agency-mall-server/src/main/java/com/qniao/dam/domain/service/virtualaccount/ConsumeVirtualAccountDomainService.java

@ -0,0 +1,27 @@
package com.qniao.dam.domain.service.virtualaccount;
import com.qniao.dam.domain.aggregate.order.OrderAggregate;
import com.qniao.dam.domain.aggregate.order.entity.Order;
import com.qniao.dam.domain.aggregate.virtualaccount.VirtualAccountAggregate;
import com.qniao.dam.domain.aggregate.virtualaccount.entity.VirtualAccount;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
@Service
public class ConsumeVirtualAccountDomainService {
@Resource
private VirtualAccountAggregate virtualAccountAggregate;
@Resource
private OrderAggregate orderAggregate;
@Transactional(rollbackFor = Exception.class)
public void handle(VirtualAccount virtualAccount, Order order) {
orderAggregate.complete(order);
virtualAccount.getRecordList().get(0).setAssociateId(order.getId());
virtualAccountAggregate.edit(virtualAccount);
}
}
Loading…
Cancel
Save