Merge branch 'master' of https://git.dayouqiantu.cn/develop/yshop
This commit is contained in:
@ -60,7 +60,6 @@ import java.util.List;
|
||||
public class AuthService {
|
||||
|
||||
private final YxUserService userService;
|
||||
private final RedisUtils redisUtil;
|
||||
private final RedisUtils redisUtils;
|
||||
private static Integer expiredTimeIn;
|
||||
|
||||
@ -86,8 +85,8 @@ public class AuthService {
|
||||
String spread = loginParam.getSpread();
|
||||
try {
|
||||
//读取redis配置
|
||||
String appId = redisUtil.getY(ShopKeyUtils.getWxAppAppId());
|
||||
String secret = redisUtil.getY(ShopKeyUtils.getWxAppSecret());
|
||||
String appId = redisUtils.getY(ShopKeyUtils.getWxAppAppId());
|
||||
String secret = redisUtils.getY(ShopKeyUtils.getWxAppSecret());
|
||||
if (StrUtil.isBlank(appId) || StrUtil.isBlank(secret)) {
|
||||
throw new YshopException("请先配置小程序");
|
||||
}
|
||||
|
@ -17,6 +17,7 @@ import co.yixiang.enums.ProductEnum;
|
||||
import co.yixiang.modules.activity.service.YxStoreCombinationService;
|
||||
import co.yixiang.modules.activity.service.YxStoreSeckillService;
|
||||
import co.yixiang.modules.activity.vo.YxStoreSeckillQueryVo;
|
||||
import co.yixiang.modules.mp.service.YxWechatLiveService;
|
||||
import co.yixiang.modules.product.service.YxStoreProductService;
|
||||
import co.yixiang.modules.product.vo.YxSystemStoreQueryVo;
|
||||
import co.yixiang.modules.shop.param.YxSystemStoreQueryParam;
|
||||
@ -60,6 +61,7 @@ public class IndexController {
|
||||
private final YxSystemStoreService systemStoreService;
|
||||
private final YxStoreCombinationService storeCombinationService;
|
||||
private final YxStoreSeckillService storeSeckillService;
|
||||
private final YxWechatLiveService wechatLiveService;
|
||||
|
||||
@Cacheable(cacheNames = ShopConstants.YSHOP_REDIS_INDEX_KEY)
|
||||
@GetMapping("/index")
|
||||
@ -76,6 +78,7 @@ public class IndexController {
|
||||
.menus(systemGroupDataService.getDatas(ShopConstants.YSHOP_HOME_MENUS))
|
||||
.roll(systemGroupDataService.getDatas(ShopConstants.YSHOP_HOME_ROLL_NEWS))
|
||||
.seckillList(storeSeckillService.getList(1, 4))
|
||||
.liveList(wechatLiveService.getList(1,4,0))
|
||||
.build();
|
||||
return ApiResult.ok(indexVo);
|
||||
}
|
||||
|
@ -2,6 +2,7 @@ package co.yixiang.modules.shop.vo;
|
||||
|
||||
import co.yixiang.modules.activity.vo.YxStoreCombinationQueryVo;
|
||||
import co.yixiang.modules.activity.vo.YxStoreSeckillQueryVo;
|
||||
import co.yixiang.modules.mp.service.dto.YxWechatLiveDto;
|
||||
import co.yixiang.modules.product.vo.YxStoreProductQueryVo;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
@ -49,5 +50,8 @@ public class IndexVo {
|
||||
//首发新品->秒杀
|
||||
@ApiModelProperty("首发新品->秒杀")
|
||||
private List<YxStoreSeckillQueryVo> seckillList;
|
||||
//直播间信息
|
||||
@ApiModelProperty("直播间")
|
||||
private List<YxWechatLiveDto> liveList;
|
||||
|
||||
}
|
||||
|
@ -29,24 +29,6 @@ public interface YxStoreCombinationService extends BaseService<YxStoreCombinati
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 减库存增加销量
|
||||
* @param num 数量
|
||||
* @param combinationId 拼团产品id
|
||||
*/
|
||||
void decStockIncSales(int num,Long combinationId);
|
||||
|
||||
/**
|
||||
* 增加库存 减少销量
|
||||
* @param num 数量
|
||||
* @param combinationId 拼团产品id
|
||||
*/
|
||||
void incStockDecSales(int num,Long combinationId);
|
||||
|
||||
YxStoreCombination getCombination(int id);
|
||||
|
||||
//boolean judgeCombinationStock(Long combinationId,Integer cartNum);
|
||||
|
||||
/**
|
||||
* 拼团列表
|
||||
* @param page page
|
||||
|
@ -27,21 +27,6 @@ import java.util.Map;
|
||||
*/
|
||||
public interface YxStoreSeckillService extends BaseService<YxStoreSeckill>{
|
||||
|
||||
/**
|
||||
* 退回库存减少销量
|
||||
* @param num 数量
|
||||
* @param seckillId 秒杀产品id
|
||||
*/
|
||||
void incStockDecSales(int num,Long seckillId);
|
||||
|
||||
/**
|
||||
* 减库存增加销量
|
||||
* @param num 数量
|
||||
* @param seckillId 秒杀产品id
|
||||
*/
|
||||
void decStockIncSales(int num,Long seckillId);
|
||||
|
||||
//YxStoreSeckill getSeckill(int id);
|
||||
|
||||
/**
|
||||
* 产品详情
|
||||
|
@ -134,6 +134,6 @@ public class YxStoreCombinationDto implements Serializable {
|
||||
private List<FromatDetailDto> items;
|
||||
|
||||
//sku结果集
|
||||
private List<Map<String,Object>> attrs;
|
||||
private List<ProductFormatDto> attrs;
|
||||
|
||||
}
|
||||
|
@ -131,6 +131,6 @@ public class YxStoreSeckillDto implements Serializable {
|
||||
private List<FromatDetailDto> items;
|
||||
|
||||
//sku结果集
|
||||
private List<Map<String,Object>> attrs;
|
||||
private List<ProductFormatDto> attrs;
|
||||
|
||||
}
|
||||
|
@ -58,13 +58,7 @@ import org.springframework.transaction.annotation.Transactional;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.IOException;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Comparator;
|
||||
import java.util.Date;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
|
||||
/**
|
||||
@ -97,52 +91,6 @@ public class YxStoreCombinationServiceImpl extends BaseServiceImpl<YxStoreCombin
|
||||
private YxShippingTemplatesService shippingTemplatesService;
|
||||
|
||||
|
||||
/**
|
||||
* 减库存增加销量
|
||||
* @param num 数量
|
||||
* @param combinationId 拼团产品id
|
||||
*/
|
||||
@Override
|
||||
public void decStockIncSales(int num, Long combinationId) {
|
||||
int res = yxStoreCombinationMapper.decStockIncSales(num,combinationId);
|
||||
if(res == 0) {
|
||||
throw new YshopException("拼团产品库存不足");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 增加库存 减少销量
|
||||
* @param num 数量
|
||||
* @param combinationId 拼团产品id
|
||||
*/
|
||||
@Override
|
||||
public void incStockDecSales(int num, Long combinationId) {
|
||||
yxStoreCombinationMapper.incStockDecSales(num,combinationId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public YxStoreCombination getCombination(int id) {
|
||||
QueryWrapper<YxStoreCombination> wrapper = new QueryWrapper<>();
|
||||
wrapper.eq("id",id).eq("is_del",0).eq("is_show",1);
|
||||
return yxStoreCombinationMapper.selectOne(wrapper);
|
||||
}
|
||||
|
||||
// /**
|
||||
// * 判断库存是否足够
|
||||
// * @param combinationId 平团产品id
|
||||
// * @param cartNum 购物车数量
|
||||
// * @return boolean
|
||||
// */
|
||||
// @Override
|
||||
// public boolean judgeCombinationStock(Long combinationId, Integer cartNum) {
|
||||
// YxStoreCombination storeCombination = this.getById(combinationId);
|
||||
// return storeCombination.getStock() >= cartNum;
|
||||
// }
|
||||
|
||||
// @Override
|
||||
// public YxStoreCombinationQueryVo getCombinationT(int id) {
|
||||
// return yxStoreCombinationMapper.getCombDetail(id);
|
||||
// }
|
||||
|
||||
/**
|
||||
* 获取拼团详情
|
||||
@ -322,6 +270,7 @@ public class YxStoreCombinationServiceImpl extends BaseServiceImpl<YxStoreCombin
|
||||
}
|
||||
|
||||
yxStoreCombination.setPrice(BigDecimal.valueOf(resultDTO.getMinPrice()));
|
||||
yxStoreCombination.setProductPrice(BigDecimal.valueOf(resultDTO.getMinOtPrice()));
|
||||
yxStoreCombination.setCost(resultDTO.getMinCost().intValue());
|
||||
yxStoreCombination.setStock(resultDTO.getStock());
|
||||
yxStoreCombination.setImages(String.join(",", resources.getImages()));
|
||||
@ -336,14 +285,14 @@ public class YxStoreCombinationServiceImpl extends BaseServiceImpl<YxStoreCombin
|
||||
.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[][] {
|
||||
{"规格", "默认"}
|
||||
}));
|
||||
List<ProductFormatDto> attrs = resources.getAttrs();
|
||||
ProductFormatDto productFormatDto = attrs.get(0);
|
||||
productFormatDto.setValue1("规格");
|
||||
Map<String,String> map = new HashMap<>();
|
||||
map.put("规格","默认");
|
||||
productFormatDto.setDetail(map);
|
||||
yxStoreProductAttrService.insertYxStoreProductAttr(ListUtil.toList(fromatDetailDto),
|
||||
ListUtil.toList(map),resources.getProductId());
|
||||
ListUtil.toList(productFormatDto),resources.getProductId());
|
||||
}else{
|
||||
yxStoreProductAttrService.insertYxStoreProductAttr(resources.getItems(),
|
||||
resources.getAttrs(),resources.getProductId());
|
||||
@ -357,27 +306,27 @@ public class YxStoreCombinationServiceImpl extends BaseServiceImpl<YxStoreCombin
|
||||
* @param attrs attrs
|
||||
* @return ProductResultDto
|
||||
*/
|
||||
private ProductResultDto computedProduct(List<Map<String,Object>> attrs){
|
||||
private ProductResultDto computedProduct(List<ProductFormatDto> attrs){
|
||||
//取最小价格
|
||||
Double minPrice = ListMapToListBean(attrs)
|
||||
Double minPrice = attrs
|
||||
.stream()
|
||||
.map(ProductFormatDto::getPinkPrice)
|
||||
.min(Comparator.naturalOrder())
|
||||
.orElse(0d);
|
||||
|
||||
Double minOtPrice = ListMapToListBean(attrs)
|
||||
Double minOtPrice = attrs
|
||||
.stream()
|
||||
.map(ProductFormatDto::getOtPrice)
|
||||
.min(Comparator.naturalOrder())
|
||||
.orElse(0d);
|
||||
|
||||
Double minCost = ListMapToListBean(attrs)
|
||||
Double minCost = attrs
|
||||
.stream()
|
||||
.map(ProductFormatDto::getCost)
|
||||
.min(Comparator.naturalOrder())
|
||||
.orElse(0d);
|
||||
//计算库存
|
||||
Integer stock = ListMapToListBean(attrs)
|
||||
Integer stock = attrs
|
||||
.stream()
|
||||
.map(ProductFormatDto::getPinkStock)
|
||||
.reduce(Integer::sum)
|
||||
|
@ -78,28 +78,7 @@ public class YxStoreSeckillServiceImpl extends BaseServiceImpl<YxStoreSeckillMap
|
||||
|
||||
@Autowired
|
||||
private YxShippingTemplatesService shippingTemplatesService;
|
||||
/**
|
||||
* 退回库存减少销量
|
||||
* @param num 数量
|
||||
* @param seckillId 秒杀产品id
|
||||
*/
|
||||
@Override
|
||||
public void incStockDecSales(int num, Long seckillId) {
|
||||
yxStoreSeckillMapper.incStockDecSales(num,seckillId);
|
||||
}
|
||||
|
||||
/**
|
||||
* 减库存增加销量
|
||||
* @param num 数量
|
||||
* @param seckillId 秒杀产品id
|
||||
*/
|
||||
@Override
|
||||
public void decStockIncSales(int num, Long seckillId) {
|
||||
int res = yxStoreSeckillMapper.decStockIncSales(num,seckillId);
|
||||
if(res == 0) {
|
||||
throw new YshopException("秒杀产品库存不足");
|
||||
}
|
||||
}
|
||||
|
||||
// @Override
|
||||
// public YxStoreSeckill getSeckill(int id) {
|
||||
@ -274,6 +253,7 @@ public class YxStoreSeckillServiceImpl extends BaseServiceImpl<YxStoreSeckillMap
|
||||
}
|
||||
|
||||
yxStoreSeckill.setStock(resultDTO.getStock());
|
||||
yxStoreSeckill.setOtPrice(BigDecimal.valueOf(resultDTO.getMinOtPrice()));
|
||||
yxStoreSeckill.setPostage(BigDecimal.valueOf(resultDTO.getMinPrice()));
|
||||
yxStoreSeckill.setCost(BigDecimal.valueOf(resultDTO.getMinCost()));
|
||||
yxStoreSeckill.setStock(resultDTO.getStock());
|
||||
@ -289,14 +269,14 @@ public class YxStoreSeckillServiceImpl extends BaseServiceImpl<YxStoreSeckillMap
|
||||
.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[][] {
|
||||
{"规格", "默认"}
|
||||
}));
|
||||
List<ProductFormatDto> attrs = resources.getAttrs();
|
||||
ProductFormatDto productFormatDto = attrs.get(0);
|
||||
productFormatDto.setValue1("规格");
|
||||
Map<String,String> map = new HashMap<>();
|
||||
map.put("规格","默认");
|
||||
productFormatDto.setDetail(map);
|
||||
yxStoreProductAttrService.insertYxStoreProductAttr(ListUtil.toList(fromatDetailDto),
|
||||
ListUtil.toList(map),resources.getProductId());
|
||||
ListUtil.toList(productFormatDto),resources.getProductId());
|
||||
}else{
|
||||
yxStoreProductAttrService.insertYxStoreProductAttr(resources.getItems(),
|
||||
resources.getAttrs(),resources.getProductId());
|
||||
@ -309,27 +289,27 @@ public class YxStoreSeckillServiceImpl extends BaseServiceImpl<YxStoreSeckillMap
|
||||
* @param attrs attrs
|
||||
* @return ProductResultDto
|
||||
*/
|
||||
private ProductResultDto computedProduct(List<Map<String,Object>> attrs){
|
||||
private ProductResultDto computedProduct(List<ProductFormatDto> attrs){
|
||||
//取最小价格
|
||||
Double minPrice = ListMapToListBean(attrs)
|
||||
Double minPrice = attrs
|
||||
.stream()
|
||||
.map(ProductFormatDto::getSeckillPrice)
|
||||
.min(Comparator.naturalOrder())
|
||||
.orElse(0d);
|
||||
|
||||
Double minOtPrice = ListMapToListBean(attrs)
|
||||
Double minOtPrice = attrs
|
||||
.stream()
|
||||
.map(ProductFormatDto::getOtPrice)
|
||||
.min(Comparator.naturalOrder())
|
||||
.orElse(0d);
|
||||
|
||||
Double minCost = ListMapToListBean(attrs)
|
||||
Double minCost = attrs
|
||||
.stream()
|
||||
.map(ProductFormatDto::getCost)
|
||||
.min(Comparator.naturalOrder())
|
||||
.orElse(0d);
|
||||
//计算库存
|
||||
Integer stock = ListMapToListBean(attrs)
|
||||
Integer stock = attrs
|
||||
.stream()
|
||||
.map(ProductFormatDto::getSeckillStock)
|
||||
.reduce(Integer::sum)
|
||||
@ -347,17 +327,4 @@ public class YxStoreSeckillServiceImpl extends BaseServiceImpl<YxStoreSeckillMap
|
||||
.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;
|
||||
}
|
||||
}
|
||||
|
@ -26,13 +26,6 @@ import java.util.List;
|
||||
*/
|
||||
@Repository
|
||||
public interface YxStoreCombinationMapper extends CoreMapper<YxStoreCombination> {
|
||||
@Update("update yx_store_combination set stock=stock-#{num}, sales=sales+#{num}" +
|
||||
" where id=#{combinationId} and stock >= #{num}")
|
||||
int decStockIncSales(@Param("num") int num, @Param("combinationId") Long combinationId);
|
||||
|
||||
@Update("update yx_store_combination set stock=stock+#{num}, sales=sales-#{num}" +
|
||||
" where id=#{combinationId}")
|
||||
int incStockDecSales(@Param("num") int num,@Param("combinationId") Long combinationId);
|
||||
|
||||
@Select("SELECT c.id,c.effective_time as effectiveTime,c.image,c.people,c.price, s.sales as sales," +
|
||||
"c.title,c.unit_name as unitName,s.price as productPrice FROM yx_store_combination c " +
|
||||
|
@ -22,13 +22,6 @@ import org.springframework.stereotype.Repository;
|
||||
*/
|
||||
@Repository
|
||||
public interface YxStoreSeckillMapper extends CoreMapper<YxStoreSeckill> {
|
||||
@Update("update yx_store_seckill set stock=stock+#{num}, sales=sales-#{num}" +
|
||||
" where id=#{seckillId}")
|
||||
int incStockDecSales(@Param("num") int num, @Param("seckillId") Long seckillId);
|
||||
|
||||
@Update("update yx_store_seckill set stock=stock-#{num}, sales=sales+#{num}" +
|
||||
" where id=#{seckillId} and stock >= #{num}")
|
||||
int decStockIncSales(@Param("num") int num,@Param("seckillId") Long seckillId);
|
||||
|
||||
@Select("SELECT c.id,c.image,c.price,c.title as storeName,c.is_show as isShow,c.cost," +
|
||||
"c.is_postage as isPostage,c.postage,c.sales,c.stock,c.is_del as isDel" +
|
||||
|
@ -639,9 +639,6 @@ public class YxStoreOrderServiceImpl extends BaseServiceImpl<StoreOrderMapper, Y
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 确认订单退款
|
||||
* @param orderId 单号
|
||||
@ -1162,6 +1159,7 @@ public class YxStoreOrderServiceImpl extends BaseServiceImpl<StoreOrderMapper, Y
|
||||
Date today = DateUtil.beginOfDay(new Date());
|
||||
Date yesterday = DateUtil.beginOfDay(DateUtil.yesterday());
|
||||
Date nowMonth = DateUtil.beginOfMonth(new Date());
|
||||
Date lastWeek = DateUtil.beginOfDay(DateUtil.lastWeek());
|
||||
|
||||
ShoperOrderTimeDataVo orderTimeDataVo = new ShoperOrderTimeDataVo();
|
||||
|
||||
@ -1196,6 +1194,17 @@ public class YxStoreOrderServiceImpl extends BaseServiceImpl<StoreOrderMapper, Y
|
||||
//本月订单数
|
||||
orderTimeDataVo.setMonthCount(yxStoreOrderMapper.selectCount(wrapperThree));
|
||||
|
||||
//上周成交额
|
||||
QueryWrapper<YxStoreOrder> wrapperLastWeek = new QueryWrapper<>();
|
||||
wrapperLastWeek.lambda()
|
||||
.lt(YxStoreOrder::getPayTime,today)
|
||||
.ge(YxStoreOrder::getPayTime,lastWeek)
|
||||
.eq(YxStoreOrder::getPaid,OrderInfoEnum.PAY_STATUS_1.getValue())
|
||||
.eq(YxStoreOrder::getRefundStatus,OrderInfoEnum.REFUND_STATUS_0.getValue());
|
||||
orderTimeDataVo.setLastWeekPrice(yxStoreOrderMapper.todayPrice(wrapperLastWeek));
|
||||
//上周订单数
|
||||
orderTimeDataVo.setLastWeekCount(yxStoreOrderMapper.selectCount(wrapperLastWeek));
|
||||
|
||||
|
||||
return orderTimeDataVo;
|
||||
}
|
||||
@ -1581,7 +1590,7 @@ public class YxStoreOrderServiceImpl extends BaseServiceImpl<StoreOrderMapper, Y
|
||||
storeCartVO.getProductAttrUnique(),combinationId,"combination");
|
||||
}else if(seckillId != null && seckillId > 0){
|
||||
productService.decProductStock(storeCartVO.getCartNum(),storeCartVO.getProductId(),
|
||||
storeCartVO.getProductAttrUnique(),combinationId,"seckill");
|
||||
storeCartVO.getProductAttrUnique(),seckillId,"seckill");
|
||||
}else if(bargainId != null && bargainId > 0){
|
||||
storeBargainService.decStockIncSales(storeCartVO.getCartNum(),bargainId);
|
||||
} else {
|
||||
@ -1673,14 +1682,14 @@ public class YxStoreOrderServiceImpl extends BaseServiceImpl<StoreOrderMapper, Y
|
||||
YxStoreCartQueryVo cart = JSONObject.parseObject(cartInfo.getCartInfo()
|
||||
,YxStoreCartQueryVo.class);
|
||||
if(order.getCombinationId() != null && order.getCombinationId() > 0){//拼团
|
||||
combinationService.incStockDecSales(cart.getCartNum(),order.getCombinationId());
|
||||
productService.incProductStock(cart.getCartNum(),cart.getProductId(),cart.getProductAttrUnique(),order.getCombinationId(),"combination");
|
||||
}else if(order.getSeckillId() != null && order.getSeckillId() > 0){//秒杀
|
||||
storeSeckillService.incStockDecSales(cart.getCartNum(),order.getSeckillId());
|
||||
productService.incProductStock(cart.getCartNum(),cart.getProductId(),cart.getProductAttrUnique(),order.getSeckillId(),"seckill");
|
||||
}else if(order.getBargainId() != null && order.getBargainId() > 0){//砍价
|
||||
storeBargainService.incStockDecSales(cart.getCartNum(),order.getBargainId());
|
||||
}else{
|
||||
productService.incProductStock(cart.getCartNum(),cart.getProductId()
|
||||
,cart.getProductAttrUnique());
|
||||
,cart.getProductAttrUnique(),0L,null);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -11,10 +11,28 @@ import java.io.Serializable;
|
||||
**/
|
||||
@Data
|
||||
public class ShoperOrderTimeDataVo implements Serializable {
|
||||
private Double todayPrice; //今日成交额
|
||||
private Integer todayCount; //今日订单数
|
||||
private Double proPrice; //昨日成交额
|
||||
private Integer proCount;//昨日订单数
|
||||
private Double monthPrice;//本月成交额
|
||||
private Integer monthCount;//本月订单数
|
||||
|
||||
/**今日成交额*/
|
||||
private Double todayPrice;
|
||||
|
||||
/**今日订单数*/
|
||||
private Integer todayCount;
|
||||
|
||||
/**昨日成交额*/
|
||||
private Double proPrice;
|
||||
|
||||
/**昨日订单数*/
|
||||
private Integer proCount;
|
||||
|
||||
/**本月成交额*/
|
||||
private Double monthPrice;
|
||||
|
||||
/**本月订单数*/
|
||||
private Integer monthCount;
|
||||
|
||||
/**上周订单数*/
|
||||
private Integer lastWeekCount;
|
||||
|
||||
/**上周成交额*/
|
||||
private Double lastWeekPrice;
|
||||
}
|
||||
|
@ -12,6 +12,7 @@ import co.yixiang.common.service.BaseService;
|
||||
import co.yixiang.modules.product.domain.YxStoreProductAttr;
|
||||
import co.yixiang.modules.product.domain.YxStoreProductAttrValue;
|
||||
import co.yixiang.modules.product.service.dto.FromatDetailDto;
|
||||
import co.yixiang.modules.product.service.dto.ProductFormatDto;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@ -29,7 +30,7 @@ public interface YxStoreProductAttrService extends BaseService<YxStoreProductAt
|
||||
* @param productId 商品id
|
||||
* @param unique sku唯一值
|
||||
*/
|
||||
void incProductAttrStock(Integer num, Long productId, String unique);
|
||||
void incProductAttrStock(Integer num, Long productId, String unique,String type);
|
||||
|
||||
/**
|
||||
* 减少库存增加销量
|
||||
@ -60,6 +61,6 @@ public interface YxStoreProductAttrService extends BaseService<YxStoreProductAt
|
||||
* @param attrs value
|
||||
* @param productId 商品id
|
||||
*/
|
||||
void insertYxStoreProductAttr(List<FromatDetailDto> items, List<Map<String,Object>> attrs,
|
||||
void insertYxStoreProductAttr(List<FromatDetailDto> items, List<ProductFormatDto> attrs,
|
||||
Long productId);
|
||||
}
|
||||
|
@ -35,7 +35,7 @@ public interface YxStoreProductService extends BaseService<YxStoreProduct>{
|
||||
* @param productId 商品id
|
||||
* @param unique sku唯一值
|
||||
*/
|
||||
void incProductStock(Integer num, Long productId, String unique);
|
||||
void incProductStock(Integer num, Long productId, String unique,Long activityId, String type);
|
||||
|
||||
/**
|
||||
* 减少库存与增加销量
|
||||
|
@ -12,7 +12,7 @@ import java.util.Map;
|
||||
|
||||
/**
|
||||
* 商品对象VO
|
||||
*
|
||||
*
|
||||
* @author hupeng
|
||||
* @date 2020-04-25
|
||||
*/
|
||||
@ -138,7 +138,7 @@ public class ProductDto
|
||||
|
||||
private List<FromatDetailDto> items;
|
||||
|
||||
private List<Map<String,Object>> attrs;
|
||||
private List<ProductFormatDto> attrs;
|
||||
|
||||
|
||||
|
||||
|
@ -13,7 +13,7 @@ import java.util.Map;
|
||||
|
||||
/**
|
||||
* 商品对象DTO
|
||||
*
|
||||
*
|
||||
* @author hupeng
|
||||
* @date 2020-04-23
|
||||
*/
|
||||
@ -140,7 +140,7 @@ public class StoreProductDto
|
||||
private List<FromatDetailDto> items;
|
||||
|
||||
//sku结果集
|
||||
private List<Map<String,Object>> attrs;
|
||||
private List<ProductFormatDto> attrs;
|
||||
|
||||
|
||||
}
|
||||
|
@ -16,6 +16,7 @@ import co.yixiang.api.BusinessException;
|
||||
import co.yixiang.api.YshopException;
|
||||
import co.yixiang.common.service.impl.BaseServiceImpl;
|
||||
import co.yixiang.dozer.service.IGenerator;
|
||||
import co.yixiang.exception.BadRequestException;
|
||||
import co.yixiang.modules.product.domain.YxStoreProductAttr;
|
||||
import co.yixiang.modules.product.domain.YxStoreProductAttrValue;
|
||||
import co.yixiang.modules.product.service.YxStoreProductAttrResultService;
|
||||
@ -72,7 +73,7 @@ public class YxStoreProductAttrServiceImpl extends BaseServiceImpl<StoreProductA
|
||||
*/
|
||||
@Override
|
||||
@Transactional
|
||||
public void insertYxStoreProductAttr(List<FromatDetailDto> items, List<Map<String,Object>> attrs,
|
||||
public void insertYxStoreProductAttr(List<FromatDetailDto> items, List<ProductFormatDto> attrs,
|
||||
Long productId)
|
||||
{
|
||||
List<YxStoreProductAttr> attrGroup = new ArrayList<>();
|
||||
@ -88,11 +89,11 @@ public class YxStoreProductAttrServiceImpl extends BaseServiceImpl<StoreProductA
|
||||
|
||||
|
||||
List<YxStoreProductAttrValue> valueGroup = new ArrayList<>();
|
||||
for (Map<String, Object> m : attrs) {
|
||||
ProductFormatDto productFormatDto = BeanUtil.mapToBean(m,ProductFormatDto.class,true);
|
||||
// List<String> stringList = productFormatDto.getDetail().values()
|
||||
// .stream()
|
||||
// .collect(Collectors.toList());
|
||||
for (ProductFormatDto productFormatDto : attrs) {
|
||||
|
||||
if(productFormatDto.getPinkStock()>productFormatDto.getStock() || productFormatDto.getSeckillStock()>productFormatDto.getStock()){
|
||||
throw new BadRequestException("活动商品库存不能大于原有商品库存");
|
||||
}
|
||||
List<String> stringList = new ArrayList<>(productFormatDto.getDetail().values());
|
||||
Collections.sort(stringList);
|
||||
|
||||
@ -162,12 +163,19 @@ public class YxStoreProductAttrServiceImpl extends BaseServiceImpl<StoreProductA
|
||||
* @param unique sku唯一值
|
||||
*/
|
||||
@Override
|
||||
public void incProductAttrStock(Integer num, Long productId, String unique) {
|
||||
yxStoreProductAttrValueMapper.incStockDecSales(num,productId,unique);
|
||||
public void incProductAttrStock(Integer num, Long productId, String unique, String type ) {
|
||||
|
||||
if("combination".equals(type)){
|
||||
yxStoreProductAttrValueMapper.incCombinationStockDecSales(num,productId,unique);
|
||||
}else if("seckill".equals(type)){
|
||||
yxStoreProductAttrValueMapper.incSeckillStockDecSales(num,productId,unique);
|
||||
}else {
|
||||
yxStoreProductAttrValueMapper.incStockDecSales(num,productId,unique);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 减少库存增加销量
|
||||
* 减少库存增加销量(针对sku操作)
|
||||
* @param num 数量
|
||||
* @param productId 商品id
|
||||
* @param unique sku唯一值
|
||||
|
@ -89,11 +89,8 @@ public class YxStoreProductServiceImpl extends BaseServiceImpl<StoreProductMappe
|
||||
|
||||
@Autowired
|
||||
private IGenerator generator;
|
||||
|
||||
@Autowired
|
||||
private StoreProductMapper storeProductMapper;
|
||||
|
||||
|
||||
@Autowired
|
||||
private YxStoreCategoryService yxStoreCategoryService;
|
||||
@Autowired
|
||||
@ -120,11 +117,20 @@ public class YxStoreProductServiceImpl extends BaseServiceImpl<StoreProductMappe
|
||||
* @param unique sku唯一值
|
||||
*/
|
||||
@Override
|
||||
public void incProductStock(Integer num, Long productId, String unique) {
|
||||
public void incProductStock(Integer num, Long productId, String unique,Long activityId, String type) {
|
||||
//处理属性sku
|
||||
if(StrUtil.isNotEmpty(unique)){
|
||||
yxStoreProductAttrService.incProductAttrStock(num,productId,unique);
|
||||
yxStoreProductAttrService.incProductAttrStock(num,productId,unique,type);
|
||||
}
|
||||
storeProductMapper.incStockDecSales(num,productId);
|
||||
//先处理商品库存,活动商品也要处理,因为共享库存
|
||||
storeProductMapper.incStockDecSales(num, productId);
|
||||
//处理商品外层显示的库存
|
||||
if("combination".equals(type)){
|
||||
storeProductMapper.incCombinationStockIncSales(num,productId,activityId);
|
||||
}else if("seckill".equals(type)){
|
||||
storeProductMapper.incSeckillStockIncSales(num,productId,activityId);
|
||||
}
|
||||
//todo 处理砍价商品库存
|
||||
}
|
||||
|
||||
/**
|
||||
@ -135,18 +141,23 @@ public class YxStoreProductServiceImpl extends BaseServiceImpl<StoreProductMappe
|
||||
*/
|
||||
@Override
|
||||
public void decProductStock(int num, Long productId, String unique,Long activityId,String type) {
|
||||
//处理属性sku
|
||||
if(StrUtil.isNotEmpty(unique)){
|
||||
yxStoreProductAttrService.decProductAttrStock(num,productId,unique, type);
|
||||
}
|
||||
//先处理商品库存,活动商品也要处理,因为共享库存
|
||||
int product = storeProductMapper.decStockIncSales(num,productId);
|
||||
if(product == 0) {
|
||||
throw new YshopException("商品库存不足");
|
||||
}
|
||||
//处理商品外层显示的库存
|
||||
int res = 0;
|
||||
if("combination".equals(type)){
|
||||
res = storeProductMapper.decCombinationStockIncSales(num,productId,activityId);
|
||||
}else if("seckill".equals(type)){
|
||||
res = storeProductMapper.decSeckillStockIncSales(num,productId,activityId);
|
||||
}else {
|
||||
res = storeProductMapper.decStockIncSales(num,productId);
|
||||
}
|
||||
|
||||
//todo 处理砍价库存
|
||||
if(res == 0) {
|
||||
throw new YshopException("商品库存不足");
|
||||
}
|
||||
@ -523,17 +534,17 @@ public class YxStoreProductServiceImpl extends BaseServiceImpl<StoreProductMappe
|
||||
.attrHidden("")
|
||||
.detail(ListUtil.toList("默认"))
|
||||
.build();
|
||||
List<Map<String,Object>> attrs = storeProductDto.getAttrs();
|
||||
Map<String,Object> map = attrs.get(0);
|
||||
map.put("value1","规格");
|
||||
map.put("detail", MapUtil.of(new String[][] {
|
||||
{"规格", "默认"}
|
||||
}));
|
||||
List<ProductFormatDto> attrs = storeProductDto.getAttrs();
|
||||
ProductFormatDto productFormatDto = attrs.get(0);
|
||||
productFormatDto.setValue1("规格");
|
||||
Map<String,String> map = new HashMap<>();
|
||||
map.put("规格","默认");
|
||||
productFormatDto.setDetail(map);
|
||||
yxStoreProductAttrService.insertYxStoreProductAttr(ListUtil.toList(fromatDetailDto),
|
||||
ListUtil.toList(map),yxStoreProduct.getId());
|
||||
ListUtil.toList(productFormatDto),storeProductDto.getId());
|
||||
}else{
|
||||
yxStoreProductAttrService.insertYxStoreProductAttr(storeProductDto.getItems(),
|
||||
storeProductDto.getAttrs(),yxStoreProduct.getId());
|
||||
storeProductDto.getAttrs(),storeProductDto.getId());
|
||||
}
|
||||
|
||||
|
||||
@ -677,27 +688,27 @@ public class YxStoreProductServiceImpl extends BaseServiceImpl<StoreProductMappe
|
||||
* @param attrs attrs
|
||||
* @return ProductResultDto
|
||||
*/
|
||||
private ProductResultDto computedProduct(List<Map<String,Object>> attrs){
|
||||
private ProductResultDto computedProduct(List<ProductFormatDto> attrs){
|
||||
//取最小价格
|
||||
Double minPrice = ListMapToListBean(attrs)
|
||||
Double minPrice = attrs
|
||||
.stream()
|
||||
.map(ProductFormatDto::getPrice)
|
||||
.min(Comparator.naturalOrder())
|
||||
.orElse(0d);
|
||||
|
||||
Double minOtPrice = ListMapToListBean(attrs)
|
||||
Double minOtPrice = attrs
|
||||
.stream()
|
||||
.map(ProductFormatDto::getOtPrice)
|
||||
.min(Comparator.naturalOrder())
|
||||
.orElse(0d);
|
||||
|
||||
Double minCost = ListMapToListBean(attrs)
|
||||
Double minCost = attrs
|
||||
.stream()
|
||||
.map(ProductFormatDto::getCost)
|
||||
.min(Comparator.naturalOrder())
|
||||
.orElse(0d);
|
||||
//计算库存
|
||||
Integer stock = ListMapToListBean(attrs)
|
||||
Integer stock = attrs
|
||||
.stream()
|
||||
.map(ProductFormatDto::getStock)
|
||||
.reduce(Integer::sum)
|
||||
|
@ -22,24 +22,77 @@ import org.springframework.stereotype.Repository;
|
||||
@Repository
|
||||
public interface StoreProductAttrValueMapper extends CoreMapper<YxStoreProductAttrValue> {
|
||||
|
||||
@Select("select sum(stock) from yx_store_product_attr_value " +
|
||||
"where product_id = #{productId}")
|
||||
Integer sumStock(long productId);
|
||||
|
||||
/**
|
||||
* 正常商品 加库存 减销量
|
||||
* @param num
|
||||
* @param productId
|
||||
* @param unique
|
||||
* @return
|
||||
*/
|
||||
@Update("update yx_store_product_attr_value set stock=stock+#{num}, sales=sales-#{num}" +
|
||||
" where product_id=#{productId} and `unique`=#{unique}")
|
||||
int incStockDecSales(@Param("num") int num,@Param("productId") Long productId,
|
||||
@Param("unique") String unique);
|
||||
|
||||
|
||||
/**
|
||||
* 拼团商品 加库存 减销量
|
||||
* @param num
|
||||
* @param productId
|
||||
* @param unique
|
||||
* @return
|
||||
*/
|
||||
|
||||
@Update("update yx_store_product_attr_value set stock=stock+#{num}, pink_stock=pink_stock+#{num}, sales=sales-#{num}" +
|
||||
" where product_id=#{productId} and and `unique`=#{unique}")
|
||||
int incCombinationStockDecSales(@Param("num") int num,@Param("productId") Long productId,
|
||||
@Param("unique") String unique);
|
||||
|
||||
|
||||
/**
|
||||
* 秒杀 加库存 减销量
|
||||
* @param num
|
||||
* @param productId
|
||||
* @param unique
|
||||
* @return
|
||||
*/
|
||||
@Update("update yx_store_product_attr_value set stock=stock+#{num},seckill_stock=seckill_stock+#{num}, sales=sales-#{num}" +
|
||||
" where product_id=#{productId} and `unique`=#{unique}")
|
||||
int incSeckillStockDecSales(@Param("num") int num,@Param("productId") Long productId,
|
||||
@Param("unique") String unique);
|
||||
|
||||
|
||||
/**
|
||||
* 普通商品 减库存 加销量
|
||||
* @param num
|
||||
* @param productId
|
||||
* @param unique
|
||||
* @return
|
||||
*/
|
||||
@Update("update yx_store_product_attr_value set stock=stock-#{num}, sales=sales+#{num}" +
|
||||
" where product_id=#{productId} and `unique`=#{unique} and stock >= #{num}")
|
||||
int decStockIncSales(@Param("num") int num, @Param("productId") Long productId,
|
||||
@Param("unique") String unique);
|
||||
|
||||
@Update("update yx_store_product_attr_value set stock=stock+#{num}, sales=sales-#{num}" +
|
||||
" where product_id=#{productId} and `unique`=#{unique}")
|
||||
int incStockDecSales(@Param("num") int num,@Param("productId") Long productId,
|
||||
@Param("unique") String unique);
|
||||
|
||||
/**
|
||||
* 拼团产品 减库存 加销量
|
||||
* @param num
|
||||
* @param productId
|
||||
* @param unique
|
||||
* @return
|
||||
*/
|
||||
@Update("update yx_store_product_attr_value set stock=stock-#{num}, pink_stock=pink_stock-#{num} ,sales=sales+#{num}" +
|
||||
" where product_id=#{productId} and `unique`=#{unique} and stock >= #{num} and pink_stock>=#{num}")
|
||||
int decCombinationStockIncSales(int num, Long productId, String unique);
|
||||
|
||||
/**
|
||||
* 秒杀产品 减库存 加销量
|
||||
* @param num
|
||||
* @param productId
|
||||
* @param unique
|
||||
* @return
|
||||
*/
|
||||
@Update("update yx_store_product_attr_value set stock=stock-#{num}, seckill_stock=seckill_stock-#{num},sales=sales+#{num}" +
|
||||
" where product_id=#{productId} and `unique`=#{unique} and stock >= #{num} and seckill_stock>=#{num}")
|
||||
int decSeckillStockIncSales(int num, Long productId, String unique);
|
||||
|
@ -21,35 +21,70 @@ import org.springframework.stereotype.Repository;
|
||||
@Repository
|
||||
public interface StoreProductMapper extends CoreMapper<YxStoreProduct> {
|
||||
|
||||
/**
|
||||
* 正常商品库存 减库存 加销量
|
||||
* @param num
|
||||
* @param productId
|
||||
* @return
|
||||
*/
|
||||
@Update("update yx_store_product set stock=stock-#{num}, sales=sales+#{num}" +
|
||||
" where id=#{productId} and stock >= #{num}")
|
||||
int decStockIncSales(@Param("num") int num,@Param("productId") Long productId);
|
||||
|
||||
/**
|
||||
* 正常商品库存 加库存 减销量
|
||||
* @param num
|
||||
* @param productId
|
||||
* @return
|
||||
*/
|
||||
@Update("update yx_store_product set stock=stock+#{num}, sales=sales-#{num}" +
|
||||
" where id=#{productId}")
|
||||
int incStockDecSales(@Param("num") int num,@Param("productId") Long productId);
|
||||
|
||||
@Update("update yx_store_product set sales=sales+#{num}" +
|
||||
" where id=#{productId}")
|
||||
int incSales(@Param("num") int num,@Param("productId") int productId);
|
||||
|
||||
@Update("update yx_store_product set sales=sales-#{num}" +
|
||||
" where id=#{productId}")
|
||||
int decSales(@Param("num") int num,@Param("productId") Long productId);
|
||||
|
||||
|
||||
@Update("update yx_store_product set is_del = #{status} where id = #{id}")
|
||||
void updateDel(@Param("status")int status,@Param("id") Integer id);
|
||||
|
||||
@Update("update yx_store_product set is_show = #{status} where id = #{id}")
|
||||
void updateOnsale(@Param("status") Integer status, @Param("id") Long id);
|
||||
|
||||
//todo 拼团商品库存+—
|
||||
/**
|
||||
* 拼团商品库存,减库存 加销量
|
||||
* @param num
|
||||
* @param productId
|
||||
* @param activityId
|
||||
* @return
|
||||
*/
|
||||
@Update("update yx_store_combination set stock=stock-#{num}, sales=sales+#{num}" +
|
||||
" where id=#{activityId} and stock >= #{num}")
|
||||
int decCombinationStockIncSales(int num, Long productId,Long activityId);
|
||||
//todo 秒杀商品库存+—
|
||||
|
||||
/**
|
||||
* 秒杀产品库存 减库存,加销量
|
||||
* @param num
|
||||
* @param productId
|
||||
* @param activityId
|
||||
* @return
|
||||
*/
|
||||
@Update("update yx_store_seckill set stock=stock-#{num}, sales=sales+#{num}" +
|
||||
" where id=#{activityId} and stock >= #{num}")
|
||||
int decSeckillStockIncSales(int num, Long productId,Long activityId);
|
||||
|
||||
/**
|
||||
* 拼团商品库存,加库存 减销量
|
||||
* @param num
|
||||
* @param productId
|
||||
* @param activityId
|
||||
*/
|
||||
@Update("update yx_store_combination set stock=stock+#{num}, sales=sales-#{num}" +
|
||||
" where id=#{activityId} and stock >= #{num}")
|
||||
void incCombinationStockIncSales(Integer num, Long productId, Long activityId);
|
||||
|
||||
/**
|
||||
* 秒杀产品库存 加库存,减销量
|
||||
* @param num
|
||||
* @param productId
|
||||
* @param activityId
|
||||
* @return
|
||||
*/
|
||||
@Update("update yx_store_seckill set stock=stock+#{num}, sales=sales-#{num}" +
|
||||
" where id=#{activityId} and stock >= #{num}")
|
||||
void incSeckillStockIncSales(Integer num, Long productId, Long activityId);
|
||||
}
|
||||
|
@ -8,6 +8,7 @@ package co.yixiang.modules.activity.rest;
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import co.yixiang.constant.ShopConstants;
|
||||
import co.yixiang.dozer.service.IGenerator;
|
||||
import co.yixiang.enums.SpecTypeEnum;
|
||||
import co.yixiang.logging.aop.log.Log;
|
||||
import co.yixiang.modules.activity.domain.YxStoreCombination;
|
||||
@ -16,13 +17,16 @@ import co.yixiang.modules.activity.service.dto.YxStoreCombinationDto;
|
||||
import co.yixiang.modules.activity.service.dto.YxStoreCombinationQueryCriteria;
|
||||
import co.yixiang.modules.aop.ForbidSubmit;
|
||||
import co.yixiang.modules.product.domain.YxStoreProductAttrResult;
|
||||
import co.yixiang.modules.product.domain.YxStoreProductAttrValue;
|
||||
import co.yixiang.modules.product.service.YxStoreProductAttrResultService;
|
||||
import co.yixiang.modules.product.service.YxStoreProductAttrValueService;
|
||||
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.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
@ -60,11 +64,15 @@ public class StoreCombinationController {
|
||||
private final YxShippingTemplatesService yxShippingTemplatesService;
|
||||
private final YxStoreProductRuleService yxStoreProductRuleService;
|
||||
private final YxStoreProductAttrResultService yxStoreProductAttrResultService;
|
||||
public StoreCombinationController(YxStoreCombinationService yxStoreCombinationService, YxShippingTemplatesService yxShippingTemplatesService, YxStoreProductRuleService yxStoreProductRuleService, YxStoreProductAttrResultService yxStoreProductAttrResultService) {
|
||||
private final YxStoreProductAttrValueService storeProductAttrValueService;
|
||||
private final IGenerator generator;
|
||||
public StoreCombinationController(YxStoreCombinationService yxStoreCombinationService, YxShippingTemplatesService yxShippingTemplatesService, YxStoreProductRuleService yxStoreProductRuleService, YxStoreProductAttrResultService yxStoreProductAttrResultService, YxStoreProductAttrValueService storeProductAttrValueService, IGenerator generator) {
|
||||
this.yxStoreCombinationService = yxStoreCombinationService;
|
||||
this.yxShippingTemplatesService = yxShippingTemplatesService;
|
||||
this.yxStoreProductRuleService = yxStoreProductRuleService;
|
||||
this.yxStoreProductAttrResultService = yxStoreProductAttrResultService;
|
||||
this.storeProductAttrValueService = storeProductAttrValueService;
|
||||
this.generator = generator;
|
||||
}
|
||||
|
||||
@Log("查询拼团")
|
||||
@ -93,14 +101,6 @@ public class StoreCombinationController {
|
||||
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());
|
||||
|
||||
@ -118,33 +118,16 @@ public class StoreCombinationController {
|
||||
.getOne(Wrappers.<YxStoreProductAttrResult>lambdaQuery()
|
||||
.eq(YxStoreProductAttrResult::getProductId,yxStoreCombination.getProductId()).last("limit 1"));
|
||||
JSONObject result = JSON.parseObject(storeProductAttrResult.getResult());
|
||||
|
||||
List<YxStoreProductAttrValue> attrValues = storeProductAttrValueService.list(new LambdaQueryWrapper<YxStoreProductAttrValue>().eq(YxStoreProductAttrValue::getProductId, yxStoreCombination.getProductId()));
|
||||
List<ProductFormatDto> productFormatDtos = generator.convert(attrValues, ProductFormatDto.class);
|
||||
if(SpecTypeEnum.TYPE_1.getValue().equals(yxStoreCombination.getSpecType())){
|
||||
productDto.setAttr(new ProductFormatDto());
|
||||
productDto.setAttrs(result.getObject("value",ArrayList.class));
|
||||
productDto.setAttrs(productFormatDtos);
|
||||
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()))
|
||||
.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()))
|
||||
.pinkPrice(Double.valueOf(mapAttr.get("pink_price").toString()))
|
||||
.pinkStock(Integer.valueOf(mapAttr.get("pink_stock").toString()))
|
||||
.stock(Integer.valueOf(mapAttr.get("stock").toString()))
|
||||
.seckillPrice(Double.valueOf(mapAttr.get("seckill_price").toString()))
|
||||
.seckillStock(Integer.valueOf(mapAttr.get("seckill_stock").toString()))
|
||||
.build();
|
||||
productDto.setAttr(productFormatDto);
|
||||
}
|
||||
|
||||
productDto.setAttr(productFormatDtos.get(0));
|
||||
}
|
||||
|
||||
map.put("productInfo",productDto);
|
||||
|
||||
|
@ -8,23 +8,25 @@ package co.yixiang.modules.activity.rest;
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import co.yixiang.constant.ShopConstants;
|
||||
import co.yixiang.dozer.service.IGenerator;
|
||||
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.domain.YxStoreProductAttrValue;
|
||||
import co.yixiang.modules.product.service.YxStoreProductAttrResultService;
|
||||
import co.yixiang.modules.product.service.YxStoreProductAttrValueService;
|
||||
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.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
@ -47,14 +49,20 @@ import java.util.*;
|
||||
@RequestMapping("api")
|
||||
public class StoreSeckillController {
|
||||
|
||||
private final IGenerator generator;
|
||||
private final YxStoreSeckillService yxStoreSeckillService;
|
||||
private final YxShippingTemplatesService yxShippingTemplatesService;
|
||||
private final YxStoreProductRuleService yxStoreProductRuleService;
|
||||
private final YxStoreProductAttrValueService storeProductAttrValueService;
|
||||
private final YxStoreProductAttrResultService yxStoreProductAttrResultService;
|
||||
public StoreSeckillController(YxStoreSeckillService yxStoreSeckillService, YxShippingTemplatesService yxShippingTemplatesService, YxStoreProductRuleService yxStoreProductRuleService, YxStoreProductAttrResultService yxStoreProductAttrResultService) {
|
||||
public StoreSeckillController(IGenerator generator, YxStoreSeckillService yxStoreSeckillService, YxShippingTemplatesService yxShippingTemplatesService,
|
||||
YxStoreProductRuleService yxStoreProductRuleService, YxStoreProductAttrValueService storeProductAttrValueService,
|
||||
YxStoreProductAttrResultService yxStoreProductAttrResultService) {
|
||||
this.generator = generator;
|
||||
this.yxStoreSeckillService = yxStoreSeckillService;
|
||||
this.yxShippingTemplatesService = yxShippingTemplatesService;
|
||||
this.yxStoreProductRuleService = yxStoreProductRuleService;
|
||||
this.storeProductAttrValueService = storeProductAttrValueService;
|
||||
this.yxStoreProductAttrResultService = yxStoreProductAttrResultService;
|
||||
}
|
||||
|
||||
@ -108,14 +116,6 @@ public class StoreSeckillController {
|
||||
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());
|
||||
|
||||
@ -134,30 +134,15 @@ public class StoreSeckillController {
|
||||
.eq(YxStoreProductAttrResult::getProductId,yxStoreSeckill.getProductId()).last("limit 1"));
|
||||
JSONObject result = JSON.parseObject(storeProductAttrResult.getResult());
|
||||
|
||||
List<YxStoreProductAttrValue> attrValues = storeProductAttrValueService.list(new LambdaQueryWrapper<YxStoreProductAttrValue>().eq(YxStoreProductAttrValue::getProductId, yxStoreSeckill.getProductId()));
|
||||
List<ProductFormatDto> productFormatDtos = generator.convert(attrValues, ProductFormatDto.class);
|
||||
|
||||
if(SpecTypeEnum.TYPE_1.getValue().equals(yxStoreSeckill.getSpecType())){
|
||||
productDto.setAttr(new ProductFormatDto());
|
||||
productDto.setAttrs(result.getObject("value", ArrayList.class));
|
||||
productDto.setAttrs(productFormatDtos);
|
||||
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()))
|
||||
.barCode(mapAttr.get("bar_code").toString())
|
||||
.weight(Double.valueOf(mapAttr.get("weight").toString()))
|
||||
.volume(Double.valueOf(mapAttr.get("volume").toString()))
|
||||
.stock(Integer.valueOf(mapAttr.get("stock").toString()))
|
||||
.brokerage(Double.valueOf(mapAttr.get("brokerage").toString()))
|
||||
.brokerageTwo(Double.valueOf(mapAttr.get("brokerage_two").toString()))
|
||||
.pinkPrice(Double.valueOf(mapAttr.get("pink_price").toString()))
|
||||
.pinkStock(Integer.valueOf(mapAttr.get("pink_stock").toString()))
|
||||
.seckillPrice(Double.valueOf(mapAttr.get("seckill_price").toString()))
|
||||
.seckillStock(Integer.valueOf(mapAttr.get("seckill_stock").toString()))
|
||||
.build();
|
||||
productDto.setAttr(productFormatDto);
|
||||
productDto.setAttr(productFormatDtos.get(0));
|
||||
}
|
||||
|
||||
|
||||
|
@ -10,6 +10,7 @@ package co.yixiang.modules.product.rest;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import co.yixiang.constant.ShopConstants;
|
||||
import co.yixiang.dozer.service.IGenerator;
|
||||
import co.yixiang.enums.ShopCommonEnum;
|
||||
import co.yixiang.enums.SpecTypeEnum;
|
||||
import co.yixiang.logging.aop.log.Log;
|
||||
@ -18,7 +19,9 @@ import co.yixiang.modules.category.domain.YxStoreCategory;
|
||||
import co.yixiang.modules.category.service.YxStoreCategoryService;
|
||||
import co.yixiang.modules.product.domain.YxStoreProduct;
|
||||
import co.yixiang.modules.product.domain.YxStoreProductAttrResult;
|
||||
import co.yixiang.modules.product.domain.YxStoreProductAttrValue;
|
||||
import co.yixiang.modules.product.service.YxStoreProductAttrResultService;
|
||||
import co.yixiang.modules.product.service.YxStoreProductAttrValueService;
|
||||
import co.yixiang.modules.product.service.YxStoreProductRuleService;
|
||||
import co.yixiang.modules.product.service.YxStoreProductService;
|
||||
import co.yixiang.modules.product.service.dto.ProductDto;
|
||||
@ -29,6 +32,7 @@ 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.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
@ -68,17 +72,20 @@ public class StoreProductController {
|
||||
private final YxShippingTemplatesService yxShippingTemplatesService;
|
||||
private final YxStoreProductRuleService yxStoreProductRuleService;
|
||||
private final YxStoreProductAttrResultService yxStoreProductAttrResultService;
|
||||
|
||||
private final YxStoreProductAttrValueService storeProductAttrValueService;
|
||||
private final IGenerator generator;
|
||||
public StoreProductController(YxStoreProductService yxStoreProductService,
|
||||
YxStoreCategoryService yxStoreCategoryService,
|
||||
YxShippingTemplatesService yxShippingTemplatesService,
|
||||
YxStoreProductRuleService yxStoreProductRuleService,
|
||||
YxStoreProductAttrResultService yxStoreProductAttrResultService) {
|
||||
YxStoreProductAttrResultService yxStoreProductAttrResultService, YxStoreProductAttrValueService storeProductAttrValueService, IGenerator generator) {
|
||||
this.yxStoreProductService = yxStoreProductService;
|
||||
this.yxStoreCategoryService = yxStoreCategoryService;
|
||||
this.yxShippingTemplatesService = yxShippingTemplatesService;
|
||||
this.yxStoreProductRuleService = yxStoreProductRuleService;
|
||||
this.yxStoreProductAttrResultService = yxStoreProductAttrResultService;
|
||||
this.storeProductAttrValueService = storeProductAttrValueService;
|
||||
this.generator = generator;
|
||||
}
|
||||
|
||||
@Log("查询商品")
|
||||
@ -178,32 +185,16 @@ public class StoreProductController {
|
||||
.getOne(Wrappers.<YxStoreProductAttrResult>lambdaQuery()
|
||||
.eq(YxStoreProductAttrResult::getProductId,id).last("limit 1"));
|
||||
JSONObject result = JSON.parseObject(storeProductAttrResult.getResult());
|
||||
|
||||
List<YxStoreProductAttrValue> attrValues = storeProductAttrValueService.list(new LambdaQueryWrapper<YxStoreProductAttrValue>().eq(YxStoreProductAttrValue::getProductId, yxStoreProduct.getId()));
|
||||
List<ProductFormatDto> productFormatDtos = generator.convert(attrValues, ProductFormatDto.class);
|
||||
if(SpecTypeEnum.TYPE_1.getValue().equals(yxStoreProduct.getSpecType())){
|
||||
productDto.setAttr(new ProductFormatDto());
|
||||
productDto.setAttrs(result.getObject("value",ArrayList.class));
|
||||
productDto.setAttrs(productFormatDtos);
|
||||
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()))
|
||||
.cost(Double.valueOf(mapAttr.get("cost").toString()))
|
||||
.otPrice(Double.valueOf(mapAttr.get("ot_price").toString()))
|
||||
.stock(Integer.valueOf(mapAttr.get("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()))
|
||||
.pinkPrice(Double.valueOf(mapAttr.get("pink_price").toString()))
|
||||
.pinkStock(Integer.valueOf(mapAttr.get("pink_stock").toString()))
|
||||
.seckillPrice(Double.valueOf(mapAttr.get("seckill_price").toString()))
|
||||
.seckillStock(Integer.valueOf(mapAttr.get("seckill_stock").toString()))
|
||||
.build();
|
||||
productDto.setAttr(productFormatDto);
|
||||
}
|
||||
|
||||
productDto.setAttr(productFormatDtos.get(0));
|
||||
}
|
||||
|
||||
map.put("productInfo",productDto);
|
||||
|
||||
|
@ -16,6 +16,7 @@ import co.yixiang.tools.service.dto.LocalStorageDto;
|
||||
import co.yixiang.tools.service.dto.LocalStorageQueryCriteria;
|
||||
import co.yixiang.tools.service.mapper.LocalStorageMapper;
|
||||
import co.yixiang.utils.FileUtil;
|
||||
import co.yixiang.utils.SecurityUtils;
|
||||
import co.yixiang.utils.StringUtils;
|
||||
import com.github.pagehelper.PageInfo;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
@ -101,7 +102,7 @@ public class LocalStorageServiceImpl extends BaseServiceImpl<LocalStorageMapper,
|
||||
file.getPath(),
|
||||
type,
|
||||
FileUtil.getSize(multipartFile.getSize()),
|
||||
"yshop"
|
||||
SecurityUtils.getUsername()
|
||||
);
|
||||
this.save(localStorage);
|
||||
return generator.convert(localStorage,LocalStorageDto.class);
|
||||
|
@ -14,6 +14,7 @@ import co.yixiang.modules.mp.service.dto.YxWechatLiveDto;
|
||||
import co.yixiang.modules.mp.service.dto.YxWechatLiveQueryCriteria;
|
||||
import co.yixiang.modules.mp.vo.WechatLiveVo;
|
||||
import co.yixiang.modules.mp.domain.YxWechatLive;
|
||||
import co.yixiang.modules.product.vo.YxStoreProductQueryVo;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
@ -67,4 +68,14 @@ public interface YxWechatLiveService extends BaseService<YxWechatLive>{
|
||||
* @return
|
||||
*/
|
||||
List<WxMaLiveResult.LiveReplay> getLiveReplay(Integer roomId);
|
||||
|
||||
|
||||
/**
|
||||
* 商品列表
|
||||
* @param page 页码
|
||||
* @param limit 条数
|
||||
* @param order ProductEnum
|
||||
* @return List
|
||||
*/
|
||||
List<YxWechatLiveDto> getList(int page, int limit, int order);
|
||||
}
|
||||
|
@ -93,5 +93,7 @@ public class YxWechatLiveDto implements Serializable {
|
||||
*/
|
||||
|
||||
private String productId;
|
||||
|
||||
@ApiModelProperty(value = "商品信息")
|
||||
private List<YxWechatLiveGoodsDto> product;
|
||||
}
|
||||
|
@ -8,6 +8,8 @@
|
||||
*/
|
||||
package co.yixiang.modules.mp.service.dto;
|
||||
|
||||
import co.yixiang.annotation.Query;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
@ -16,4 +18,7 @@ import lombok.Data;
|
||||
*/
|
||||
@Data
|
||||
public class YxWechatLiveQueryCriteria{
|
||||
@ApiModelProperty(value = "直播间状态 101:直播中,102:未开始,103 已结束,104 禁播,105:暂停,106:异常,107:已过期")
|
||||
@Query
|
||||
private Integer liveStatus;
|
||||
}
|
||||
|
@ -16,6 +16,7 @@ import cn.hutool.json.JSONUtil;
|
||||
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.exception.BadRequestException;
|
||||
import co.yixiang.modules.mp.domain.YxWechatLiveGoods;
|
||||
import co.yixiang.modules.mp.service.YxWechatLiveGoodsService;
|
||||
@ -27,10 +28,15 @@ import co.yixiang.modules.mp.service.mapper.YxWechatLiveMapper;
|
||||
import co.yixiang.modules.mp.vo.WechatLiveVo;
|
||||
import co.yixiang.modules.mp.domain.YxWechatLive;
|
||||
import co.yixiang.modules.mp.config.WxMaConfiguration;
|
||||
import co.yixiang.modules.product.domain.YxStoreProduct;
|
||||
import co.yixiang.modules.product.vo.YxStoreProductQueryVo;
|
||||
import co.yixiang.utils.FileUtil;
|
||||
import co.yixiang.utils.OrderUtil;
|
||||
import co.yixiang.utils.StringUtils;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.github.pagehelper.PageHelper;
|
||||
import com.github.pagehelper.PageInfo;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
@ -66,9 +72,12 @@ public class YxWechatLiveServiceImpl extends BaseServiceImpl<YxWechatLiveMapper,
|
||||
private String uploadDirStr;
|
||||
private final YxWechatLiveGoodsService wechatLiveGoodsService;
|
||||
|
||||
public YxWechatLiveServiceImpl(IGenerator generator, YxWechatLiveGoodsService wechatLiveGoodsService) {
|
||||
private final YxWechatLiveMapper wechatLiveMapper;
|
||||
|
||||
public YxWechatLiveServiceImpl(IGenerator generator, YxWechatLiveGoodsService wechatLiveGoodsService, YxWechatLiveMapper wechatLiveMapper) {
|
||||
this.generator = generator;
|
||||
this.wechatLiveGoodsService = wechatLiveGoodsService;
|
||||
this.wechatLiveMapper = wechatLiveMapper;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -206,4 +215,28 @@ public class YxWechatLiveServiceImpl extends BaseServiceImpl<YxWechatLiveMapper,
|
||||
log.info( "wxMpMaterialUploadResult : {}", JSONUtil.toJsonStr( wxMediaUploadResult ) );
|
||||
return wxMediaUploadResult;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 直播间列表
|
||||
* @param page 页码
|
||||
* @param limit 条数
|
||||
* @param order ProductEnum
|
||||
* @return List
|
||||
*/
|
||||
@Override
|
||||
public List<YxWechatLiveDto> getList(int page, int limit, int order) {
|
||||
//todo 添加状态判断
|
||||
QueryWrapper<YxWechatLive> wrapper = new QueryWrapper<>();
|
||||
wrapper.lambda()
|
||||
.orderByDesc(YxWechatLive::getStartTime);
|
||||
|
||||
|
||||
Page<YxWechatLive> pageModel = new Page<>(page, limit);
|
||||
|
||||
IPage<YxWechatLive> pageList = wechatLiveMapper.selectPage(pageModel,wrapper);
|
||||
|
||||
|
||||
return generator.convert(pageList.getRecords(),YxWechatLiveDto.class);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user