package com.ruoyi.order.service.impl.order;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.ruoyi.common.core.utils.StringUtils;
|
import com.ruoyi.order.domain.dto.AppBuyGoodsDto;
|
import com.ruoyi.order.domain.dto.AppSureOrderDto;
|
import com.ruoyi.order.domain.pojo.goods.Goods;
|
import com.ruoyi.order.domain.pojo.goods.GoodsFile;
|
import com.ruoyi.order.domain.pojo.goods.ShopGoods;
|
import com.ruoyi.order.domain.pojo.order.Order;
|
import com.ruoyi.order.domain.vo.AppSureOrderGoodsVo;
|
import com.ruoyi.order.domain.vo.AppSureOrderVo;
|
import com.ruoyi.order.service.goods.GoodsFileService;
|
import com.ruoyi.order.service.goods.ShopGoodsService;
|
import com.ruoyi.system.api.RemoteMemberService;
|
import com.ruoyi.system.api.domain.vo.AppUserCouponVo;
|
import com.ruoyi.order.mapper.order.OrderMapper;
|
import com.ruoyi.order.service.goods.GoodsService;
|
import com.ruoyi.order.service.order.OrderService;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
|
import javax.annotation.Resource;
|
import java.math.BigDecimal;
|
import java.util.ArrayList;
|
import java.util.List;
|
import java.util.Map;
|
import java.util.function.Function;
|
import java.util.stream.Collectors;
|
|
/**
|
* <p>
|
* 订单 服务实现类
|
* </p>
|
*
|
* @author jqs
|
* @since 2023-04-25
|
*/
|
@Service
|
public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements OrderService {
|
|
@Resource
|
private OrderMapper orderMapper;
|
|
@Resource
|
private GoodsService goodsService;
|
|
@Resource
|
private ShopGoodsService shopGoodsService;
|
|
@Autowired
|
private RemoteMemberService remoteMemberService;
|
|
@Autowired
|
private GoodsFileService goodsFileService;
|
/**
|
* @description: buyGoods
|
* @param: appSureOrderDto
|
* @return: AppSureOrderVo
|
* @author jqs34
|
* @date: 2023/5/3 0:07
|
*/
|
@Override
|
public AppSureOrderVo buyGoods(AppSureOrderDto appSureOrderDto){
|
Long userId = appSureOrderDto.getUserId();
|
AppSureOrderVo appSureOrderVo = new AppSureOrderVo();
|
List<AppSureOrderGoodsVo> appSureOrderGoodsVoList = new ArrayList<>();
|
AppSureOrderGoodsVo appSureOrderGoodsVo;
|
List<AppBuyGoodsDto> appBuyGoodsDtoList = appSureOrderDto.getAppBuyGoodsDtoList();
|
String goodsId;
|
Integer buyNum;
|
BigDecimal buyNumBig;
|
Long userCouponId;
|
Goods goods;
|
BigDecimal goodsPrice;
|
BigDecimal goodsTotalPrice;
|
BigDecimal goodsRealPrice;
|
List<AppUserCouponVo> appUserCouponVoList = remoteMemberService.listVoUserCouponByUserId(userId).getData();
|
List<AppUserCouponVo> appGoodsUserCouponVoList;
|
Map<Long,AppUserCouponVo> appUserCouponVoMap = appUserCouponVoList.stream().collect(Collectors.toMap(AppUserCouponVo::getUserCouponId, Function.identity()));
|
AppUserCouponVo appUserCouponVo;
|
Integer couponType;
|
BigDecimal moneyThreshold;
|
BigDecimal discountMoney = new BigDecimal("0.00");
|
BigDecimal discountPercent;
|
BigDecimal goodsDeposit;
|
GoodsFile goodsFile;
|
Integer useCoupon;
|
BigDecimal orderGoodsMoney = new BigDecimal("0.00");
|
BigDecimal couponDiscount = new BigDecimal("0.00");
|
BigDecimal orderPayDeposit = new BigDecimal("0.00");
|
BigDecimal orderPayMoney = new BigDecimal("0.00");
|
for(AppBuyGoodsDto appBuyGoodsDto : appBuyGoodsDtoList){
|
appSureOrderGoodsVo = new AppSureOrderGoodsVo();
|
useCoupon = 0;
|
goodsId = appBuyGoodsDto.getGoodsId();
|
buyNum = appBuyGoodsDto.getBuyNum();
|
userCouponId = appBuyGoodsDto.getUserCouponId();
|
goods = goodsService.getById(goodsId);
|
appSureOrderGoodsVo.setGoodsId(goodsId);
|
appSureOrderGoodsVo.setGoodsName(goods.getGoodsName());
|
appSureOrderGoodsVo.setGoodsIntroduction(goods.getGoodsIntroduction());
|
appSureOrderGoodsVo.setGoodsType(goods.getGoodsType());
|
//商品图片
|
goodsFile = goodsFileService.getGoodsPicture(goodsId);
|
appSureOrderGoodsVo.setGoodsPicture(goodsFile.getFileUrl());
|
buyNum = appBuyGoodsDto.getBuyNum();
|
appSureOrderGoodsVo.setBuyNum(buyNum);
|
goodsPrice = goods.getSalesPrice();
|
//商户定制价格
|
ShopGoods shopGoods = shopGoodsService.getByShopIdAndGoodsId(appSureOrderDto.getShopId(),goods.getGoodsId());
|
if(shopGoods!=null){
|
goodsPrice = shopGoods.getSalesPrice();
|
}
|
appSureOrderGoodsVo.setGoodsPrice(goodsPrice);
|
buyNumBig = BigDecimal.valueOf(buyNum);
|
goodsTotalPrice = goodsPrice.multiply(buyNumBig);
|
goodsRealPrice = goodsTotalPrice;
|
if(userCouponId!=null){
|
appUserCouponVo = appUserCouponVoMap.get(userCouponId);
|
if(StringUtils.isBlank(appUserCouponVo.getRelGoodsIds()) || appUserCouponVo.getRelGoodsIds().contains(goodsId)){
|
couponType = appUserCouponVo.getCouponType();
|
if(couponType == 1 && appUserCouponVo.getMoneyThreshold()!=null && appUserCouponVo.getDiscountMoney()!=null){
|
moneyThreshold = appUserCouponVo.getMoneyThreshold();
|
if(goodsTotalPrice.compareTo(moneyThreshold)>=0){
|
discountMoney = appUserCouponVo.getDiscountMoney();
|
goodsRealPrice = goodsTotalPrice.subtract(discountMoney);
|
useCoupon = 1;
|
}
|
}else if(couponType == 2 && appUserCouponVo.getDiscountPercent()!=null){
|
discountPercent = appUserCouponVo.getDiscountPercent();
|
goodsRealPrice = goodsTotalPrice.multiply(discountPercent).divide(BigDecimal.TEN).setScale(2,BigDecimal.ROUND_HALF_UP);
|
discountMoney = goodsRealPrice.subtract(goodsTotalPrice);
|
useCoupon = 1;
|
}else if(couponType == 3 && appUserCouponVo.getDiscountMoney()!=null){
|
discountMoney = appUserCouponVo.getDiscountMoney();
|
goodsRealPrice = goodsTotalPrice.subtract(discountMoney);
|
useCoupon = 1;
|
}
|
}
|
}
|
appSureOrderGoodsVo.setUseCoupon(useCoupon);
|
appSureOrderGoodsVo.setGoodsTotalPrice(goodsTotalPrice);
|
appSureOrderGoodsVo.setCouponDiscount(discountMoney);
|
appSureOrderGoodsVo.setGoodsRealPrice(goodsRealPrice);
|
goodsDeposit = goods.getSubscription();
|
if(goodsDeposit == null){
|
goodsDeposit = new BigDecimal("0.00");
|
}
|
appSureOrderGoodsVo.setGoodsDeposit(goodsDeposit);
|
orderGoodsMoney = orderGoodsMoney.add(goodsTotalPrice);
|
couponDiscount = couponDiscount.add(discountMoney);
|
orderPayDeposit = orderPayDeposit.add(goodsDeposit);
|
orderPayMoney = orderPayMoney.add(goodsRealPrice);
|
//商品关联优惠券
|
appGoodsUserCouponVoList = new ArrayList<>();
|
if(appUserCouponVoList!=null && !appUserCouponVoList.isEmpty()){
|
for(AppUserCouponVo entity : appUserCouponVoList){
|
if(StringUtils.isBlank(entity.getRelGoodsIds())){
|
appGoodsUserCouponVoList.add(entity);
|
}else if(entity.getRelGoodsIds().contains(goodsId)){
|
appGoodsUserCouponVoList.add(entity);
|
}
|
}
|
appSureOrderGoodsVo.setAppUserCouponVoList(appGoodsUserCouponVoList);
|
}
|
appSureOrderGoodsVoList.add(appSureOrderGoodsVo);
|
}
|
appSureOrderVo.setOrderGoodsMoney(orderGoodsMoney);
|
appSureOrderVo.setCouponDiscount(couponDiscount);
|
appSureOrderVo.setOrderPayDeposit(orderPayDeposit);
|
appSureOrderVo.setOrderPayMoney(orderPayMoney);
|
appSureOrderVo.setAppSureOrderGoodsVoList(appSureOrderGoodsVoList);
|
return appSureOrderVo;
|
}
|
}
|