ソースを参照

设置平台规格价格,下架店铺小于最低价格的同规格

zoujiajian 2 年 前
コミット
36c30526a8
19 ファイル変更275 行追加14 行削除
  1. 13 0
      netflix-dao/src/main/java/com/cyksj/mapper/shop/YhShopGoodsSkuMapper.java
  2. 4 0
      netflix-dao/src/main/java/com/cyksj/mapper/shop/YhShopMapper.java
  3. 19 0
      netflix-dao/src/main/java/com/cyksj/mapper/shop/YhShopSkuSysTakeDownRecordMapper.java
  4. 18 0
      netflix-dao/src/main/java/com/cyksj/model/dto/YhShopSkuDownInfo.java
  5. 1 1
      netflix-dao/src/main/java/com/cyksj/model/entity/OrderDonSubsidyRelate.java
  6. 36 0
      netflix-dao/src/main/java/com/cyksj/model/entity/YhShopSkuSysTakeDownRecord.java
  7. 7 1
      netflix-dao/src/main/java/com/cyksj/model/views/YhShopGoodsFrontCategoryView.java
  8. 11 0
      netflix-dao/src/main/resources/mapper/YhShopMapper.xml
  9. 14 0
      netflix-dao/src/main/resources/mapper/YhShopSkuSysTakeDownRecordMapper.xml
  10. 3 0
      netflix-service/src/main/java/com/cyksj/service/mange/CmsGoodsDonSkuService.java
  11. 2 0
      netflix-service/src/main/java/com/cyksj/service/mange/RefreshCacheService.java
  12. 29 0
      netflix-service/src/main/java/com/cyksj/service/mange/goods/CmsGoodsDonSkuServiceImpl.java
  13. 10 1
      netflix-service/src/main/java/com/cyksj/service/mange/impl/RefreshCacheServiceImpl.java
  14. 4 0
      netflix-service/src/main/java/com/cyksj/service/shop/YhShopGoodsSkuService.java
  15. 24 0
      netflix-service/src/main/java/com/cyksj/service/shop/impl/YhShopGoodsSkuServiceImpl.java
  16. 7 0
      netflix-web/src/main/java/com/cyksj/web/controller/goods/GoodsDonController.java
  17. 11 0
      netflix-web/src/main/java/com/cyksj/web/controller/manage/goods/CmsGoodsDonSkuController.java
  18. 23 0
      netflix-web/src/main/java/com/cyksj/web/controller/manage/goods/shop/CmsYhShopGoodsController.java
  19. 39 11
      netflix-web/src/main/java/com/cyksj/web/controller/manage/goods/shop/YhShopGoodsController.java

+ 13 - 0
netflix-dao/src/main/java/com/cyksj/mapper/shop/YhShopGoodsSkuMapper.java

@@ -5,6 +5,10 @@ import com.cyksj.model.entity.GoodsDonSku;
 import com.cyksj.model.entity.YhShopGoodsSku;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
