guomengjiao 1 месяц назад
Родитель
Сommit
4dcb0984c1

+ 13 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/shop/marketing/seckill/SeckillActivityController.java

@@ -116,4 +116,17 @@ public class SeckillActivityController extends BaseController {
         return toAjax(iSeckillActivityService.deleteWithValidByIds(Arrays.asList(ids), true) ? 1 : 0);
     }
 
+    /**
+     * 提交废弃
+     */
+    @ApiOperation("提交废弃")
+    @SaCheckPermission("seckill:seckillActivity:discard")
+    @Log(title = "秒杀活动", businessType = BusinessType.UPDATE)
+    @PostMapping("/discard/{id}")
+    public R<Void> discard(@ApiParam("主键串")
+                                    @NotNull(message = "主键不能为空")
+                                    @PathVariable Long id) {
+        return toAjax(iSeckillActivityService.discard(id) ? 1 : 0);
+    }
+
 }

+ 53 - 0
ruoyi-shop/src/main/java/com/ruoyi/shop/marketing/seckill/domain/bo/SeckillActivityBo.java

@@ -1,21 +1,28 @@
 package com.ruoyi.shop.marketing.seckill.domain.bo;
 
+import cn.hutool.json.JSONUtil;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.core.type.TypeReference;
 import com.ruoyi.common.core.domain.BaseEntity;
 import com.ruoyi.common.core.validate.AddGroup;
 import com.ruoyi.common.core.validate.EditGroup;
+import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.common.filepathsplicing.FilePathValue;
+import com.ruoyi.common.utils.ClassConvertUtils;
 import com.ruoyi.shop.enums.ActiveState;
 import com.ruoyi.shop.enums.CycleMode;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
+import org.apache.commons.lang3.StringUtils;
 import org.hibernate.validator.constraints.Length;
 import org.springframework.format.annotation.DateTimeFormat;
 
 import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotNull;
+import java.io.IOException;
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 
@@ -145,4 +152,50 @@ public class SeckillActivityBo extends BaseEntity {
      */
     @ApiModelProperty(value = "周几", required = true)
     private List<Integer> weekList;
+
+    /**
+     * 把字符串映射成对象
+     */
+    public void setWeeks(String weeks) {
+        this.weeks = weeks;
+        if (StringUtils.isEmpty(this.weeks)) {
+            setWeekList(new ArrayList<>());
+        } else {
+            try {
+                setWeekList(ClassConvertUtils.stringToClassSnake(weeks, new TypeReference<List<Integer>>() {
+                }));
+            } catch (IOException e) {
+                throw new ServiceException("字符串无法转List");
+            }
+
+        }
+    }
+
+    /**
+     * 把对象映射为字符串
+     */
+    public void setWeekList(List<Integer> weekList) {
+        if (CycleMode.EVERY_WEEK.equals(this.cycleMode)) {
+            this.weekList = weekList;
+            if (weekList.size() == 0) {
+                this.weeks = "";
+            } else {
+                this.weeks = JSONUtil.toJsonStr(this.weekList);
+            }
+        }
+    }
+
+    public List<Integer> getWeekList() {
+        if (StringUtils.isNotBlank(this.weeks)) {
+            try {
+                this.weekList = ClassConvertUtils.stringToClassSnake(this.weeks, new TypeReference<List<Integer>>() {
+                });
+            } catch (IOException e) {
+                throw new ServiceException("字符串无法转List");
+            }
+        }
+
+        return this.weekList;
+
+    }
 }

+ 21 - 0
ruoyi-shop/src/main/java/com/ruoyi/shop/marketing/seckill/domain/vo/SeckillActivityVo.java

@@ -4,7 +4,10 @@ import cn.hutool.extra.spring.SpringUtil;
 import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
 import com.alibaba.excel.annotation.ExcelProperty;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.common.filepathsplicing.FilePathValue;
