秒杀添加sku

This commit is contained in:
xuwenbo
2020-08-27 15:04:08 +08:00
parent e401f7c309
commit 0b61a61c4b
18 changed files with 433 additions and 52 deletions

View File

@ -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);

View File

@ -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<Map<String,Object>> getYxWechatLives(YxWechatLiveQueryCriteria criteria, Pageable pageable){
return ApiResult.ok(yxWechatLiveService.queryAll(criteria,pageable));
}
}

View File

@ -143,6 +143,9 @@ public class YxStoreCombination extends BaseDomain {
/** 单位名 */
private String unitName;
/**
* 规格 0单 1多
*/
private Integer specType;
/** 运费模板ID */

View File

@ -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<FromatDetailDto> items;
//sku结果集
@TableField(exist = false)
private List<Map<String,Object>> attrs;
public void copy(YxStoreSeckill source){
BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true));

View File

@ -45,7 +45,7 @@ public interface YxStoreSeckillService extends BaseService<YxStoreSeckill>{
/**
* 产品详情
* @param id 砍价商品id
* @param id 秒杀商品id
* @return StoreSeckillVo
*/
StoreSeckillVo getDetail(Long id);
@ -81,4 +81,6 @@ public interface YxStoreSeckillService extends BaseService<YxStoreSeckill>{
* @throws IOException /
*/
void download(List<YxStoreSeckillDto> all, HttpServletResponse response) throws IOException;
boolean saveSeckill(YxStoreSeckillDto resources);
}

View File

@ -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;
//属性项目

View File

@ -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<String> 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<FromatDetailDto> items;
//sku结果集
private List<Map<String,Object>> attrs;
}

View File

@ -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<YxStoreCombin
storeCombinationVo.setPink(pinkAllDto.getList());
storeCombinationVo.setPinkOkList(storePinkService.getPinkOkList(uid));
storeCombinationVo.setPinkOkSum(storePinkService.getPinkOkSumTotalNum());
storeCombinationVo.setProductAttr((List<YxStoreProductAttrQueryVo>)returnMap.get("productAttr"));
storeCombinationVo.setProductValue((Map<String, YxStoreProductAttrValue>)returnMap.get("productValue"));
return storeCombinationVo;
}

View File