+import org.apache.ibatis.annotations.Update;
+
+import java.math.BigDecimal;
+import java.util.List;
 
 /**
  * @author zwhui
@@ -15,4 +19,13 @@ public interface YhShopGoodsSkuMapper extends BaseMapper<YhShopGoodsSku> {
 	@Select("select sku.*,ygs.price as yhShopSkuPrice from (select user_id from yh_shop where id = #{yhsId} limit 1) ys inner join yh_shop_goods_sku ygs on ygs.user_id = ys.user_id and ygs.sku_id = #{skuId} and ygs.deleted is true and ygs.status is true" +
 			" inner join goods_don_sku sku on sku.id = ygs.sku_id")
 	GoodsDonSku selectGoodsDonSkuBySkuIdAndYhsId(@Param("yhsId") Long yhsId, @Param("skuId") Long skuId);
+
+	@Update("update yh_shop_goods_sku set status = 0 where sku_id = #{skuId} and price < #{minPrice}")
+	Integer setBelowPriceShopSkuDown(@Param("skuId") Long skuId, @Param("minPrice") BigDecimal minPrice);
+
+	@Select("select sku_id,price from yh_shop_goods_sku where yhs_id = #{yhsId} and goods_id = #{goodsId} and deleted is true and status is true order by price limit 1")
+	YhShopGoodsSku selectMinPriceSkuByYhsId(@Param("yhsId") Long yhsId, @Param("goodsId") Long goodsId);
+
+	@Select("select * from yh_shop_goods_sku where sku_id = #{skuId} and price < #{minPrice} and status = 1")
+	List<YhShopGoodsSku> getBelowPriceShopSku(@Param("skuId") Long skuId, @Param("minPrice") BigDecimal minPrice);
 }

+ 4 - 0
netflix-dao/src/main/java/com/cyksj/mapper/shop/YhShopMapper.java

@@ -1,6 +1,7 @@
 package com.cyksj.mapper.shop;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.cyksj.model.dto.YhShopSkuDownInfo;
 import com.cyksj.model.entity.YhShop;
 import com.cyksj.model.entity.YhShopDistributeMoneyApply;
 import com.cyksj.model.views.YhShopDistributeView;
@@ -8,6 +9,7 @@ import org.apache.ibatis.annotations.Param;
 
 import java.math.BigDecimal;
 import java.util.Date;
+import java.util.List;
 import java.util.Map;
 
 /*
@@ -28,4 +30,6 @@ public interface YhShopMapper extends BaseMapper<YhShop> {
 	Map<String, Object> selectYhShopApplyMoney(@Param("startDate") Date startDate, @Param("endDate") Date endDate);
 
 	YhShopDistributeMoneyApply selectRelationBusiness(Long userId);
+
+	List<YhShopSkuDownInfo> getYhShopSkuSysStatusDownInfo(long userId);
 }

+ 19 - 0
netflix-dao/src/main/java/com/cyksj/mapper/shop/YhShopSkuSysTakeDownRecordMapper.java

@@ -0,0 +1,19 @@
+package com.cyksj.mapper.shop;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.cyksj.model.entity.YhShopGoodsSku;
+import com.cyksj.model.entity.YhShopSkuSysTakeDownRecord;
+import org.apache.ibatis.annotations.Param;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * 项目名: yhlxj2
+ * 文件名: YhShopSkuSysTakeDownRecordMapper
+ * 创建者: JavaZou
+ * 创建时间:2024/4/26 14:29
+ */
+public interface YhShopSkuSysTakeDownRecordMapper extends BaseMapper<YhShopSkuSysTakeDownRecord> {
+	void batchInsert(@Param("list") List<YhShopGoodsSku> yhShopGoodsSkus, @Param("sysPrice") BigDecimal sysPrice);
+}

+ 18 - 0
netflix-dao/src/main/java/com/cyksj/model/dto/YhShopSkuDownInfo.java

@@ -0,0 +1,18 @@
+package com.cyksj.model.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 项目名: yhlxj2
+ * 文件名: YhShopSkuDownInfo
+ * 创建者: JavaZou
+ * 创建时间:2024/4/26 18:19
+ */
+@Getter
+@Setter
+public class YhShopSkuDownInfo {
+	private String title;
+
+	private String specVal;
+}

+ 1 - 1
netflix-dao/src/main/java/com/cyksj/model/entity/OrderDonSubsidyRelate.java

@@ -11,7 +11,7 @@ import lombok.Setter;
  */
 @Getter
 @Setter