+import com.ruoyi.common.utils.ClassConvertUtils;
 import com.ruoyi.shop.enums.ActiveState;
 import com.ruoyi.shop.enums.CycleMode;
 import com.ruoyi.shop.marketing.seckill.service.ISeckillActivityTimeItemService;
@@ -14,6 +17,7 @@ import lombok.Data;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.format.annotation.DateTimeFormat;
 
+import java.io.IOException;
 import java.util.Date;
 import java.util.List;
 
@@ -191,4 +195,21 @@ public class SeckillActivityVo {
         }
         return timeItemList;
     }
+
+    @ApiModelProperty(value = "周几", required = true)
+    private List<Integer> weekList;
+
+    public List<Integer> getWeekList() {
+        if (StringUtils.isNotBlank(this.weeks)) {
+            try {
+                this.weekList = ClassConvertUtils.stringToClassSnake(this.weeks, new TypeReference<List<Integer>>() {
+                });
+            } catch (IOException e) {
+                throw new ServiceException("字符串无法转List");
+            }
+        }
+
+        return this.weekList;
+
+    }
 }

+ 2 - 0
ruoyi-shop/src/main/java/com/ruoyi/shop/marketing/seckill/service/ISeckillActivityService.java

@@ -75,4 +75,6 @@ public interface ISeckillActivityService {
     Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
 
     void getByBusinessIdAndId(Long businessId, Long seckillId, Boolean tw);
+
+    Boolean discard(Long id);
 }

+ 7 - 1
ruoyi-shop/src/main/java/com/ruoyi/shop/marketing/seckill/service/impl/SeckillActivityProductServiceImpl.java

@@ -31,6 +31,7 @@ import com.ruoyi.shop.product.domain.Product;
 import com.ruoyi.shop.product.domain.bo.ProductSkuSetBo;
 import com.ruoyi.shop.product.service.IProductService;
 import com.ruoyi.shop.product.service.IProductSkuSetService;
+import com.ruoyi.shop.product.service.IProductSkuSetStockService;
 import lombok.RequiredArgsConstructor;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.context.annotation.Lazy;
@@ -64,6 +65,10 @@ public class SeckillActivityProductServiceImpl implements ISeckillActivityProduc
     @Lazy
     @Resource
     private IProductSkuSetService productSkuSetService;
+    @Lazy
+    @Resource
+    private IProductSkuSetStockService productSkuSetStockService;
+
 
     /**
      * 查询秒杀活动商品分页
@@ -281,7 +286,8 @@ public class SeckillActivityProductServiceImpl implements ISeckillActivityProduc
             }
             //1、删除秒杀活动商品
             baseMapper.deleteById(id);
-            //2、TODO 删除秒杀活动商品sku
+            //2、还库存到普通商品
+            productSkuSetStockService.returnActivityStock(seckillActivityProduct);
             //删除秒杀的信号量
             RedisUtils.deleteObject(getSemaphoreKey(seckillActivityProduct.getSeckillId(), seckillActivityProduct.getId(), seckillActivityProduct.getProductId()));
         }

+ 1 - 0
ruoyi-shop/src/main/java/com/ruoyi/shop/marketing/seckill/service/impl/SeckillTimeConfigServiceImpl.java

@@ -67,6 +67,7 @@ public class SeckillTimeConfigServiceImpl implements ISeckillTimeConfigService {
         LambdaQueryWrapper<SeckillTimeConfig> lqw = Wrappers.lambdaQuery();
         lqw.eq(StringUtils.isNotBlank(bo.getStartHour()), SeckillTimeConfig::getStartHour, bo.getStartHour());
         lqw.eq(StringUtils.isNotBlank(bo.getEndHour()), SeckillTimeConfig::getEndHour, bo.getEndHour());
+        lqw.orderByAsc(SeckillTimeConfig::getStartHour);
         return lqw;
     }
 

+ 1 - 0
ruoyi-shop/src/main/java/com/ruoyi/shop/product/service/IProductSkuSetService.java

@@ -144,4 +144,5 @@ public interface IProductSkuSetService {
 
 
     void batchSaveBySeckill(SeckillActivityProduct add, Product product, List<ProductSkuSetBo> productSkuSetList);
+
 }

+ 6 - 4
ruoyi-shop/src/main/java/com/ruoyi/shop/product/service/IProductSkuSetStockService.java

@@ -1,12 +1,12 @@
 package com.ruoyi.shop.product.service;
 
+import com.ruoyi.common.core.domain.PageQuery;
+import com.ruoyi.common.core.page.TableDataInfo;
 import com.ruoyi.common.enums.order.MarketingType;
+import com.ruoyi.shop.marketing.seckill.domain.SeckillActivityProduct;
 import com.ruoyi.shop.product.domain.ProductSkuSetStock;
-import com.ruoyi.shop.product.domain.bo.ProductStockFlowWaterBo;
-import com.ruoyi.shop.product.domain.vo.ProductSkuSetStockVo;
 import com.ruoyi.shop.product.domain.bo.ProductSkuSetStockBo;
-import com.ruoyi.common.core.page.TableDataInfo;
-import com.ruoyi.common.core.domain.PageQuery;
+import com.ruoyi.shop.product.domain.vo.ProductSkuSetStockVo;
 
 import java.util.Collection;
 import java.util.List;
@@ -109,4 +109,6 @@ public interface IProductSkuSetStockService {
      * @return 商品规格sku集的库存集合
      */
     TableDataInfo<ProductSkuSetStockVo> queryCusPageList(ProductSkuSetStockBo bo, PageQuery pageQuery);
