package com.tulingxueyuan.mall.modules.oms.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DateField;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.tulingxueyuan.mall.common.api.ResultCode;
import com.tulingxueyuan.mall.common.exception.ApiException;
import com.tulingxueyuan.mall.common.service.RedisService;
import com.tulingxueyuan.mall.component.TradePayProp;
import com.tulingxueyuan.mall.dto.*;
import com.tulingxueyuan.mall.modules.oms.mapper.OmsCartItemMapper;
import com.tulingxueyuan.mall.modules.oms.mapper.OmsOrderMapper;
import com.tulingxueyuan.mall.modules.oms.model.OmsCartItem;
import com.tulingxueyuan.mall.modules.oms.model.OmsOrder;
import com.tulingxueyuan.mall.modules.oms.model.OmsOrderItem;
import com.tulingxueyuan.mall.modules.oms.model.OmsOrderSetting;
import com.tulingxueyuan.mall.modules.oms.service.OmsCartItemService;
import com.tulingxueyuan.mall.modules.oms.service.OmsOrderItemService;
import com.tulingxueyuan.mall.modules.oms.service.OmsOrderService;
import com.tulingxueyuan.mall.modules.oms.service.OmsOrderSettingService;
import com.tulingxueyuan.mall.modules.pms.model.PmsProduct;
import com.tulingxueyuan.mall.modules.pms.model.PmsSkuStock;
import com.tulingxueyuan.mall.modules.pms.service.PmsProductService;
import com.tulingxueyuan.mall.modules.pms.service.PmsSkuStockService;
import com.tulingxueyuan.mall.modules.ums.model.UmsMember;
import com.tulingxueyuan.mall.modules.ums.model.UmsMemberReceiveAddress;
import com.tulingxueyuan.mall.modules.ums.service.UmsMemberReceiveAddressService;
import com.tulingxueyuan.mall.modules.ums.service.UmsMemberService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* <p>
* 订单表 服务实现类
* </p>
*
* @author SunMiao
* @since 2022-10-02
*/
@Service
@Slf4j
public class OmsOrderServiceImpl extends ServiceImpl<OmsOrderMapper, OmsOrder> implements OmsOrderService {
@Autowired
OmsCartItemService cartItemService;
@Autowired
PmsProductService productService;
@Autowired
UmsMemberReceiveAddressService addressService;
@Autowired
UmsMemberService memberService;
@Autowired
OmsCartItemMapper cartItemMapper;
@Autowired
PmsSkuStockService skuStockService;
@Autowired
OmsOrderItemService orderItemService;
@Autowired
RedisService redisService;
@Value("${redis.key.prefix.orderId}")
private String REDIS_KEY_PREFIX_ORDER_ID;
@Autowired
OmsOrderSettingService orderSettingService;
@Autowired
TradePayProp tradePayProp;
@Autowired
OmsOrderService orderService;
/**
* 初始化确认订单的商品和收获地址信息
* @param ids
* @return
*/
@Override
public ConfirmOrderDTO generateConfirmOrder(List<Long> ids) {
if(CollectionUtil.isEmpty(ids)){
throw new ApiException(ResultCode.VALIDATE_FAILED);
}
ConfirmOrderDTO confirmOrderDTO = new ConfirmOrderDTO();
// 1.商品
List<OmsCartItem> omsCartItemList = cartItemService.listByIds(ids);
confirmOrderDTO.setCartList(omsCartItemList);
// 2.计算价格
calcCatAmount(confirmOrderDTO);
// 3.收货地址
UmsMember currentMember = memberService.getCurrentMember();
QueryWrapper<UmsMemberReceiveAddress> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(UmsMemberReceiveAddress::getMemberId,currentMember.getId());
List<UmsMemberReceiveAddress> list = addressService.list(queryWrapper);
confirmOrderDTO.setAddressList(list);
return confirmOrderDTO;
}
/**
* 计算价格
* @param confirmOrderDTO
*/
public void calcCatAmount(ConfirmOrderDTO confirmOrderDTO){
// 计算商品数量
Integer productTotal=0;
// 总价
BigDecimal priceTotal=new BigDecimal(0);
// 运费
BigDecimal freightAmount=new BigDecimal(0);
for (OmsCartItem omsCartItem : cartItemService.getCarList()) {
// 商品总件数
productTotal += omsCartItem.getQuantity();
// 总价
priceTotal = priceTotal.add(omsCartItem.getPrice().multiply(new BigDecimal(omsCartItem.getQuantity())));
PmsProduct product = productService.getById(omsCartItem.getProductId());
String serviceIds = product.getServiceIds();
String[] serviceIdsArray = serviceIds.split(",");
if (serviceIdsArray.length>0){
// 判断是否包邮
if (!ArrayUtil.containsAny(serviceIdsArray,3)){
freightAmount = freightAmount.add(new BigDecimal(10));
}
}
}
confirmOrderDTO.setProductTotal(productTotal);
confirmOrderDTO.setPriceTotal(priceTotal);
confirmOrderDTO.setFreightAmount(freightAmount);
confirmOrderDTO.setPayAmount(priceTotal.subtract(freightAmount));
}
/**
* 下单
* 1. 判断库存(如果没有库存直接提示)
* 没有库存id 只有购物车id,根据购物车id查询所有购物车信息
* 2.保存订单主表oms_order信息 订单号
* 3.保存订单详情表oms_order_item(购物车转移)
* 4.锁定库存(如果用户超过10分钟没有支付-恢复库存)
* 5.删除对应购物车
* 先不考虑并发
* @param paramDTO
* @return
*/
@Override
@Transactional // 事务,保持数据一致性
public OmsOrder generateOrder(OrderParamDTO paramDTO) {
// 根据购物车id 查询真实库存
UmsMember currentMember = memberService.getCurrentMember();
QueryWrapper<OmsCartItem> queryWrapper = new QueryWrapper<>();
// 防止用户篡改
queryWrapper.lambda()
.eq(OmsCartItem::getMemberId,currentMember.getId())
.in(OmsCartItem::getId,paramDTO.getItemIds());
// 根据购物车id查询所有购物车信息
List<CartItemStockDTO> cartItemStockByIds = cartItemMapper.getCartItemStockByIds(queryWrapper);
// 1. 判断库存(如果没有库存直接提示)
// 获取库存不足的名称 如果productName为空说明库存未超出
String productName = hasStock(cartItemStockByIds);
if(StrUtil.isNotEmpty(productName)){
throw new ApiException("您的手速过慢,"+productName+"已被别人买走");
}
// 如果有库存就进行下单操作:
//2.保存订单主表oms_order信息 订单号
OmsOrder omsOrder = newOrder(paramDTO, currentMember, cartItemStockByIds);
this.save(omsOrder);
// 3.保存订单详情表oms_order_item( 购物车转移)
List<OmsOrderItem> list=newOrderItems(omsOrder,cartItemStockByIds);
orderItemService.saveBatch(list);
// 4.锁定库存
lockStock(cartItemStockByIds);
// 5.删除对应购物车
removeCartItem(cartItemStockByIds);
return omsOrder;
}
/**
* 读取下单成功后的订单详情
* @param id
* @return
*/
@Override
public OrderDet
没有合适的资源?快使用搜索试试~ 我知道了~
后台管理系统源码,基于ssm开发
共1165个文件
class:408个
java:403个
xml:312个
需积分: 5 0 下载量 149 浏览量
2024-01-25
20:37:31
上传
评论
收藏 1.42MB ZIP 举报
温馨提示
后台管理系统源码,基于ssm开发
资源推荐
资源详情
资源评论
收起资源包目录
后台管理系统源码,基于ssm开发 (1165个子文件)
OmsOrder.class 28KB
PmsProduct.class 26KB
PmsProduct.class 26KB
OmsOrderServiceImpl.class 23KB
UmsAdminServiceImpl.class 16KB
OmsOrderItem.class 14KB
OmsCartItem.class 13KB
AlipayHeartbeatSynRequestBuilder.class 13KB
UmsAdminController.class 12KB
AbsAlipayTradeService.class 12KB
UmsMember.class 11KB
PmsProductServiceImpl.class 11KB
OmsCartItemServiceImpl.class 10KB
TradeServiceImpl.class 10KB
UmsAdminCacheServiceImpl.class 10KB
UmsRoleServiceImpl.class 9KB
UmsMemberServiceImpl.class 9KB
PmsProductCategoryServiceImpl.class 9KB
AlipayTradeWithHBServiceImpl.class 9KB
RedisServiceImpl.class 9KB
RedisServiceImpl.class 9KB
RedisServiceImpl.class 9KB
PmsComment.class 9KB
PmsComment.class 9KB
AlipayTradePayRequestBuilder.class 9KB
UmsMenuServiceImpl.class 9KB
AlipayHeartbeatSynRequestBuilder$BizContent.class 9KB
UmsMemberLevel.class 9KB
UmsMemberLevel.class 9KB
MyBatisPlusGenerator.class 8KB
OrderController.class 8KB
AlipayTradePrecreateRequestBuilder.class 8KB
PmsProductAttribute.class 8KB
PmsProductAttribute.class 8KB
PmsSkuStock.class 8KB
PmsProductAttributeServiceImpl.class 8KB
PmsSkuStock.class 8KB
OrderDetailDTO.class 8KB
PmsProductOperateLog.class 8KB
PmsProductOperateLog.class 8KB
PmsProductCategory.class 7KB
PmsProductCategory.class 7KB
SmsHomeAdvertise.class 7KB
PmsProductController.class 7KB
UmsRoleController.class 7KB
PmsBrand.class 7KB
PmsBrand.class 7KB
Configs.class 6KB
UmsMemberReceiveAddress.class 6KB
AlipayTradeServiceImpl.class 6KB
UmsAdmin.class 6KB
UmsResourceServiceImpl.class 6KB
AlipayTradePayRequestBuilder$BizContent.class 6KB
AlipayTradePrecreateRequestBuilder$BizContent.class 6KB
ProductSaveParamsDTO.class 6KB
UmsMenu.class 6KB
ProductSaveParamsDTO.class 6KB
PmsBrandServiceImpl.class 6KB
MallSecurityConfig.class 6KB
BaseRedisConfig.class 6KB
PmsProductCategoryController.class 6KB
PmsFeightTemplate.class 5KB
PmsFeightTemplate.class 5KB
SmsHomeCategory.class 5KB
UmsMenuController.class 5KB
ProductConditionDTO.class 5KB
ProductConditionDTO.class 5KB
PmsBrandController.class 5KB
SwaggerProperties.class 5KB
UmsResourceController.class 5KB
ProductDTO.class 5KB
JwtTokenUtil.class 5KB
ConfirmOrderDTO.class 5KB
PmsCommentReplay.class 5KB
PmsCommentReplay.class 5KB
PmsProductAttributeController.class 5KB
UmsRole.class 5KB
AlipayTradeRefundRequestBuilder.class 5KB
UmsMemberLoginLog.class 5KB
OmsOrderSetting.class 5KB
UmsMemberReceiveAddressServiceImpl.class 5KB
BaseSwaggerConfig.class 5KB
PmsProductVertifyRecord.class 4KB
PmsProductVertifyRecord.class 4KB
UmsResource.class 4KB
UmsAdminLoginLog.class 4KB
PmsAlbum.class 4KB
PmsAlbum.class 4KB
CommonResult.class 4KB
PmsProductAttributeCategoryController.class 4KB
PmsMemberPrice.class 4KB
PmsMemberPrice.class 4KB
PmsProductLadder.class 4KB
PmsProductLadder.class 4KB
OssServiceImpl.class 4KB
SmsHomeAdvertiseServiceImpl.class 4KB
AbsHbRunner.class 4KB
ZxingUtils.class 4KB
UmsResourceCategoryServiceImpl.class 4KB
AuthInterceptor.class 4KB
共 1165 条
- 1
- 2
- 3
- 4
- 5
- 6
- 12
资源评论
槐月初叁
- 粉丝: 229
- 资源: 5
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功