-public class OrderDonSubsidyRelate {
+public class OrderDonSubsidyRelate extends BaseEntity{
 	private Long subsidyId;
 
 	private Long orderId;

+ 36 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/YhShopSkuSysTakeDownRecord.java

@@ -0,0 +1,36 @@
+package com.cyksj.model.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+
+/**
+ * 项目名: yhlxj2
+ * 文件名: YhShopSkuSysTakeDownRecord
+ * 创建者: JavaZou
+ * 创建时间:2024/4/26 14:26
+ */
+@Getter
+@Setter
+public class YhShopSkuSysTakeDownRecord extends BaseEntity{
+	private Long yhsId;
+
+	private Long userId;
+
+	private Long goodsId;
+
+	private Long skuId;
+
+	/**
+	 * 店铺规格价格
+	 */
+	private BigDecimal shopPrice;
+
+	/**
+	 * 系统后台设置规格最低价格
+	 */
+	private BigDecimal sysPrice;
+
+	private Boolean deleted;
+}

+ 7 - 1
netflix-dao/src/main/java/com/cyksj/model/views/YhShopGoodsFrontCategoryView.java

@@ -75,7 +75,13 @@ public class YhShopGoodsFrontCategoryView {
 	/**
 	 * 店铺最低规格价格
 	 */
-	@DbField("yg.price")
+	@DbIgnore
+	private Long skuId;
+
+	/**
+	 * 店铺最低规格价格
+	 */
+	@DbIgnore
 	private BigDecimal price;
 
 	/**

+ 11 - 0
netflix-dao/src/main/resources/mapper/YhShopMapper.xml

@@ -61,4 +61,15 @@
         from (select * from yh_shop where user_id = #{userId} limit 1) ys
                  left join cms_user cu on cu.id = ys.business_id
     </select>
+
+    <select id="getYhShopSkuSysStatusDownInfo" resultType="com.cyksj.model.dto.YhShopSkuDownInfo">
+        select any_value(g.title) as title, group_concat(distinct sku.spec_val SEPARATOR '') as specVal
+        from (select goods_id, sku_id
+              from yh_shop_sku_sys_take_down_record
+              where user_id = #{userId}
+                and deleted is true) s
+                 inner join goods_don_sku sku on sku.id = s.sku_id
+                 inner join goods_don g on g.id = s.goods_id
+        group by g.id
+    </select>
 </mapper>

+ 14 - 0
netflix-dao/src/main/resources/mapper/YhShopSkuSysTakeDownRecordMapper.xml

@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.cyksj.mapper.shop.YhShopSkuSysTakeDownRecordMapper">
+
+
+    <insert id="batchInsert">
+        insert into
+        yh_shop_sku_sys_take_down_record(`yhs_id`,`user_id`,`goods_id`,`sku_id`,`shop_price`,`sys_price`,`created_time`,`update_time`)
+        values
+        <foreach collection="list" item="item" separator=",">
+            (#{item.yhsId},#{item.userId},#{item.goodsId},#{item.skuId},#{item.price},#{sysPrice},now(),now())
+        </foreach>
+    </insert>
+</mapper>

+ 3 - 0
netflix-service/src/main/java/com/cyksj/service/mange/CmsGoodsDonSkuService.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import com.cyksj.model.entity.GoodsDiscountPlusPurchaseRelation;
 import com.cyksj.model.entity.GoodsDonSku;
 
+import java.math.BigDecimal;
 import java.util.List;
 
 /**
@@ -14,4 +15,6 @@ public interface CmsGoodsDonSkuService extends IService<GoodsDonSku> {
 	void handleDiscountPurchaseGoods(GoodsDonSku sku, List<GoodsDiscountPlusPurchaseRelation> discountPlusPurchaseGoods);
 
 	void updateMirrorCarUserNum(GoodsDonSku sku);
+
+	void setBelowPriceShopSkuDown(Long skuId, BigDecimal newPrice);
 }

+ 2 - 0
netflix-service/src/main/java/com/cyksj/service/mange/RefreshCacheService.java

@@ -22,4 +22,6 @@ public interface RefreshCacheService {
 	 * 清除补贴商品缓存
 	 */
 	void refreshGoodsSkuSubsidyPageCache();
+
+	void refreshShopUserIdCacheByYshId(Long yhsId);
 }

+ 29 - 0
netflix-service/src/main/java/com/cyksj/service/mange/goods/CmsGoodsDonSkuServiceImpl.java

@@ -8,8 +8,13 @@ import com.cyksj.common.exception.BusinessRuntimeException;
 import com.cyksj.mapper.ChatgptUserMapper;
 import com.cyksj.mapper.GoodsDiscountPlusPurchaseRelationMapper;
 import com.cyksj.mapper.GoodsDonSkuMapper;
+import com.cyksj.mapper.shop.YhShopGoodsRateMapper;
+import com.cyksj.mapper.shop.YhShopGoodsSkuMapper;
+import com.cyksj.mapper.shop.YhShopSkuSysTakeDownRecordMapper;
 import com.cyksj.model.entity.GoodsDiscountPlusPurchaseRelation;
 import com.cyksj.model.entity.GoodsDonSku;
+import com.cyksj.model.entity.YhShopGoodsRate;
+import com.cyksj.model.entity.YhShopGoodsSku;
 import com.cyksj.service.mange.CmsGoodsDonSkuService;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -36,6 +41,12 @@ public class CmsGoodsDonSkuServiceImpl extends ServiceImpl<GoodsDonSkuMapper,Goo
 
 	private final ChatgptUserMapper chatgptUserMapper;
 
+	private final YhShopGoodsRateMapper yhShopGoodsRateMapper;
+
+	private final YhShopGoodsSkuMapper yhShopGoodsSkuMapper;
+
+	private final YhShopSkuSysTakeDownRecordMapper yhShopSkuSysTakeDownRecordMapper;
+
 	@Override
 	public void handleDiscountPurchaseGoods(GoodsDonSku sku, List<GoodsDiscountPlusPurchaseRelation> discountPlusPurchaseGoods) {
 		Long skuId = sku.getId();
@@ -115,6 +126,24 @@ public class CmsGoodsDonSkuServiceImpl extends ServiceImpl<GoodsDonSkuMapper,Goo
 		}
 	}
 
+	@Override
+	public void setBelowPriceShopSkuDown(Long skuId, BigDecimal newPrice) {
+		YhShopGoodsRate yhShopGoodsRate = yhShopGoodsRateMapper.selectOne(Wrappers.lambdaQuery(YhShopGoodsRate.class)
+				.eq(YhShopGoodsRate::getSkuId, skuId)
+				.last("limit 1"));
+		if (yhShopGoodsRate != null) {
+			BigDecimal oriDiscount = BigDecimal.valueOf(100).subtract(BigDecimal.valueOf(yhShopGoodsRate.getRate()));
+			BigDecimal minPrice = newPrice.multiply(oriDiscount.divide(BigDecimal.valueOf(100)));
+			//记录那些店铺规格被下架
+			List<YhShopGoodsSku> yhShopGoodsSkus = yhShopGoodsSkuMapper.getBelowPriceShopSku(skuId, minPrice);
+			if (CollUtil.isNotEmpty(yhShopGoodsSkus)) {
+				yhShopSkuSysTakeDownRecordMapper.batchInsert(yhShopGoodsSkus, minPrice);
+				Integer update = yhShopGoodsSkuMapper.setBelowPriceShopSkuDown(skuId, minPrice);
+				log.info("变更skuId:{}规格价格,店铺数量:{}低于价格:{}下架", skuId, update, minPrice);
+			}
+		}
+	}
+
 	public void checkPurchaseParamsAndSaveOrUpdate(Long goodsId, Long skuId, GoodsDiscountPlusPurchaseRelation discountGoods) {
 		Long disSid = discountGoods.getDisSid();
 		if (disSid == null) {

+ 10 - 1
netflix-service/src/main/java/com/cyksj/service/mange/impl/RefreshCacheServiceImpl.java

@@ -20,14 +20,16 @@ public class RefreshCacheServiceImpl implements RefreshCacheService {
 
 	@Override
 	public void refreshYhHomePageCache() {
-		Set<String> keys = redisService.keys(RedisService.key.YH_HOME_PAGHE_CACHE.getEnvName() + "*");
+		Set<String> keys = redisService.keys(RedisService.key.YH_HOME_PAGHE_CACHE.getName() + "*");
 		redisService.del(keys.toArray(String[]::new));
 	}
 
 	@Override
 	public void refreshYhHomeCategoryPageCache() {
 		Set<String> keys = redisService.keys(RedisService.key.YH_HOME_PAGHE_CACHE.getEnvName() + "category" + "*");
+		Set<String> shoKeys = redisService.keys(RedisService.key.YH_HOME_PAGHE_CACHE_SHOP.getEnvName() + "category" + "*");
 		redisService.del(keys.toArray(String[]::new));
+		redisService.del(shoKeys.toArray(String[]::new));
 	}
 
 	@Override
@@ -35,4 +37,11 @@ public class RefreshCacheServiceImpl implements RefreshCacheService {
 		Set<String> keys = redisService.keys(RedisService.key.YH_HOME_PAGHE_CACHE.getEnvName() + "subsidy" + "*");
 		redisService.del(keys.toArray(String[]::new));
 	}
+
+	@Override
+	public void refreshShopUserIdCacheByYshId(Long yhsId) {
+		String yhShopCacheKey = RedisService.key.YH_HOME_PAGHE_CACHE_SHOP.getEnvName() + yhsId + "*";
+		Set<String> keys = redisService.keys(yhShopCacheKey);
+		redisService.del(keys.toArray(String[]::new));
+	}
 }

+ 4 - 0
netflix-service/src/main/java/com/cyksj/service/shop/YhShopGoodsSkuService.java

@@ -1,6 +1,7 @@
 package com.cyksj.service.shop;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.cyksj.model.dto.YhShopSkuDownInfo;
 import com.cyksj.model.entity.YhShopGoodsSku;
 
 import java.util.List;
@@ -13,4 +14,7 @@ public interface YhShopGoodsSkuService extends IService<YhShopGoodsSku> {
     void saveGoods(List<Long> goodsIds, Long userId);
 
 
+	List<YhShopSkuDownInfo> yhShopSkuSysStatusDownInfo(long userId);
+
+	void deleteSkuDownInfo(long userId);
 }

+ 24 - 0
netflix-service/src/main/java/com/cyksj/service/shop/impl/YhShopGoodsSkuServiceImpl.java

@@ -6,8 +6,11 @@ import com.cyksj.common.exception.BusinessRuntimeException;
 import com.cyksj.mapper.GoodsDonSkuMapper;
 import com.cyksj.mapper.shop.YhShopGoodsSkuMapper;
 import com.cyksj.mapper.shop.YhShopMapper;
+import com.cyksj.mapper.shop.YhShopSkuSysTakeDownRecordMapper;
+import com.cyksj.model.dto.YhShopSkuDownInfo;
 import com.cyksj.model.entity.YhShop;
 import com.cyksj.model.entity.YhShopGoodsSku;
+import com.cyksj.model.entity.YhShopSkuSysTakeDownRecord;
 import com.cyksj.service.shop.YhShopGoodsSkuService;
 import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Service;
@@ -25,6 +28,8 @@ public class YhShopGoodsSkuServiceImpl extends ServiceImpl<YhShopGoodsSkuMapper,
     private final GoodsDonSkuMapper goodsDonSkuMapper;
 
     private final YhShopMapper yhShopMapper;
+
+    private final YhShopSkuSysTakeDownRecordMapper yhShopSkuSysTakeDownRecordMapper;
     @Override
     public void saveGoods(List<Long> goodsIds, Long userId) {
         YhShop yhShop = yhShopMapper.selectOne(Wrappers.lambdaQuery(YhShop.class)
@@ -39,4 +44,23 @@ public class YhShopGoodsSkuServiceImpl extends ServiceImpl<YhShopGoodsSkuMapper,
         });
         this.saveOrUpdateBatch(skuShops);
     }
+
+    @Override
+    public List<YhShopSkuDownInfo> yhShopSkuSysStatusDownInfo(long userId) {
+        List<YhShopSkuDownInfo> infos = yhShopMapper.getYhShopSkuSysStatusDownInfo(userId);
+        return infos;
+    }
+
+    @Override
+    public void deleteSkuDownInfo(long userId) {
+        Integer selectCount = yhShopSkuSysTakeDownRecordMapper.selectCount(Wrappers.lambdaQuery(YhShopSkuSysTakeDownRecord.class)
+                .eq(YhShopSkuSysTakeDownRecord::getUserId, userId)
+                .eq(YhShopSkuSysTakeDownRecord::getDeleted, 1));
+        if (selectCount > 0) {
+            yhShopSkuSysTakeDownRecordMapper.update(null, Wrappers.lambdaUpdate(YhShopSkuSysTakeDownRecord.class)
+                    .set(YhShopSkuSysTakeDownRecord::getDeleted, 0)
+                    .eq(YhShopSkuSysTakeDownRecord::getUserId, userId)
+                    .eq(YhShopSkuSysTakeDownRecord::getDeleted, 1));
+        }
+    }
 }

+ 7 - 0
netflix-web/src/main/java/com/cyksj/web/controller/goods/GoodsDonController.java

@@ -18,6 +18,7 @@ import com.cyksj.enums.GatewayResponse;
 import com.cyksj.mapper.GoodsDonSkuMapper;
 import com.cyksj.mapper.OrderDonMapper;
 import com.cyksj.mapper.RegisterOrderDonMapper;
+import com.cyksj.mapper.shop.YhShopGoodsSkuMapper;
 import com.cyksj.mapper.sys.SysConfigMapper;
 import com.cyksj.model.entity.*;
 import com.cyksj.model.request.ClickRecordReq;
@@ -67,6 +68,8 @@ public class GoodsDonController {
 
     private final GoodsDonSkuMapper goodsDonSkuMapper;
 
+    private final YhShopGoodsSkuMapper yhShopGoodsSkuMapper;
+
     private final RedisService redisService;
 
     private final SysConfigMapper sysConfigMapper;
@@ -1045,6 +1048,10 @@ public class GoodsDonController {
 						.eq(OrderDon::getGoodsId, data.getId()).notIn(OrderDon::getStatus, Constant.noOrderStatus));
 				data.setSold(sold + data.getSold());
 				data.setNotifyMsg(getPayMsgTime(data.getId(), now, 1, yhsId));
+				//重新设置最低价格规格
+				YhShopGoodsSku sku = yhShopGoodsSkuMapper.selectMinPriceSkuByYhsId(yhsId, data.getId());
+				data.setPrice(sku.getPrice());
+				data.setSkuId(sku.getSkuId());
 			});
 			redisService.setNx(categoryGoodsKey, list, RedisService.key.YH_HOME_PAGHE_CACHE.getTimeout() + 5 * 60);
 			value = redisService.get(categoryGoodsKey);