+
+    void returnActivityStock(SeckillActivityProduct seckillActivityProduct);
 }

+ 20 - 0
ruoyi-shop/src/main/java/com/ruoyi/shop/product/service/impl/ProductSkuSetStockServiceImpl.java

@@ -1,6 +1,7 @@
 package com.ruoyi.shop.product.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -12,6 +13,7 @@ import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.common.utils.BeanCopyUtils;
 import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.shop.enums.StockFlowWater;
+import com.ruoyi.shop.marketing.seckill.domain.SeckillActivityProduct;
 import com.ruoyi.shop.product.domain.ProductSkuSetStock;
 import com.ruoyi.shop.product.domain.bo.ProductSkuSetStockBo;
 import com.ruoyi.shop.product.domain.bo.ProductStockFlowWaterBo;
@@ -335,4 +337,22 @@ public class ProductSkuSetStockServiceImpl implements IProductSkuSetStockService
         return TableDataInfo.build(result);
     }
 
+    @Override
+    public void returnActivityStock(SeckillActivityProduct seckillActivityProduct) {
+        List<ProductSkuSetStock> productSkuSetStocks = baseMapper.selectList(new LambdaQueryWrapper<ProductSkuSetStock>()
+            .eq(ProductSkuSetStock::getActivityId, seckillActivityProduct.getSeckillId())
+            .eq(ProductSkuSetStock::getActivityProductId, seckillActivityProduct.getId())
+            .eq(ProductSkuSetStock::getMarketingType, MarketingType.SECKILL)
+        );
+        if(CollectionUtil.isEmpty(productSkuSetStocks))
+        {
+            return ;
+        }
+        for (ProductSkuSetStock productSkuSetStock : productSkuSetStocks) {
+            ProductSkuSetStockBo productSkuSetStockBo = BeanUtil.toBean(productSkuSetStock, ProductSkuSetStockBo.class);
+            productSkuSetStockBo.setStock(0);
+            this.updateActivityStockByBo(productSkuSetStockBo);
+        }
+    }
+
 }

+ 1 - 1
ruoyi-shop/src/main/resources/mapper/marketing/seckill/SeckillActivityMapper.xml

@@ -30,7 +30,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         SELECT sa.*,(SELECT COUNT(sap.id) FROM `tb_seckill_activity_product` sap WHERE sa.id = sap.seckill_id) productNum
         FROM `tb_seckill_activity` sa
         <where>
