package quick.pager.shop.service.impl;
import com.alibaba.fastjson.JSON;
import com.google.common.collect.Lists;
import io.seata.spring.annotation.GlobalTransactional;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Objects;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import lombok.extern.slf4j.Slf4j;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import quick.pager.shop.activity.client.DiscountCouponClient;
import quick.pager.shop.activity.response.coupon.DiscountCouponResponse;
import quick.pager.shop.cart.client.CartClient;
import quick.pager.shop.cart.client.OrderCartClient;
import quick.pager.shop.cart.request.CartOtherRequest;
import quick.pager.shop.cart.request.OrderCartRequest;
import quick.pager.shop.cart.request.OrderCartSaveRequest;
import quick.pager.shop.cart.response.GoodsCartResponse;
import quick.pager.shop.constants.IConsts;
import quick.pager.shop.constants.SConsts;
import quick.pager.shop.constants.SettlementConstants;
import quick.pager.shop.goods.client.GoodsSkuClient;
import quick.pager.shop.goods.response.sku.GoodsSkuResponse;
import quick.pager.shop.order.client.OrderTradeClient;
import quick.pager.shop.order.enums.OrderStatusEnums;
import quick.pager.shop.order.enums.OrderTypeEnums;
import quick.pager.shop.order.enums.PayTypeEnums;
import quick.pager.shop.order.enums.TradeTypeEnums;
import quick.pager.shop.order.request.OrderTradeSaveRequest;
import quick.pager.shop.platform.dto.SystemConfigDTO;
import quick.pager.shop.service.SettlementOrderService;
import quick.pager.shop.constants.ResponseStatus;
import quick.pager.shop.order.client.SellerOrderClient;
import quick.pager.shop.order.client.UserOrderClient;
import quick.pager.shop.order.request.SellerOrderSaveRequest;
import quick.pager.shop.order.request.UserOrderSaveRequest;
import quick.pager.shop.settlement.dto.DiscountCouponDTO;
import quick.pager.shop.settlement.dto.SettlementDeliveryTimeDTO;
import quick.pager.shop.settlement.dto.SettlementPayTypeDTO;
import quick.pager.shop.settlement.dto.SettlementSkuDTO;
import quick.pager.shop.settlement.request.SettlementCheckRequest;
import quick.pager.shop.settlement.request.SettlementRequest;
import quick.pager.shop.settlement.request.SettlementSkuRequest;
import quick.pager.shop.settlement.request.SettlementSubmitRequest;
import quick.pager.shop.settlement.dto.SettlementAddrDTO;
import quick.pager.shop.settlement.response.SettlementSkuResponse;
import quick.pager.shop.user.client.AddressClient;
import quick.pager.shop.user.client.UserAccountClient;
import quick.pager.shop.user.response.AddressResponse;
import quick.pager.shop.user.response.Response;
import quick.pager.shop.settlement.constants.SettlementRedisKeys;
import quick.pager.shop.user.response.UserAccountResponse;
import quick.pager.shop.utils.Assert;
import quick.pager.shop.utils.DateUtils;
/**
* SettlementOrderServiceImpl
*
* @author siguiyang
*/
@Service
@Slf4j
public class SettlementOrderServiceImpl implements SettlementOrderService {
@Autowired
private DiscountCouponClient discountCouponClient;
@Autowired
private UserOrderClient userOrderClient;
@Autowired
private SellerOrderClient sellerOrderClient;
@Autowired
private CartClient cartClient;
@Autowired
private OrderCartClient orderCartClient;
@Autowired
private OrderTradeClient orderTradeClient;
@Autowired
private AddressClient addressClient;
@Autowired
private UserAccountClient userAccountClient;
@Autowired
private GoodsSkuClient goodsSkuClient;
@Autowired
private RedissonClient redissonClient;
@Autowired
private RedisTemplate<String, Object> redisTemplate;
@Value(("${spring.profiles.active}"))
private String env;
@Override
public Response<SettlementSkuResponse> check(final SettlementCheckRequest request) {
final Long userId = request.getUserId();
final List<Long> goodsCartIds = request.getGoodsCartIds();
final BigDecimal settlementAmount = request.getSettlementAmount();
CartOtherRequest cartOtherReq = new CartOtherRequest();
cartOtherReq.setGoodsCartIds(goodsCartIds);
Response<List<GoodsCartResponse>> cartOtherRes = cartClient.list(cartOtherReq);
if (!cartOtherRes.check()) {
return Response.toError(cartOtherRes.getCode(), cartOtherRes.getMsg());
}
List<GoodsCartResponse> cartOtherResData = cartOtherRes.getData();
cartOtherResData.stream().map(item -> item.getDiscountAmount().multiply(BigDecimal.valueOf(item.getQuantity()))).reduce(BigDecimal::add).ifPresent(amount ->
Assert.isTrue(amount.compareTo(settlementAmount) == 0, () -> "结算金额与清结算金额不一致"));
// 组装数据,并返回
SettlementSkuResponse settlementSkuRes = new SettlementSkuResponse();
// 1. 组装配送地址
Response<AddressResponse> addressRes = addressClient.address(userId);
AddressResponse addressResData = addressRes.getData();
if (addressRes.check() && Objects.nonNull(addressResData)) {
SettlementAddrDTO addr = new SettlementAddrDTO();
addr.setId(addressResData.getId());
addr.setAddrName(addressResData.getDeliveryAddress().concat(addressResData.getHouseNumber()));
addr.setDefaultAddress(addressResData.getDefaultAddress());
addr.setLabel(addressResData.getLabel());
settlementSkuRes.setAddr(addr);
}
// 2. 设置配送时间
settlementSkuRes.setDeliveryTime(this.getDeliveryTime());
// 3. 购买商品
settlementSkuRes.setSkus(this.doSkus(cartOtherResData));
// 4. 支付方式
settlementSkuRes.setPayTypes(this.doPayType());
// 5. 优惠券
settlementSkuRes.setCoupons(this.doDiscountCoupon(userId));
// 6. 商品总金额
BigDecimal orderAmount = cartOtherResData.stream().map(GoodsCartResponse::getDiscountAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
settlementSkuRes.setOrderAmount(orderAmount);
// 7. 配送费
BigDecimal deliveryAmount = this.getDeliveryAmount();
settlementSkuRes.setDeliveryAmount(deliveryAmount);
// 8. 是否免配送费
settlementSkuRes.setFreeDeliveryAmount(this.getFreeDeliveryAmount(orderAmount));
// 9. 用户积分
settlementSkuRes.setIntegral(this.getIntegral(userId));
return Response.toResponse(settlementSkuRes);
}
@Override
@GlobalTransactional
public Response<Long> createOrder(final SettlementRequest request) {
final Long userId = request.getUserId();
final Long sellerId = request.getSellerId();
final List<SettlementSkuRequest> skus = request.getSkus();
final Integer integral = request.getIntegral();
// 1. 幂等性验证
RLock lock = redissonClient.getLock(env.concat(SettlementRedisKeys.APP_SUBMIT_ORDER) + userId);
// 用户订单主键
Long userOrderId = null;
// 商户订单主键
Long sellerOrderId;
try {
if (lock.tryLock(3, TimeUnit.SECONDS)) {
// 2. 生成用户订单
UserOrderSaveRequest userOrderSaveReq = new UserOrderSaveRequest();
userOrderSaveReq.setAddrId(request.getAddrId());
userOrderSaveReq.setCouponId(request.getCouponId());
userOrderSaveReq.setOrderStatus(OrderStatusEnums.BS001);
userOrderSaveReq.setOrderType(OrderTypeEnums.parse(request.getOrderType()));
userOrderSaveReq.setPayType(PayTypeEnums.par
没有合适的资源?快使用搜索试试~ 我知道了~
基于springcloud的分布式电商系统源码.zip
共947个文件
java:771个
xml:57个
yml:30个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 54 浏览量
2023-08-31
09:14:07
上传
评论
收藏 117.49MB ZIP 举报
温馨提示
基于springcloud的分布式电商系统源码.zip
资源推荐
资源详情
资源评论
收起资源包目录
基于springcloud的分布式电商系统源码.zip (947个子文件)
seata.conf 1KB
spring.factories 265B
spring.factories 117B
.gitignore 400B
nacos.tar.gz 77.75MB
seata.tar.gz 46.8MB
script.tar.gz 151KB
SettlementOrderServiceImpl.java 19KB
GoodsServiceImpl.java 15KB
JobTrigger.java 11KB
SysUserServiceImpl.java 10KB
DateUtils.java 8KB
BannerServiceImpl.java 8KB
DefaultWebResponseExceptionTranslator.java 7KB
CartServiceImpl.java 7KB
AppClassificationServiceImpl.java 7KB
OAuth2SecurityConfiguration.java 7KB
BeanCopier.java 7KB
UserDTO.java 7KB
JobServiceImpl.java 7KB
RoleServiceImpl.java 6KB
GoodsSpuServiceImpl.java 6KB
DiscountCouponServiceImpl.java 6KB
PublishCouponDTOListener.java 6KB
UserServiceImpl.java 6KB
GoodsClassServiceImpl.java 5KB
FormServiceImpl.java 5KB
GeneratorService.java 5KB
CopyOptions.java 5KB
ActivityServiceImpl.java 5KB
CommonEnumService.java 5KB
OAuth2ResourceServerConfiguration.java 5KB
ExchangeActivityRuleServiceImpl.java 5KB
BlackListServiceImpl.java 5KB
JobController.java 5KB
SystemConfigServiceImpl.java 5KB
ExchangeClient.java 4KB
UserServiceImpl.java 4KB
GoodsApproveServiceImpl.java 4KB
VerifyCodeUtils.java 4KB
WhiteListServiceImpl.java 4KB
ExchangeServiceImpl.java 4KB
GoodsSkuServiceImpl.java 4KB
NativeMessageServiceImpl.java 4KB
AddressServiceImpl.java 4KB
OSSController.java 4KB
AppUserOrderController.java 4KB
QiniuUploadTests.java 4KB
AssembleClient.java 4KB
SysUserInfoService.java 4KB
MenuServiceImpl.java 4KB
ManageNoSpringTests.java 4KB
DiscountCouponClient.java 4KB
SMSTemplateServiceImpl.java 4KB
UserOrderServiceImpl.java 4KB
QiniuServiceImpl.java 4KB
AssembleServiceImpl.java 4KB
AppDiscountCouponServiceImpl.java 4KB
PhonePasswordTokenGranter.java 3KB
CouponTemplateController.java 3KB
SystemConfigController.java 3KB
AssembleServiceRuleImpl.java 3KB
UploadConfiguration.java 3KB
SystemController.java 3KB
MenuHelper.java 3KB
PermissionServiceImpl.java 3KB
SettlementController.java 3KB
FormController.java 3KB
AliyunServiceImpl.java 3KB
ExchangeRuleController.java 3KB
CouponTemplateServiceImpl.java 3KB
UserOrderServiceImpl.java 3KB
SystemConfigDetailServiceImpl.java 3KB
ExecuteHandler.java 3KB
OAuth2FeignAutoConfiguration.java 3KB
SMSServiceImpl.java 3KB
SmsTokenGranter.java 3KB
AppUserOrderServiceImpl.java 3KB
GoodsController.java 3KB
GoodsSpuController.java 3KB
SendCouponTask.java 3KB
RoleController.java 3KB
ActivityController.java 3KB
JobRunner.java 3KB
GoodsServiceImpl.java 3KB
GoodsClassificationController.java 3KB
BannerController.java 2KB
SMSTemplateController.java 2KB
AppNativeMessageController.java 2KB
CartController.java 2KB
AppUserAddressController.java 2KB
FileUtil.java 2KB
ObjectMapperConfiguration.java 2KB
BlacklistController.java 2KB
ConfigController.java 2KB
JobClient.java 2KB
CouponController.java 2KB
BannerClient.java 2KB
GoodsResponse.java 2KB
SystemConfigClientFallback.java 2KB
共 947 条
- 1
- 2
- 3
- 4
- 5
- 6
- 10
资源评论
栾还是恋
- 粉丝: 29
- 资源: 4996
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功