+ 11 - 0
netflix-web/src/main/java/com/cyksj/web/controller/manage/goods/CmsGoodsDonSkuController.java

@@ -107,6 +107,9 @@ public class CmsGoodsDonSkuController {
     @PutMapping(value = "/update")
     @Log(module = "平台管理/编辑规格", businessType = BusinessType.PUT, isSaveRequestData = true)
     public Result<String> skuUpdate(@RequestBody GoodsDonSku sku) throws Exception {
+        Long skuId = sku.getId();
+        GoodsDonSku dbSku = goodsDonSkuService.getById(skuId);
+        Assert.notNull(dbSku, "规格不存在");
         Long goodsId = sku.getGoodsId();
         GoodsDon goods = goodsDonService.getById(goodsId);
         if (goods.getType() == 1) {
@@ -162,6 +165,14 @@ public class CmsGoodsDonSkuController {
         goodsDonSkuService.saveOrUpdate(sku);
         //给平台更新额外属性
         goodsDonService.updateGoodsSkuPrice(sku.getGoodsId(), null);
+        //前后两次价格不同 下架店铺低于这个折扣最低价格
+        BigDecimal oldPrice = dbSku.getPrice();
+        BigDecimal newPrice = sku.getPrice();
+        //规格新价 变高
+        if (newPrice.compareTo(oldPrice) > 0) {
+            //下架店铺低于这个规格价格的品
+            goodsDonSkuService.setBelowPriceShopSkuDown(skuId, newPrice);
+        }
         refreshCacheService.refreshYhHomePageCache();
         return GatewayResponse.SUCCESS.newBuilder().toResult();
     }

+ 23 - 0
netflix-web/src/main/java/com/cyksj/web/controller/manage/goods/shop/CmsYhShopGoodsController.java

@@ -12,6 +12,7 @@ import com.cyksj.common.exception.BusinessRuntimeException;
 import com.cyksj.common.util.StringUtil;
 import com.cyksj.dto.Result;
 import com.cyksj.enums.GatewayResponse;
+import com.cyksj.mapper.GoodsDonSkuMapper;
 import com.cyksj.mapper.UserMapper;
 import com.cyksj.mapper.manage.cms.CmsUserMapper;
 import com.cyksj.mapper.shop.YhShopMapper;
@@ -21,8 +22,10 @@ import com.cyksj.model.request.GoodsDonShopRateReq;
 import com.cyksj.model.request.YhShopUserPlatDistributeRateReq;
 import com.cyksj.model.request.YhShopVerifyReq;
 import com.cyksj.model.views.*;
+import com.cyksj.service.mange.CmsGoodsDonSkuService;
 import com.cyksj.service.mange.CmsYhShopCommonService;
 import com.cyksj.service.mange.CmsYhShopGoodsRateService;
+import com.cyksj.service.mange.RefreshCacheService;
 import com.cyksj.service.mange.business.UserBusinessRateService;
 import com.cyksj.service.mange.statistics.StatisticsDataService;
 import com.ejlchina.searcher.BeanSearcher;
@@ -74,6 +77,12 @@ public class CmsYhShopGoodsController {
 
     private final StatisticsDataService statisticsDataService;
 
+    private final GoodsDonSkuMapper skuMapper;
+
+    private final CmsGoodsDonSkuService goodsDonSkuService;
+
+    private final RefreshCacheService refreshCacheService;
+
 
     /**
      * 获取店铺平台价格
@@ -110,7 +119,12 @@ public class CmsYhShopGoodsController {
                 one.setRate(e.getRate());
             }
             yhShopGoodsRateService.saveOrUpdate(one);
+
+            GoodsDonSku sku = skuMapper.selectById(one.getSkuId());
+            //下架店铺低于这个规格价格的品
+            goodsDonSkuService.setBelowPriceShopSkuDown(e.getSkuId(), sku.getPrice());
         });
+        refreshCacheService.refreshYhHomePageCache();
         return GatewayResponse.SUCCESS.newBuilder().toResult();
     }
 
@@ -118,6 +132,7 @@ public class CmsYhShopGoodsController {
      * 一键设置 店铺平台通用浮动比例
      */
     @PutMapping("/oneKey/set/goods/rate")
+    @Transactional(rollbackFor = Throwable.class)
     public Result<Void> setShopGoodsGeneralRate(@RequestBody GoodsDonShopRateReq req) {
         Integer rate = Optional.ofNullable(req.getRate()).orElse(0);
         if (rate < 0 && rate > 100) {
@@ -130,7 +145,15 @@ public class CmsYhShopGoodsController {
                 data.setRate(rate);
             });
             yhShopGoodsRateService.saveOrUpdateBatch(yhShopGoodsRates);
+
+            List<GoodsDonSku> goodsDonSkus = goodsDonSkuService.list(Wrappers.lambdaQuery(GoodsDonSku.class)
+                    .eq(GoodsDonSku::getGoodsId, goodsId));
+            goodsDonSkus.forEach(sku -> {
+                //下架店铺低于这个规格价格的品
+                goodsDonSkuService.setBelowPriceShopSkuDown(sku.getId(), sku.getPrice());
+            });
         });
+        refreshCacheService.refreshYhHomePageCache();
         return GatewayResponse.SUCCESS.newBuilder().toResult();
     }
 

+ 39 - 11
netflix-web/src/main/java/com/cyksj/web/controller/manage/goods/shop/YhShopGoodsController.java

@@ -5,12 +5,14 @@ import com.cyksj.common.exception.BusinessRuntimeException;
 import com.cyksj.dto.Result;
 import com.cyksj.enums.GatewayResponse;
 import com.cyksj.mapper.shop.YhShopMapper;
+import com.cyksj.model.dto.YhShopSkuDownInfo;
 import com.cyksj.model.entity.YhShop;
 import com.cyksj.model.entity.YhShopGoodsSku;
 import com.cyksj.model.views.YhShopAvailableGoodsView;
 import com.cyksj.model.views.YhShopGoodsRateView;
 import com.cyksj.model.views.YhShopGoodsView;
 import com.cyksj.redis.RedisService;
+import com.cyksj.service.mange.RefreshCacheService;
 import com.cyksj.service.shop.YhShopGoodsSkuService;
 import com.cyksj.web.util.StpYhShopManageUser;
 import com.ejlchina.searcher.BeanSearcher;
@@ -22,7 +24,6 @@ import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
 import java.util.List;
-import java.util.Set;
 
 /*
  *项目名: yhlxj
@@ -45,6 +46,8 @@ public class YhShopGoodsController {
 
 	private final HttpServletRequest request;
 
+	private final RefreshCacheService refreshCacheService;
+
 	/**
 	 * 新增平台
 	 */
@@ -72,9 +75,7 @@ public class YhShopGoodsController {
 			sku.setYhsId(yhShop.getId());
 		});
 		yhShopGoodsSkuService.saveOrUpdateBatch(goodsSkus);
-		String yhShopCacheKey = RedisService.key.YH_HOME_PAGHE_CACHE_SHOP.getEnvName() + yhShop.getId() + "*";
-		Set<String> keys = redisService.keys(yhShopCacheKey);
-		redisService.del(keys.toArray(String[]::new));
+		refreshCacheService.refreshShopUserIdCacheByYshId(yhShop.getId());
 		return GatewayResponse.SUCCESS.newBuilder().toResult();
 	}
 