-            sa.business_id = #{bo.businessId}
+            sa.del_flag = 0 and sa.business_id = #{bo.businessId}
             <if test="bo.name != null and bo.name != ''">
                 AND sa.`name` LIKE CONCAT('%',#{bo.name},'%')
             </if>

+ 4 - 4
ruoyi-shop/src/main/resources/mapper/marketing/seckill/SeckillActivityProductMapper.xml

@@ -38,7 +38,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         LEFT OUTER JOIN tb_product tp ON sap.product_id=tp.product_id
         LEFT OUTER JOIN tb_seckill_activity sa ON sap.seckill_id=sa.id
         <where>
-            sa.business_id = #{bo.businessId}
+            sap.del_flag = 0 and sa.business_id = #{bo.businessId}
             <if test="bo.seckillId!=null">
                 AND sap.seckill_id = #{bo.seckillId}
             </if>
@@ -67,7 +67,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         LEFT OUTER JOIN tb_product tp ON sap.product_id=tp.product_id
         LEFT OUTER JOIN tb_seckill_activity sa ON sap.seckill_id=sa.id
         LEFT OUTER JOIN tb_seckill_activity_time_item sati ON sati.seckill_id=sap.seckill_id
-        WHERE sap.residue_stock_total > 0 and sa.discard = 0
+        WHERE sap.del_flag = 0 and sap.residue_stock_total > 0 and sa.discard = 0
         <if test="businessId != null and businessId != ''">
             AND sa.business_id = #{businessId}
         </if>
@@ -82,7 +82,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         FROM tb_seckill_activity_product sap
                  LEFT OUTER JOIN tb_seckill_activity sa ON sap.seckill_id=sa.id
                  LEFT OUTER JOIN tb_product tp ON sap.product_id=tp.product_id
-        WHERE sa.business_id = #{businessId} and sa.discard = 0
+        WHERE sap.del_flag = 0 and sa.business_id = #{businessId} and sa.discard = 0
           AND sap.seckill_id=(SELECT seckill_id  FROM  tb_seckill_activity_time_item where start_time>#{startTime}   ORDER BY start_time limit 1)
         ORDER BY sap.sort,sap.update_time ASC
     </select>
@@ -94,7 +94,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         FROM tb_seckill_activity_product sap
         LEFT OUTER JOIN tb_seckill_activity sa ON sap.seckill_id=sa.id
         LEFT OUTER JOIN tb_product tp ON sap.product_id=tp.product_id
-        WHERE sa.discard = 0 and sap.seckill_id in (
+        WHERE sap.del_flag = 0 and sa.discard = 0 and sap.seckill_id in (
             SELECT DISTINCT(seckill_id) FROM `tb_seckill_activity_time_item`
                 WHERE NOW() &gt;= start_time AND NOW() &lt; end_time
             <if test="bo.businessId != null">

+ 2 - 2
ruoyi-shop/src/main/resources/mapper/product/ProductMapper.xml

@@ -240,11 +240,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     <select id="forActivityList" resultType="com.ruoyi.shop.product.domain.vo.ProductVo">
         select p.*
         <if test="bo.seckillId!=null">
-            ,exists(select sap.id from tb_seckill_activity_product as sap where sap.product_id=p.product_id and
+            ,exists(select sap.id from tb_seckill_activity_product as sap where sap.del_flag = 0 and sap.product_id=p.product_id and
             sap.seckill_id = #{bo.seckillId} ) as isJoin
         </if>
         <if test="bo.groupBuyId!=null">
-            ,exists(select gbag.id from tb_group_buy_activity_goods as gbag where gbag.product_id=p.product_id and
+            ,exists(select gbag.id from tb_group_buy_activity_goods as gbag where gbag.del_flag = 0 and gbag.product_id=p.product_id and
             gbag.group_buy_id = #{bo.groupBuyId} ) as isJoin
         </if>
         from `tb_product` as p