@ -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<YxStoreSeckillMap
@Autowired
private YxStoreProductReplyService replyService;
@Autowired
private YxStoreProductAttrService yxStoreProductAttrService;
@Autowired
private YxShippingTemplatesService shippingTemplatesService;
/**
* 退回库存减少销量
* @param num 数量
@ -108,12 +126,31 @@ public class YxStoreSeckillServiceImpl extends BaseServiceImpl<YxStoreSeckillMap
if(storeSeckill == null){
throw new YshopException("秒杀产品不存在或已下架");
}
//获取商品sku
Map<String, Object> 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<YxStoreProductAttrQueryVo>)returnMap.get("productAttr"))
.productValue((Map<String, YxStoreProductAttrValue>)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<YxStoreSeckillMap
}
FileUtil.downloadExcel(list, response);
}
@Override
public boolean saveSeckill(YxStoreSeckillDto resources) {
ProductResultDto resultDTO = this.computedProduct(resources.getAttrs());
//添加商品
YxStoreSeckill yxStoreSeckill = new YxStoreSeckill();
BeanUtil.copyProperties(resources,yxStoreSeckill,"images");
if(resources.getImages().isEmpty()) throw new YshopException("请上传轮播图");
yxStoreSeckill.setPrice(BigDecimal.valueOf(resultDTO.getMinPrice()));
yxStoreSeckill.setCost(new BigDecimal(resultDTO.getMinCost()));
yxStoreSeckill.setStock(resultDTO.getStock());
yxStoreSeckill.setImages(String.join(",", resources.getImages()));
this.saveOrUpdate(yxStoreSeckill);
//属性处理
//处理单sKu
if(SpecTypeEnum.TYPE_0.getValue().equals(resources.getSpecType())){
FromatDetailDto fromatDetailDto = FromatDetailDto.builder()
.value("规格")
.detailValue("")
.attrHidden("")
.detail(ListUtil.toList("默认"))
.build();
List<Map<String,Object>> attrs = resources.getAttrs();
Map<String,Object> 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<Map<String,Object>> 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<ProductFormatDto> ListMapToListBean(List<Map<String, Object>> listMap){
List<ProductFormatDto> list = new ArrayList<>();
// 循环遍历出map对象
for (Map<String, Object> m : listMap) {
list.add(BeanUtil.mapToBean(m,ProductFormatDto.class,true));
}
return list;
}
}

View File

@ -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;
/**
* <p>
@ -38,5 +43,8 @@ public class StoreCombinationVo implements Serializable {
private String tempName;
private List<YxStoreProductAttrQueryVo> productAttr = new ArrayList();
private Map<String, YxStoreProductAttrValue> productValue = new LinkedHashMap<>();
}

View File

@ -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;
/**
* <p>
@ -34,6 +40,11 @@ public class StoreSeckillVo implements Serializable {
@ApiModelProperty(value = "秒杀产品用户是否收藏")
private Boolean userCollect = false;
@ApiModelProperty(value = "模板名称")
private String tempName;
private List<YxStoreProductAttrQueryVo> productAttr = new ArrayList();
private Map<String, YxStoreProductAttrValue> productValue = new LinkedHashMap<>();
}

View File

@ -133,7 +133,7 @@ public class YxStoreCartServiceImpl extends BaseServiceImpl<StoreCartMapper, YxS
//普通商品库存
int stock = productService.getProductStock(cart.getProductId()
,cart.getProductAttrUnique());
,cart.getProductAttrUnique(),"");
if(stock < cartNum){
throw new YshopException("该产品库存不足"+cartNum);
}
@ -335,34 +335,31 @@ public class YxStoreCartServiceImpl extends BaseServiceImpl<StoreCartMapper, YxS
Date now = new Date();
//拼团
if(combinationId != null && combinationId > 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<YxStoreOrder>()
.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<StoreCartMapper, YxS
throw new YshopException("该产品已下架或删除");
}
int stock = productService.getProductStock(productId,productAttrUnique);
int stock = productService.getProductStock(productId,productAttrUnique,"");
if(stock < cartNum){
throw new YshopException(product.getStoreName()+"库存不足"+cartNum);
}

View File

@ -1492,6 +1492,7 @@ public class YxStoreOrderServiceImpl extends BaseServiceImpl<StoreOrderMapper, Y
* @param cartInfo 购物车
*/
public void deStockIncSale(List<YxStoreCartQueryVo> cartInfo) {
//todo 活动商品库存待处理
for (YxStoreCartQueryVo storeCartVO : cartInfo) {
Long combinationId = storeCartVO.getCombinationId();
Long seckillId = storeCartVO.getSeckillId();

View File

@ -107,6 +107,7 @@ public class YxStoreProductAttrValue implements Serializable {
@ApiModelProperty(value = "体积")
private BigDecimal volume;
/** 一级返佣 */
@ApiModelProperty(value = "一级返佣")
private BigDecimal brokerage;

View File

@ -60,7 +60,7 @@ public interface YxStoreProductService extends BaseService<YxStoreProduct>{
* @param unique sku唯一值
* @return int
*/
int getProductStock(Long productId, String unique);
int getProductStock(Long productId, String unique,String type);
/**
* 商品列表

View File

@ -110,6 +110,10 @@ public class YxStoreProductAttrServiceImpl extends BaseServiceImpl<StoreProductA
.brokerage(BigDecimal.valueOf(productFormatDto.getBrokerage()))
.brokerageTwo(BigDecimal.valueOf(productFormatDto.getBrokerageTwo()))
.stock(productFormatDto.getStock())
.pinkPrice(BigDecimal.valueOf(productFormatDto.getPinkPrice()==null?0:productFormatDto.getPinkPrice()))
.seckillPrice(BigDecimal.valueOf(productFormatDto.getSeckillPrice()==null?0:productFormatDto.getSeckillPrice()))
.pinkStock(productFormatDto.getPinkStock()==null?0:productFormatDto.getPinkStock())
.seckillStock(productFormatDto.getSeckillStock()==null?0:productFormatDto.getSeckillStock())
.build();

View File

@ -62,6 +62,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.pagehelper.PageInfo;
import io.swagger.annotations.ApiModelProperty;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
@ -178,14 +179,18 @@ public class YxStoreProductServiceImpl extends BaseServiceImpl<StoreProductMappe
* @return int
*/
@Override
public int getProductStock(Long productId, String unique) {
public int getProductStock(Long productId, String unique, String type) {
YxStoreProductAttrValue storeProductAttrValue = yxStoreProductAttrValueService
.getOne(Wrappers.<YxStoreProductAttrValue>lambdaQuery()
.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<StoreProductMappe
String key = "value" + (j + 1);
valueMap.put(key,detailValues[j]);
}
// /** 拼团属性对应的金额 */
// private BigDecimal pinkPrice;
//
// /** 秒杀属性对应的金额 */
// private BigDecimal seckillPrice;
// /** 拼团库存属性对应的库存 */
// private Integer pinkStock;
//
// private Integer seckillStock;
valueMap.put("detail",detail);
valueMap.put("pic","");
valueMap.put("price",0);
@ -585,6 +598,10 @@ public class YxStoreProductServiceImpl extends BaseServiceImpl<StoreProductMappe
valueMap.put("volume",0);
valueMap.put("brokerage",0);
valueMap.put("brokerage_two",0);
valueMap.put("pink_price",0);
valueMap.put("seckill_price",0);
valueMap.put("pink_stock",0);
valueMap.put("seckill_stock",0);
if(id > 0){
YxStoreProductAttrValue storeProductAttrValue = yxStoreProductAttrValueService
.getOne(Wrappers.<YxStoreProductAttrValue>lambdaQuery()
@ -601,6 +618,10 @@ public class YxStoreProductServiceImpl extends BaseServiceImpl<StoreProductMappe
valueMap.put("volume",storeProductAttrValue.getVolume());
valueMap.put("brokerage",storeProductAttrValue.getBrokerage());
valueMap.put("brokerage_two",storeProductAttrValue.getBrokerageTwo());
valueMap.put("pink_price",storeProductAttrValue.getPinkPrice());
valueMap.put("seckill_price",storeProductAttrValue.getSeckillPrice());
valueMap.put("pink_stock",storeProductAttrValue.getPinkStock());
valueMap.put("seckill_stock",storeProductAttrValue.getSeckillStock());
}
}
@ -734,25 +755,25 @@ public class YxStoreProductServiceImpl extends BaseServiceImpl<StoreProductMappe
if(isActivity){
headerMap.put("title","拼团价");
headerMap.put("slot", "pinkPrice");
headerMap.put("slot", "pink_price");
headerMap.put("align",align);
headerMap.put("minWidth",140);
headerMapList.add(ObjectUtil.clone(headerMap));
headerMap.put("title","拼团活动库存");
headerMap.put("slot", "pinkStock");
headerMap.put("slot", "pink_stock");
headerMap.put("align",align);
headerMap.put("minWidth",140);
headerMapList.add(ObjectUtil.clone(headerMap));
headerMap.put("title","秒杀价");
headerMap.put("slot", "seckillPrice");
headerMap.put("slot", "seckill_price");
headerMap.put("align",align);
headerMap.put("minWidth",140);
headerMapList.add(ObjectUtil.clone(headerMap));
headerMap.put("title","秒杀活动库存");
headerMap.put("slot", "seckillStock");
headerMap.put("slot", "seckill_stock");
headerMap.put("align",align);
headerMap.put("minWidth",140);
headerMapList.add(ObjectUtil.clone(headerMap));

View File

@ -5,12 +5,26 @@
*/
package co.yixiang.modules.activity.rest;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.ObjectUtil;
import co.yixiang.enums.SpecTypeEnum;
import co.yixiang.logging.aop.log.Log;
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;
import co.yixiang.modules.activity.service.dto.YxStoreSeckillDto;
import co.yixiang.modules.activity.service.dto.YxStoreSeckillQueryCriteria;
import co.yixiang.modules.aop.ForbidSubmit;
import co.yixiang.modules.product.domain.YxStoreProductAttrResult;
import co.yixiang.modules.product.service.YxStoreProductAttrResultService;
import co.yixiang.modules.product.service.YxStoreProductRuleService;
import co.yixiang.modules.product.service.dto.ProductFormatDto;
import co.yixiang.modules.template.domain.YxShippingTemplates;
import co.yixiang.modules.template.service.YxShippingTemplatesService;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.data.domain.Pageable;
@ -18,13 +32,9 @@ import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import java.util.*;
/**
* @author hupeng
@ -36,9 +46,14 @@ import org.springframework.web.bind.annotation.RestController;
public class StoreSeckillController {
private final YxStoreSeckillService yxStoreSeckillService;
public StoreSeckillController(YxStoreSeckillService yxStoreSeckillService) {
private final YxShippingTemplatesService yxShippingTemplatesService;
private final YxStoreProductRuleService yxStoreProductRuleService;
private final YxStoreProductAttrResultService yxStoreProductAttrResultService;
public StoreSeckillController(YxStoreSeckillService yxStoreSeckillService, YxShippingTemplatesService yxShippingTemplatesService, YxStoreProductRuleService yxStoreProductRuleService, YxStoreProductAttrResultService yxStoreProductAttrResultService) {
this.yxStoreSeckillService = yxStoreSeckillService;
this.yxShippingTemplatesService = yxShippingTemplatesService;
this.yxStoreProductRuleService = yxStoreProductRuleService;
this.yxStoreProductAttrResultService = yxStoreProductAttrResultService;
}
@Log("列表")
@ -73,4 +88,78 @@ public class StoreSeckillController {
yxStoreSeckillService.removeById(id);
return new ResponseEntity(HttpStatus.OK);
}
@Log("新增秒杀")
@ApiOperation(value = "新增秒杀")
@PostMapping(value = "/yxStoreSeckill")
@PreAuthorize("hasAnyRole('admin','YXSTORESECKILL_ALL','YXSTORESECKILL_EDIT')")
public ResponseEntity add(@Validated @RequestBody YxStoreSeckillDto resources){
return new ResponseEntity<>(yxStoreSeckillService.saveSeckill(resources),HttpStatus.CREATED);
}
@ApiOperation(value = "获取商品信息")
@GetMapping(value = "/yxStoreSecKill/info/{id}")
public ResponseEntity info(@PathVariable Long id){
Map<String,Object> map = new LinkedHashMap<>(3);
//运费模板
List<YxShippingTemplates> shippingTemplatesList = yxShippingTemplatesService.list();
map.put("tempList", shippingTemplatesList);
// //商品分类
// List<YxStoreCategory> storeCategories = yxStoreCategoryService.lambdaQuery()
// .eq(YxStoreCategory::getIsShow, ShopCommonEnum.SHOW_1.getValue())
// .list();
// List<Map<String,Object>> 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.<YxStoreProductAttrResult>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<String,Object> mapAttr = (Map<String,Object>)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);
}
}