@@ -82,14 +83,22 @@ public class YhShopGoodsController {
 	 * 上下架
 	 */
 	@PutMapping("/put/goodsStatus/{goodsId}")
-	public Result<Void> updGoodsStatus(@PathVariable Long goodsId, Boolean status){
+	public Result<Void> updGoodsStatus(@PathVariable Long goodsId, Boolean status) {
 		long userId = StpYhShopManageUser.getLoginIdAsLong();
 		YhShop yhShop = yhShopMapper.selectOne(Wrappers.lambdaQuery(YhShop.class)
 				.eq(YhShop::getUserId, userId).last("limit 1"));
+		List<YhShopGoodsSku> list = yhShopGoodsSkuService.list(Wrappers.lambdaQuery(YhShopGoodsSku.class)
+				.eq(YhShopGoodsSku::getUserId, userId)
+				.eq(YhShopGoodsSku::getGoodsId, goodsId)
+				.eq(YhShopGoodsSku::getDeleted, true));
+		list.forEach(sku -> {
+			YhShopGoodsRateView.YhShopGoodsSkuRateView yhShopGoodsSkuRateView = beanSearcher.searchFirst(YhShopGoodsRateView.YhShopGoodsSkuRateView.class, MapUtils.builder().field(YhShopGoodsRateView.YhShopGoodsSkuRateView::getSkuId, sku.getSkuId()).build());
+			if (sku.getPrice().compareTo(yhShopGoodsSkuRateView.getMaxPrice()) > 0 || sku.getPrice().compareTo(yhShopGoodsSkuRateView.getMinPrice()) < 0) {
+				throw BusinessRuntimeException.getInstance("价格不能超出区间范围");
+			}
+		});
 		yhShopGoodsSkuService.update(Wrappers.lambdaUpdate(YhShopGoodsSku.class).eq(YhShopGoodsSku::getGoodsId, goodsId).eq(YhShopGoodsSku::getDeleted, true).eq(YhShopGoodsSku::getUserId, userId).set(YhShopGoodsSku::getStatus, status));
-		String yhShopCacheKey = RedisService.key.YH_HOME_PAGHE_CACHE_SHOP.getEnvName() + yhShop.getId() + "*";
-		Set<String> keys = redisService.keys(yhShopCacheKey);
-		redisService.del(keys.toArray(String[]::new));
+		refreshCacheService.refreshShopUserIdCacheByYshId(yhShop.getId());
 		return GatewayResponse.SUCCESS.newBuilder().toResult();
 	}
 
@@ -103,9 +112,7 @@ public class YhShopGoodsController {
 		YhShop yhShop = yhShopMapper.selectOne(Wrappers.lambdaQuery(YhShop.class)
 				.eq(YhShop::getUserId, userId).last("limit 1"));
 		yhShopGoodsSkuService.update(Wrappers.lambdaUpdate(YhShopGoodsSku.class).eq(YhShopGoodsSku::getGoodsId, goodsId).eq(YhShopGoodsSku::getUserId, userId).set(YhShopGoodsSku::getDeleted, false));
-		String yhShopCacheKey = RedisService.key.YH_HOME_PAGHE_CACHE_SHOP.getEnvName() + yhShop.getId() + "*";
-		Set<String> keys = redisService.keys(yhShopCacheKey);
-		redisService.del(keys.toArray(String[]::new));
+		refreshCacheService.refreshShopUserIdCacheByYshId(yhShop.getId());
 		return GatewayResponse.SUCCESS.newBuilder().toResult();
 	}
 
@@ -142,4 +149,25 @@ public class YhShopGoodsController {
 				.field(YhShopGoodsView.YhShopGoodsSkuView::getGoodsId, goodsId).build());
 		return GatewayResponse.SUCCESS.newBuilder().toResult(views);
 	}
+
+	/**
+	 * 小店规格被下架提示
+	 * @return
+	 */
+	@GetMapping("/get/sku/down/info")
+	public Result<List<YhShopSkuDownInfo>> yhShopSkuSysStatusDownInfo() {
+		long userId = StpYhShopManageUser.getLoginIdAsLong();
+		List<YhShopSkuDownInfo> infos = yhShopGoodsSkuService.yhShopSkuSysStatusDownInfo(userId);
+		return GatewayResponse.SUCCESS.newBuilder().toResult(infos);
+	}
+
+	/**
+	 * 删除提示
+	 */
+	@DeleteMapping("/delete/sku/down/info")
+	public Result<String> deleteSkuDownInfo() {
+		long userId = StpYhShopManageUser.getLoginIdAsLong();
+		yhShopGoodsSkuService.deleteSkuDownInfo(userId);
+		return GatewayResponse.SUCCESS.newBuilder().toResult();
+	}
 }