From 0b61a61c4b5ca71cf32249395b8db39a4a79c761 Mon Sep 17 00:00:00 2001 From: xuwenbo <717567226@qq.com> Date: Thu, 27 Aug 2020 15:04:08 +0800 Subject: [PATCH] =?UTF-8?q?=E7=A7=92=E6=9D=80=E6=B7=BB=E5=8A=A0sku?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sql/yx_store_combination_update.sql | 9 ++ .../rest/controller/WechatLiveController.java | 51 +++++++ .../activity/domain/YxStoreCombination.java | 3 + .../activity/domain/YxStoreSeckill.java | 19 +++ .../service/YxStoreSeckillService.java | 4 +- .../service/dto/YxStoreCombinationDto.java | 3 + .../service/dto/YxStoreSeckillDto.java | 30 +++- .../impl/YxStoreCombinationServiceImpl.java | 5 +- .../impl/YxStoreSeckillServiceImpl.java | 143 +++++++++++++++++- .../activity/vo/StoreCombinationVo.java | 8 + .../modules/activity/vo/StoreSeckillVo.java | 11 ++ .../service/impl/YxStoreCartServiceImpl.java | 49 +++--- .../service/impl/YxStoreOrderServiceImpl.java | 1 + .../domain/YxStoreProductAttrValue.java | 1 + .../service/YxStoreProductService.java | 2 +- .../impl/YxStoreProductAttrServiceImpl.java | 4 + .../impl/YxStoreProductServiceImpl.java | 35 ++++- .../activity/rest/StoreSeckillController.java | 107 +++++++++++-- 18 files changed, 433 insertions(+), 52 deletions(-) create mode 100644 yshop-app/src/main/java/co/yixiang/modules/wechat/rest/controller/WechatLiveController.java diff --git a/sql/yx_store_combination_update.sql b/sql/yx_store_combination_update.sql index 0aecd30b..a0a9f8df 100644 --- a/sql/yx_store_combination_update.sql +++ b/sql/yx_store_combination_update.sql @@ -114,3 +114,12 @@ INSERT INTO `menu` VALUES (245, b'0', '拼团商品修改', 'activity/combinatio -- 菜单角色的关系 INSERT INTO `roles_menus` VALUES (244, 1); INSERT INTO `roles_menus` VALUES (245, 1); + +-- 菜单 +INSERT INTO `menu` VALUES (246, b'0', '秒杀商品添加', 'activity/seckill/form', 63, 999, NULL, 'secKillAdd', b'0', b'1', 'SecKillAdd', '2020-08-13 21:28:45', 'YXSTORESECKILL_EDIT', 1, '2020-08-13 21:31:26', 0); +INSERT INTO `menu` VALUES (247, b'0', '秒杀商品修改', 'activity/seckill/form', 63, 3, 'anq', 'secKillEdit/:id', b'0', b'1', 'SecKillEdit', '2019-12-24 13:02:23', 'YXSTORESECKILL_EDIT', 1, '2020-07-10 16:45:33', 0); + +-- 菜单角色的关系 +INSERT INTO `roles_menus` VALUES (246, 1); +INSERT INTO `roles_menus` VALUES (247, 1); + diff --git a/yshop-app/src/main/java/co/yixiang/modules/wechat/rest/controller/WechatLiveController.java b/yshop-app/src/main/java/co/yixiang/modules/wechat/rest/controller/WechatLiveController.java new file mode 100644 index 00000000..9eb226ce --- /dev/null +++ b/yshop-app/src/main/java/co/yixiang/modules/wechat/rest/controller/WechatLiveController.java @@ -0,0 +1,51 @@ +/** +* Copyright (C) 2018-2020 +* All rights reserved, Designed By www.yixiang.co +* 注意: +* 本软件为www.yixiang.co开发研制,未经购买不得使用 +* 购买后可获得全部源代码(禁止转卖、分享、上传到码云、github等开源平台) +* 一经发现盗用、分享等行为,将追究法律责任,后果自负 +*/ +package co.yixiang.modules.wechat.rest.controller; + +import co.yixiang.api.ApiResult; +import co.yixiang.dozer.service.IGenerator; +import co.yixiang.logging.aop.log.Log; +import co.yixiang.modules.wechat.domain.YxWechatLive; +import co.yixiang.modules.wechat.service.YxWechatLiveService; +import co.yixiang.modules.wechat.service.dto.YxWechatLiveDto; +import co.yixiang.modules.wechat.service.dto.YxWechatLiveQueryCriteria; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.AllArgsConstructor; +import org.springframework.data.domain.Pageable; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.Arrays; +import java.util.Map; + +/** +* @author hupeng +* @date 2020-08-10 +*/ +@AllArgsConstructor +@Api(tags = "wxlive管理") +@RestController +@RequestMapping +public class WechatLiveController { + + private final YxWechatLiveService yxWechatLiveService; + + + @GetMapping("yxWechatLive") + @ApiOperation("查询所有直播间") + public ApiResult> getYxWechatLives(YxWechatLiveQueryCriteria criteria, Pageable pageable){ + return ApiResult.ok(yxWechatLiveService.queryAll(criteria,pageable)); + } + +} diff --git a/yshop-mall/src/main/java/co/yixiang/modules/activity/domain/YxStoreCombination.java b/yshop-mall/src/main/java/co/yixiang/modules/activity/domain/YxStoreCombination.java index 0d003dc8..c4eb539e 100644 --- a/yshop-mall/src/main/java/co/yixiang/modules/activity/domain/YxStoreCombination.java +++ b/yshop-mall/src/main/java/co/yixiang/modules/activity/domain/YxStoreCombination.java @@ -143,6 +143,9 @@ public class YxStoreCombination extends BaseDomain { /** 单位名 */ private String unitName; + /** + * 规格 0单 1多 + */ private Integer specType; /** 运费模板ID */ diff --git a/yshop-mall/src/main/java/co/yixiang/modules/activity/domain/YxStoreSeckill.java b/yshop-mall/src/main/java/co/yixiang/modules/activity/domain/YxStoreSeckill.java index 1d72e525..2cb16a02 100644 --- a/yshop-mall/src/main/java/co/yixiang/modules/activity/domain/YxStoreSeckill.java +++ b/yshop-mall/src/main/java/co/yixiang/modules/activity/domain/YxStoreSeckill.java @@ -8,8 +8,11 @@ package co.yixiang.modules.activity.domain; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.copier.CopyOptions; import co.yixiang.domain.BaseDomain; +import co.yixiang.modules.product.service.dto.FromatDetailDto; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; import lombok.EqualsAndHashCode; @@ -20,6 +23,8 @@ import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; import java.math.BigDecimal; import java.util.Date; +import java.util.List; +import java.util.Map; /** * @author hupeng @@ -141,7 +146,21 @@ public class YxStoreSeckill extends BaseDomain { /** 时间段id */ @NotNull(message = "请选择开始时间") private Integer timeId; + /** + * 规格 0单 1多 + */ + private Integer specType; + /** 运费模板ID */ + @JsonProperty("temp_id") + private Long tempId; + //属性项目 + @TableField(exist = false) + private List items; + + //sku结果集 + @TableField(exist = false) + private List> attrs; public void copy(YxStoreSeckill source){ BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true)); diff --git a/yshop-mall/src/main/java/co/yixiang/modules/activity/service/YxStoreSeckillService.java b/yshop-mall/src/main/java/co/yixiang/modules/activity/service/YxStoreSeckillService.java index f87e9845..5bbc570a 100644 --- a/yshop-mall/src/main/java/co/yixiang/modules/activity/service/YxStoreSeckillService.java +++ b/yshop-mall/src/main/java/co/yixiang/modules/activity/service/YxStoreSeckillService.java @@ -45,7 +45,7 @@ public interface YxStoreSeckillService extends BaseService{ /** * 产品详情 - * @param id 砍价商品id + * @param id 秒杀商品id * @return StoreSeckillVo */ StoreSeckillVo getDetail(Long id); @@ -81,4 +81,6 @@ public interface YxStoreSeckillService extends BaseService{ * @throws IOException / */ void download(List all, HttpServletResponse response) throws IOException; + + boolean saveSeckill(YxStoreSeckillDto resources); } diff --git a/yshop-mall/src/main/java/co/yixiang/modules/activity/service/dto/YxStoreCombinationDto.java b/yshop-mall/src/main/java/co/yixiang/modules/activity/service/dto/YxStoreCombinationDto.java index fbe5b12d..9f524549 100644 --- a/yshop-mall/src/main/java/co/yixiang/modules/activity/service/dto/YxStoreCombinationDto.java +++ b/yshop-mall/src/main/java/co/yixiang/modules/activity/service/dto/YxStoreCombinationDto.java @@ -121,6 +121,9 @@ public class YxStoreCombinationDto implements Serializable { /** 规格 0单 1多 */ @JsonProperty("spec_type") private Integer specType; + // 模板id + @JsonProperty("temp_id") + private Integer tempId; private ProductFormatDto attr; //属性项目 diff --git a/yshop-mall/src/main/java/co/yixiang/modules/activity/service/dto/YxStoreSeckillDto.java b/yshop-mall/src/main/java/co/yixiang/modules/activity/service/dto/YxStoreSeckillDto.java index 15197425..8aca6e7b 100644 --- a/yshop-mall/src/main/java/co/yixiang/modules/activity/service/dto/YxStoreSeckillDto.java +++ b/yshop-mall/src/main/java/co/yixiang/modules/activity/service/dto/YxStoreSeckillDto.java @@ -5,17 +5,27 @@ */ package co.yixiang.modules.activity.service.dto; +import co.yixiang.modules.product.service.dto.FromatDetailDto; +import co.yixiang.modules.product.service.dto.ProductFormatDto; +import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; import java.io.Serializable; import java.math.BigDecimal; import java.util.Date; +import java.util.List; +import java.util.Map; /** * @author hupeng * @date 2020-05-13 */ -@Data +@Getter +@Setter +@ToString public class YxStoreSeckillDto implements Serializable { @@ -31,6 +41,10 @@ public class YxStoreSeckillDto implements Serializable { // 轮播图 private String images; + /** 轮播图 */ + @JsonProperty("slider_image") + private List sliderImage; + // 活动标题 private String title; @@ -96,4 +110,18 @@ public class YxStoreSeckillDto implements Serializable { private String statusStr; private Integer timeId; + // 模板id + @JsonProperty("temp_id") + private Integer tempId; + /** 规格 0单 1多 */ + @JsonProperty("spec_type") + private Integer specType; + + private ProductFormatDto attr; + //属性项目 + private List items; + + //sku结果集 + private List> attrs; + } diff --git a/yshop-mall/src/main/java/co/yixiang/modules/activity/service/impl/YxStoreCombinationServiceImpl.java b/yshop-mall/src/main/java/co/yixiang/modules/activity/service/impl/YxStoreCombinationServiceImpl.java index a09d120d..c5c1f8f4 100644 --- a/yshop-mall/src/main/java/co/yixiang/modules/activity/service/impl/YxStoreCombinationServiceImpl.java +++ b/yshop-mall/src/main/java/co/yixiang/modules/activity/service/impl/YxStoreCombinationServiceImpl.java @@ -34,12 +34,14 @@ import co.yixiang.modules.activity.service.mapper.YxStorePinkMapper; import co.yixiang.modules.activity.service.mapper.YxStoreVisitMapper; import co.yixiang.modules.activity.vo.StoreCombinationVo; import co.yixiang.modules.activity.vo.YxStoreCombinationQueryVo; +import co.yixiang.modules.product.domain.YxStoreProductAttrValue; import co.yixiang.modules.product.service.YxStoreProductAttrService; import co.yixiang.modules.product.service.YxStoreProductAttrValueService; import co.yixiang.modules.product.service.YxStoreProductReplyService; import co.yixiang.modules.product.service.dto.FromatDetailDto; import co.yixiang.modules.product.service.dto.ProductFormatDto; import co.yixiang.modules.product.service.dto.ProductResultDto; +import co.yixiang.modules.product.vo.YxStoreProductAttrQueryVo; import co.yixiang.modules.template.domain.YxShippingTemplates; import co.yixiang.modules.template.service.YxShippingTemplatesService; import co.yixiang.utils.FileUtil; @@ -200,7 +202,8 @@ public class YxStoreCombinationServiceImpl extends BaseServiceImpl)returnMap.get("productAttr")); + storeCombinationVo.setProductValue((Map)returnMap.get("productValue")); return storeCombinationVo; } diff --git a/yshop-mall/src/main/java/co/yixiang/modules/activity/service/impl/YxStoreSeckillServiceImpl.java b/yshop-mall/src/main/java/co/yixiang/modules/activity/service/impl/YxStoreSeckillServiceImpl.java index 6cf5a6f6..7a239cfe 100644 --- a/yshop-mall/src/main/java/co/yixiang/modules/activity/service/impl/YxStoreSeckillServiceImpl.java +++ b/yshop-mall/src/main/java/co/yixiang/modules/activity/service/impl/YxStoreSeckillServiceImpl.java @@ -8,12 +8,20 @@ */ package co.yixiang.modules.activity.service.impl; +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.ListUtil; +import cn.hutool.core.map.MapUtil; import cn.hutool.core.util.NumberUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import co.yixiang.api.YshopException; import co.yixiang.common.service.impl.BaseServiceImpl; import co.yixiang.common.utils.QueryHelpPlus; import co.yixiang.dozer.service.IGenerator; import co.yixiang.enums.ShopCommonEnum; +import co.yixiang.enums.SpecTypeEnum; +import co.yixiang.exception.BadRequestException; +import co.yixiang.modules.activity.domain.YxStoreSeckill; import co.yixiang.modules.activity.domain.YxStoreSeckill; import co.yixiang.modules.activity.service.YxStoreSeckillService; import co.yixiang.modules.activity.service.dto.YxStoreSeckillDto; @@ -21,9 +29,18 @@ import co.yixiang.modules.activity.service.dto.YxStoreSeckillQueryCriteria; import co.yixiang.modules.activity.service.mapper.YxStoreSeckillMapper; import co.yixiang.modules.activity.vo.StoreSeckillVo; import co.yixiang.modules.activity.vo.YxStoreSeckillQueryVo; +import co.yixiang.modules.product.domain.YxStoreProductAttrValue; +import co.yixiang.modules.product.service.YxStoreProductAttrService; import co.yixiang.modules.product.service.YxStoreProductReplyService; +import co.yixiang.modules.product.service.dto.FromatDetailDto; +import co.yixiang.modules.product.service.dto.ProductFormatDto; +import co.yixiang.modules.product.service.dto.ProductResultDto; +import co.yixiang.modules.product.vo.YxStoreProductAttrQueryVo; +import co.yixiang.modules.template.domain.YxShippingTemplates; +import co.yixiang.modules.template.service.YxShippingTemplatesService; import co.yixiang.utils.FileUtil; import co.yixiang.utils.OrderUtil; +import co.yixiang.utils.RedisUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.github.pagehelper.PageInfo; @@ -35,11 +52,8 @@ import org.springframework.transaction.annotation.Transactional; import javax.servlet.http.HttpServletResponse; import java.io.IOException; -import java.util.ArrayList; -import java.util.Date; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; +import java.math.BigDecimal; +import java.util.*; /** @@ -59,7 +73,11 @@ public class YxStoreSeckillServiceImpl extends BaseServiceImpl returnMap = yxStoreProductAttrService.getProductAttrDetail(storeSeckill.getProductId()); + //获取运费模板名称 + String storeFreePostage = RedisUtil.get("store_free_postage"); + String tempName = ""; + if(StrUtil.isBlank(storeFreePostage) + || !NumberUtil.isNumber(storeFreePostage) + || Integer.valueOf(storeFreePostage) == 0){ + tempName = "全国包邮"; + }else{ + YxShippingTemplates shippingTemplates = shippingTemplatesService.getById(storeSeckill.getTempId()); + if(ObjectUtil.isNotNull(shippingTemplates)){ + tempName = shippingTemplates.getName(); + }else { + throw new BadRequestException("请配置运费模板"); + } - + } return StoreSeckillVo.builder() + .productAttr((List)returnMap.get("productAttr")) + .productValue((Map)returnMap.get("productValue")) .storeInfo(generator.convert(storeSeckill, YxStoreSeckillQueryVo.class)) .reply(replyService.getReply(storeSeckill.getProductId())) .replyCount(replyService.productReplyCount(storeSeckill.getProductId())) + .tempName(tempName) .build(); } @@ -200,4 +237,98 @@ public class YxStoreSeckillServiceImpl extends BaseServiceImpl> attrs = resources.getAttrs(); + Map map = attrs.get(0); + map.put("value1","规格"); + map.put("detail", MapUtil.of(new String[][] { + {"规格", "默认"} + })); + yxStoreProductAttrService.insertYxStoreProductAttr(ListUtil.toList(fromatDetailDto), + ListUtil.toList(map),resources.getProductId()); + }else{ + yxStoreProductAttrService.insertYxStoreProductAttr(resources.getItems(), + resources.getAttrs(),resources.getProductId()); + } + return true; + } + + /** + * 计算产品数据 + * @param attrs attrs + * @return ProductResultDto + */ + private ProductResultDto computedProduct(List> attrs){ + //取最小价格 + Double minPrice = ListMapToListBean(attrs) + .stream() + .map(ProductFormatDto::getPrice) + .min(Comparator.naturalOrder()) + .orElse(0d); + + Double minOtPrice = ListMapToListBean(attrs) + .stream() + .map(ProductFormatDto::getOtPrice) + .min(Comparator.naturalOrder()) + .orElse(0d); + + Double minCost = ListMapToListBean(attrs) + .stream() + .map(ProductFormatDto::getCost) + .min(Comparator.naturalOrder()) + .orElse(0d); + //计算库存 + Integer stock = ListMapToListBean(attrs) + .stream() + .map(ProductFormatDto::getStock) + .reduce(Integer::sum) + .orElse(0); + + if(stock <= 0) throw new YshopException("库存不能低于0"); + + return ProductResultDto.builder() + .minPrice(minPrice) + .minOtPrice(minOtPrice) + .minCost(minCost) + .stock(stock) + .build(); + } + + /** + * mapTobean + * @param listMap listMap + * @return list + */ + private List ListMapToListBean(List> listMap){ + List list = new ArrayList<>(); + // 循环遍历出map对象 + for (Map m : listMap) { + list.add(BeanUtil.mapToBean(m,ProductFormatDto.class,true)); + } + return list; + } } diff --git a/yshop-mall/src/main/java/co/yixiang/modules/activity/vo/StoreCombinationVo.java b/yshop-mall/src/main/java/co/yixiang/modules/activity/vo/StoreCombinationVo.java index 41d14d74..49fe01d7 100644 --- a/yshop-mall/src/main/java/co/yixiang/modules/activity/vo/StoreCombinationVo.java +++ b/yshop-mall/src/main/java/co/yixiang/modules/activity/vo/StoreCombinationVo.java @@ -1,11 +1,16 @@ package co.yixiang.modules.activity.vo; import co.yixiang.modules.activity.service.dto.PinkDto; +import co.yixiang.modules.product.domain.YxStoreProductAttrValue; +import co.yixiang.modules.product.vo.YxStoreProductAttrQueryVo; import co.yixiang.modules.product.vo.YxStoreProductReplyQueryVo; import lombok.Data; import java.io.Serializable; +import java.util.ArrayList; +import java.util.LinkedHashMap; import java.util.List; +import java.util.Map; /** *

@@ -38,5 +43,8 @@ public class StoreCombinationVo implements Serializable { private String tempName; + private List productAttr = new ArrayList(); + + private Map productValue = new LinkedHashMap<>(); } diff --git a/yshop-mall/src/main/java/co/yixiang/modules/activity/vo/StoreSeckillVo.java b/yshop-mall/src/main/java/co/yixiang/modules/activity/vo/StoreSeckillVo.java index bf5ce8f1..a86b2952 100644 --- a/yshop-mall/src/main/java/co/yixiang/modules/activity/vo/StoreSeckillVo.java +++ b/yshop-mall/src/main/java/co/yixiang/modules/activity/vo/StoreSeckillVo.java @@ -1,12 +1,18 @@ package co.yixiang.modules.activity.vo; +import co.yixiang.modules.product.domain.YxStoreProductAttrValue; +import co.yixiang.modules.product.vo.YxStoreProductAttrQueryVo; import co.yixiang.modules.product.vo.YxStoreProductReplyQueryVo; import io.swagger.annotations.ApiModelProperty; import lombok.Builder; import lombok.Data; import java.io.Serializable; +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; /** *

@@ -34,6 +40,11 @@ public class StoreSeckillVo implements Serializable { @ApiModelProperty(value = "秒杀产品用户是否收藏") private Boolean userCollect = false; + @ApiModelProperty(value = "模板名称") + private String tempName; + private List productAttr = new ArrayList(); + + private Map productValue = new LinkedHashMap<>(); } diff --git a/yshop-mall/src/main/java/co/yixiang/modules/cart/service/impl/YxStoreCartServiceImpl.java b/yshop-mall/src/main/java/co/yixiang/modules/cart/service/impl/YxStoreCartServiceImpl.java index eaa7389c..c817b60d 100644 --- a/yshop-mall/src/main/java/co/yixiang/modules/cart/service/impl/YxStoreCartServiceImpl.java +++ b/yshop-mall/src/main/java/co/yixiang/modules/cart/service/impl/YxStoreCartServiceImpl.java @@ -133,7 +133,7 @@ public class YxStoreCartServiceImpl extends BaseServiceImpl 0){ - YxStoreCombination storeCombination = storeCombinationService - .lambdaQuery().eq(YxStoreCombination::getId,combinationId) - .eq(YxStoreCombination::getIsShow, ShopCommonEnum.SHOW_1.getValue()) - .le(YxStoreCombination::getStartTime,now) - .ge(YxStoreCombination::getStopTime,now) + YxStoreProduct product = productService + .lambdaQuery().eq(YxStoreProduct::getId,productId) + .eq(YxStoreProduct::getIsShow,ShopCommonEnum.SHOW_1.getValue()) .one(); - if(storeCombination == null) throw new YshopException("该产品已下架或删除"); - if(storeCombination.getStock() < cartNum) throw new YshopException("该产品库存不足"); - //秒杀 - }else if(seckillId != null && seckillId > 0){ - YxStoreSeckill yxStoreSeckill = storeSeckillService - .lambdaQuery().eq(YxStoreSeckill::getId,seckillId) - .eq(YxStoreSeckill::getIsShow, ShopCommonEnum.SHOW_1.getValue()) - .le(YxStoreSeckill::getStartTime,now) - .ge(YxStoreSeckill::getStopTime,now) - .one(); - if(yxStoreSeckill == null){ + if(product == null){ throw new YshopException("该产品已下架或删除"); } - if(yxStoreSeckill.getStock() < cartNum){ - throw new YshopException("该产品库存不足"); + + int stock = productService.getProductStock(productId,productAttrUnique,"pink"); + if(stock < cartNum){ + throw new YshopException(product.getStoreName()+"库存不足"+cartNum); } - int seckillOrderCount = storeOrderService.count(new QueryWrapper() - .lambda().eq(YxStoreOrder::getUid, uid) - .eq(YxStoreOrder::getPaid, OrderInfoEnum.PAY_STATUS_1.getValue()) - .eq(YxStoreOrder::getSeckillId,seckillId)); - if(yxStoreSeckill.getNum() <= seckillOrderCount || yxStoreSeckill.getNum() < cartNum){ - throw new YshopException("每人限购:"+yxStoreSeckill.getNum()+"件"); + //秒杀 + }else if(seckillId != null && seckillId > 0){ + YxStoreProduct product = productService + .lambdaQuery().eq(YxStoreProduct::getId,productId) + .eq(YxStoreProduct::getIsShow,ShopCommonEnum.SHOW_1.getValue()) + .one(); + if(product == null){ + throw new YshopException("该产品已下架或删除"); + } + + int stock = productService.getProductStock(productId,productAttrUnique,"seckill"); + if(stock < cartNum){ + throw new YshopException(product.getStoreName()+"库存不足"+cartNum); } //砍价 }else if(bargainId != null && bargainId > 0){ @@ -388,7 +385,7 @@ public class YxStoreCartServiceImpl extends BaseServiceImpl cartInfo) { + //todo 活动商品库存待处理 for (YxStoreCartQueryVo storeCartVO : cartInfo) { Long combinationId = storeCartVO.getCombinationId(); Long seckillId = storeCartVO.getSeckillId(); diff --git a/yshop-mall/src/main/java/co/yixiang/modules/product/domain/YxStoreProductAttrValue.java b/yshop-mall/src/main/java/co/yixiang/modules/product/domain/YxStoreProductAttrValue.java index e40346e2..370c8347 100644 --- a/yshop-mall/src/main/java/co/yixiang/modules/product/domain/YxStoreProductAttrValue.java +++ b/yshop-mall/src/main/java/co/yixiang/modules/product/domain/YxStoreProductAttrValue.java @@ -107,6 +107,7 @@ public class YxStoreProductAttrValue implements Serializable { @ApiModelProperty(value = "体积") private BigDecimal volume; + /** 一级返佣 */ @ApiModelProperty(value = "一级返佣") private BigDecimal brokerage; diff --git a/yshop-mall/src/main/java/co/yixiang/modules/product/service/YxStoreProductService.java b/yshop-mall/src/main/java/co/yixiang/modules/product/service/YxStoreProductService.java index 2b434966..563030a2 100644 --- a/yshop-mall/src/main/java/co/yixiang/modules/product/service/YxStoreProductService.java +++ b/yshop-mall/src/main/java/co/yixiang/modules/product/service/YxStoreProductService.java @@ -60,7 +60,7 @@ public interface YxStoreProductService extends BaseService{ * @param unique sku唯一值 * @return int */ - int getProductStock(Long productId, String unique); + int getProductStock(Long productId, String unique,String type); /** * 商品列表 diff --git a/yshop-mall/src/main/java/co/yixiang/modules/product/service/impl/YxStoreProductAttrServiceImpl.java b/yshop-mall/src/main/java/co/yixiang/modules/product/service/impl/YxStoreProductAttrServiceImpl.java index 114aa6dd..19aa533b 100644 --- a/yshop-mall/src/main/java/co/yixiang/modules/product/service/impl/YxStoreProductAttrServiceImpl.java +++ b/yshop-mall/src/main/java/co/yixiang/modules/product/service/impl/YxStoreProductAttrServiceImpl.java @@ -110,6 +110,10 @@ public class YxStoreProductAttrServiceImpl extends BaseServiceImpllambdaQuery() .eq(YxStoreProductAttrValue::getUnique, unique) .eq(YxStoreProductAttrValue::getProductId, productId)); if (storeProductAttrValue == null) return 0; - + if("pink".equals(type)){ + return storeProductAttrValue.getPinkStock(); + }else if ("seckill".equals(type)){ + return storeProductAttrValue.getSeckillStock(); + } return storeProductAttrValue.getStock(); } @@ -573,7 +578,15 @@ public class YxStoreProductServiceImpl extends BaseServiceImpl 0){ YxStoreProductAttrValue storeProductAttrValue = yxStoreProductAttrValueService .getOne(Wrappers.lambdaQuery() @@ -601,6 +618,10 @@ public class YxStoreProductServiceImpl extends BaseServiceImpl(yxStoreSeckillService.saveSeckill(resources),HttpStatus.CREATED); + } + + @ApiOperation(value = "获取商品信息") + @GetMapping(value = "/yxStoreSecKill/info/{id}") + public ResponseEntity info(@PathVariable Long id){ + Map map = new LinkedHashMap<>(3); + + //运费模板 + List shippingTemplatesList = yxShippingTemplatesService.list(); + map.put("tempList", shippingTemplatesList); + +// //商品分类 +// List storeCategories = yxStoreCategoryService.lambdaQuery() +// .eq(YxStoreCategory::getIsShow, ShopCommonEnum.SHOW_1.getValue()) +// .list(); + +// List> cateList = new ArrayList<>(); +// map.put("cateList", this.makeCate(storeCategories,cateList,0,1)); + + //商品规格 + map.put("ruleList",yxStoreProductRuleService.list()); + + + if(id == 0){ + return new ResponseEntity<>(map,HttpStatus.OK); + } + + //处理商品详情 + YxStoreSeckill yxStoreSeckill = yxStoreSeckillService.getById(id); + YxStoreSeckillDto productDto = new YxStoreSeckillDto(); + BeanUtil.copyProperties(yxStoreSeckill,productDto,"images"); + productDto.setSliderImage(Arrays.asList(yxStoreSeckill.getImages().split(","))); + YxStoreProductAttrResult storeProductAttrResult = yxStoreProductAttrResultService + .getOne(Wrappers.lambdaQuery() + .eq(YxStoreProductAttrResult::getProductId,yxStoreSeckill.getProductId()).last("limit 1")); + JSONObject result = JSON.parseObject(storeProductAttrResult.getResult()); + + if(SpecTypeEnum.TYPE_1.getValue().equals(yxStoreSeckill.getSpecType())){ + productDto.setAttr(new ProductFormatDto()); + productDto.setAttrs(result.getObject("value", ArrayList.class)); + productDto.setItems(result.getObject("attr",ArrayList.class)); + }else{ + Map mapAttr = (Map)result.getObject("value",ArrayList.class).get(0); + ProductFormatDto productFormatDto = ProductFormatDto.builder() + .pic(mapAttr.get("pic").toString()) + .price(Double.valueOf(mapAttr.get("price").toString())) + .pinkPrice(Double.valueOf(mapAttr.get("pink_price").toString())) + .cost(Double.valueOf(mapAttr.get("cost").toString())) + .otPrice(Double.valueOf(mapAttr.get("ot_price").toString())) + .stock(Integer.valueOf(mapAttr.get("stock").toString())) + .pinkStock(Integer.valueOf(mapAttr.get("pink_stock").toString())) + .barCode(mapAttr.get("bar_code").toString()) + .weight(Double.valueOf(mapAttr.get("weight").toString())) + .volume(Double.valueOf(mapAttr.get("volume").toString())) + .brokerage(Double.valueOf(mapAttr.get("brokerage").toString())) + .brokerageTwo(Double.valueOf(mapAttr.get("brokerage_two").toString())) + .brokerageTwo(Double.valueOf(mapAttr.get("brokerage_two").toString())) + .brokerageTwo(Double.valueOf(mapAttr.get("brokerage_two").toString())) + .build(); + productDto.setAttr(productFormatDto); + } + + + map.put("productInfo",productDto); + + return new ResponseEntity<>(map,HttpStatus.OK); + } }