提交新功能 分销商 积分 会员体系

This commit is contained in:
xwxuan
2024-02-08 20:44:58 +08:00
parent 0e255d6c3a
commit 6f5e6e4662
928 changed files with 39318 additions and 1408 deletions

View File

@ -8,15 +8,19 @@
*/
package co.yixiang.yshop.module.cart.controller.app.cart;
import cn.hutool.core.util.ObjectUtil;
import co.yixiang.yshop.framework.common.pojo.CommonResult;
import co.yixiang.yshop.framework.security.core.annotations.PreAuthenticated;
import co.yixiang.yshop.module.cart.controller.app.cart.param.AppCartChangeSkuParam;
import co.yixiang.yshop.module.cart.controller.app.cart.param.AppCartIdsParm;
import co.yixiang.yshop.module.cart.controller.app.cart.param.AppCartNumParam;
import co.yixiang.yshop.module.cart.controller.app.cart.param.AppCartParam;
import co.yixiang.yshop.module.cart.enums.OrderTypeEnum;
import co.yixiang.yshop.module.cart.service.storecart.AppStoreCartService;
import co.yixiang.yshop.module.product.controller.app.campaigninfo.vo.CampaignNumberJudgeVO;
import co.yixiang.yshop.module.product.controller.app.couponrelation.vo.CartCouponVO;
import co.yixiang.yshop.module.product.controller.app.couponrelation.vo.UserCouponVO;
import co.yixiang.yshop.module.product.service.campaigninfo.AppCampaignInfoService;
import co.yixiang.yshop.module.product.service.teamworkinfo.TeamworkInfoService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
@ -50,6 +54,10 @@ public class AppCartController {
private final AppStoreCartService appStoreCartService;
private final TeamworkInfoService teamworkInfoService;
private final AppCampaignInfoService appCampaignInfoService;
/**
* 购物车 获取数量
*/
@ -71,8 +79,17 @@ public class AppCartController {
@Operation(summary = "添加购物车")
public CommonResult<Map<String,Object>> add(@Validated @RequestBody AppCartParam cartParam){
Map<String,Object> map = new LinkedHashMap<>();
Long uid = getLoginUserId();
if(OrderTypeEnum.CAMPAIGN_ORDER.getValue().equals(cartParam.getOrderType())){
// 判断是否重复参加拼团
if(ObjectUtil.isNotEmpty(cartParam.getTeamworkId()))
teamworkInfoService.joinJudge(uid, cartParam.getTeamworkId());
// 活动商品购买数量限制
appCampaignInfoService.numberJudge(new CampaignNumberJudgeVO
(cartParam.getUniqueId(), uid, cartParam.getCartNum()));
}
// 加入购物车并返回购物车id
Map<String,Object> map = new LinkedHashMap<>();
map.put("cartId",appStoreCartService.addCart(uid,cartParam.getProductId(),cartParam.getCartNum(),
cartParam.getUniqueId(),cartParam.getIsNew(),cartParam.getCombinationId(),
cartParam.getSecKillId(),cartParam.getBargainId()));

View File

@ -43,4 +43,13 @@ public class AppCartParam {
@Schema(description = "产品砍价ID", required = true)
private Long bargainId = 0L;
@Schema(description = "活动id", required = true)
private Long campaignId;
@Schema(description = "下单类型1、普通下单2、商品活动下单", required = true)
private Integer orderType;
@Schema(description = "拼团id", required = true)
private Long teamworkId;
}

View File

@ -55,7 +55,7 @@ public interface AppStoreCartService extends IService<StoreCartDO> {
* 购物车列表
* @param uid 用户id
* @param cartIds 购物车id多个逗号隔开
* @param status 0-购购物车列表
* @param status 0-购购物车列表2-活动商品
* @return map valid-有效购物车 invalid-失效购物车
*/
Map<String,Object> getUserProductCartList(Long uid, String cartIds, Integer status);

View File

@ -12,16 +12,19 @@ import co.yixiang.yshop.module.cart.convert.storecart.StoreCartConvert;
import co.yixiang.yshop.module.cart.dal.dataobject.storecart.StoreCartDO;
import co.yixiang.yshop.module.cart.dal.mysql.storecart.StoreCartMapper;
import co.yixiang.yshop.module.cart.enums.CartTypeEnum;
import co.yixiang.yshop.module.product.controller.app.campaigninfo.vo.CampaignSkuVO;
import co.yixiang.yshop.module.product.controller.app.cart.vo.AppStoreCartQueryVo;
import co.yixiang.yshop.module.product.controller.app.couponrelation.vo.CartCouponVO;
import co.yixiang.yshop.module.product.controller.app.product.vo.AppStoreProductRespVo;
import co.yixiang.yshop.module.product.dal.dataobject.storeproduct.StoreProductDO;
import co.yixiang.yshop.module.product.dal.dataobject.storeproductattrvalue.StoreProductAttrValueDO;
import co.yixiang.yshop.module.product.service.campaigninfo.AppCampaignInfoService;
import co.yixiang.yshop.module.product.service.productcouponrelation.AppCouponRelationService;
import co.yixiang.yshop.module.product.service.productcouponrelation.dto.CartCouponDto;
import co.yixiang.yshop.module.product.service.storeproduct.AppStoreProductService;
import co.yixiang.yshop.module.product.service.storeproductattrvalue.StoreProductAttrValueService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;
@ -32,13 +35,13 @@ import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
import static co.yixiang.yshop.framework.common.exception.util.ServiceExceptionUtil.exception;
import static co.yixiang.yshop.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
import static co.yixiang.yshop.module.cart.enums.ErrorCodeConstants.STORE_STOCK_ERROR;
import static co.yixiang.yshop.module.cart.enums.ErrorCodeConstants.*;
import static co.yixiang.yshop.module.product.enums.ErrorCodeConstants.STORE_PRODUCT_NOT_EXISTS;
import static co.yixiang.yshop.module.cart.enums.ErrorCodeConstants.STORE_CART_NOT_EXISTS;
/**
* 购物车 Service 实现类
@ -60,6 +63,9 @@ public class AppStoreCartServiceImpl extends ServiceImpl<StoreCartMapper, StoreC
@Resource
private AppCouponRelationService couponRelationService;
@Resource
private AppCampaignInfoService appCampaignInfoService;
/**
* 返回当前用户购物车总数量
@ -161,7 +167,7 @@ public class AppStoreCartServiceImpl extends ServiceImpl<StoreCartMapper, StoreC
*
* @param uid 用户id
* @param cartIds 购物车id多个逗号隔开
* @param status 0-购购物车列表
* @param status 0-购购物车列表2-活动商品
* @return map valid-有效购物车 invalid-失效购物车
*/
@Override
@ -181,8 +187,33 @@ public class AppStoreCartServiceImpl extends ServiceImpl<StoreCartMapper, StoreC
List<AppStoreCartQueryVo> valid = new ArrayList<>();
List<AppStoreCartQueryVo> invalid = new ArrayList<>();
Map<Long, AppStoreProductRespVo> productMap = null;
Map<String, StoreProductAttrValueDO> skuMap = null;
Map<String, CampaignSkuVO> campaignSkuVOMap = null;
if(CollectionUtils.isNotEmpty(carts)){
// 查询商品列表
List<Long> productIds = carts.stream().map(StoreCartDO::getProductId).collect(Collectors.toList());
List<AppStoreProductRespVo> products = appStoreProductService.getStoreProductByIds(productIds);
productMap = products.stream().collect(Collectors.toMap(AppStoreProductRespVo::getId, Function.identity()));
// 查询商品规格列表
List<String> skuUniques =
carts.stream().map(StoreCartDO::getProductAttrUnique).collect(Collectors.toList());
List<StoreProductAttrValueDO> skus =
storeProductAttrValueService.list(Wrappers.<StoreProductAttrValueDO>lambdaQuery()
.in(StoreProductAttrValueDO::getUnique, skuUniques));
skuMap = skus.stream().collect(Collectors.toMap(StoreProductAttrValueDO::getUnique, Function.identity()));
// 活动下单查询
if (OrderInfoEnum.CAMPAIGN_ORDER.getValue().equals(status)) {
List<CampaignSkuVO> campaignSkuVOS = appCampaignInfoService.getCampaignsByProductAttrUniques(skuUniques);
if (CollectionUtils.isEmpty(campaignSkuVOS)) throw exception(CAMPAIGN_NOT_EXISTS);
campaignSkuVOMap =
campaignSkuVOS.stream().collect(Collectors
.toMap(CampaignSkuVO::getProductAttrUnique, Function.identity()));
}
}
for (StoreCartDO storeCart : carts) {
AppStoreProductRespVo storeProduct = appStoreProductService.getStoreProductById(storeCart.getProductId());
AppStoreProductRespVo storeProduct = productMap.get(storeCart.getProductId());
AppStoreCartQueryVo storeCartQueryVo = StoreCartConvert.INSTANCE.convert01(storeCart);
if (ObjectUtil.isNull(storeProduct)) {
this.removeById(storeCart.getId());
@ -191,9 +222,7 @@ public class AppStoreCartServiceImpl extends ServiceImpl<StoreCartMapper, StoreC
storeCartQueryVo.setProductInfo(storeProduct);
invalid.add(storeCartQueryVo);
} else {
StoreProductAttrValueDO productAttrValue =
storeProductAttrValueService.getOne(Wrappers.<StoreProductAttrValueDO>lambdaQuery()
.eq(StoreProductAttrValueDO::getUnique, storeCart.getProductAttrUnique()));
StoreProductAttrValueDO productAttrValue = skuMap.get(storeCart.getProductAttrUnique());
if (ObjectUtil.isNull(productAttrValue) || productAttrValue.getStock() == 0) {
storeCartQueryVo.setProductInfo(storeProduct);
invalid.add(storeCartQueryVo);
@ -202,6 +231,7 @@ public class AppStoreCartServiceImpl extends ServiceImpl<StoreCartMapper, StoreC
storeCartQueryVo.setProductInfo(storeProduct);
// 普通商品金额
BigDecimal truePrice = productAttrValue.getPrice();
Integer stock = productAttrValue.getStock();
// 设置拼团价格
if (storeCart.getCombinationId() > 0) {
truePrice = productAttrValue.getPinkPrice();
@ -210,8 +240,14 @@ public class AppStoreCartServiceImpl extends ServiceImpl<StoreCartMapper, StoreC
if (storeCart.getSeckillId() > 0) {
truePrice = productAttrValue.getSeckillPrice();
}
// 设置活动价格
if (ObjectUtil.isNotNull(campaignSkuVOMap) &&
campaignSkuVOMap.containsKey(productAttrValue.getUnique())) {
truePrice = campaignSkuVOMap.get(productAttrValue.getUnique()).getPrice();
stock = campaignSkuVOMap.get(productAttrValue.getUnique()).getStock();
}
storeCartQueryVo.setTruePrice(truePrice);
storeCartQueryVo.setTrueStock(productAttrValue.getStock());
storeCartQueryVo.setTrueStock(stock);
valid.add(storeCartQueryVo);
}