Bläddra i källkod

商品增加“仅医美机构可见”的可见度

chao 3 år sedan
förälder
incheckning
ccfef38af5

+ 6 - 0
backup.sql

@@ -17,3 +17,9 @@ CREATE TABLE `cm_svip_product_adsimage` (
     COMMENT = '超级会员优惠商品宣传图';
 INSERT INTO `cm_svip_product_adsimage` (`id`) VALUES ('1');
 -- =================================== 2021年9月 超级会员S_VIP end =====================================
+
+-- 商品增加“仅医美机构可见”的可见度
+ALTER TABLE product
+    MODIFY COLUMN priceFlag char(2) default '0' null comment '是否公开机构价:0公开价格,1不公开价格,2仅对会员机构公开,3仅对医美机构公开',
+    MODIFY COLUMN visibility char(2) default '3' not null comment '商品可见度:3:所有人可见,2:普通机构可见,1:会员机构可见,4:仅医美机构可见' AFTER priceFlag;
+

+ 21 - 12
src/main/java/com/caimei365/commodity/components/SearchOpenService.java

@@ -237,15 +237,18 @@ public class SearchOpenService {
         searchParams.setQuery(queryStr);
 
         String thisFilter = StringUtils.isNotEmpty(filter) ? (filter + " AND ") : "";
-        // identity: 0个人,1协销,2会员机构,3供应商,4普通机构
+        // identity: 0个人,1协销,2会员机构,3供应商,4普通机构,5医美机构
         // p_valid:0逻辑删除 1待审核 2已上架 3已下架 8审核未通过 9已隐身 10已冻结
-        // p_visibility:3:所有人可见,2:普通机构可见,1:会员机构可见
+        // p_visibility:3:所有人可见,2:普通机构可见,1:会员机构可见,4:仅医美机构可见
         if (identity == 1) {
             // 协销 | 综合供应商
             thisFilter += "(p_valid=2 OR p_valid=3 OR p_valid=9) AND p_type=1";
+        } else if (identity == 5) {
+            // 医美机构
+            thisFilter += "p_valid=2 AND p_type=1";
         } else if (identity == 2) {
             // 会员机构
-            thisFilter += "p_valid=2 AND p_type=1";
+            thisFilter += "(p_visibility=1 OR p_visibility=2 OR p_visibility=3) ANDp_valid=2 AND p_type=1";
         } else if (identity == 4) {
             // 普通机构
             thisFilter += "(p_visibility=2 OR p_visibility=3) AND p_valid=2 AND p_type=1";
@@ -254,7 +257,6 @@ public class SearchOpenService {
             thisFilter += "p_visibility=3 AND p_valid=2 AND p_type=1";
         }
         searchParams.setFilter(thisFilter);
-
         // 设置聚合打散子句
         Distinct dist = new Distinct();
         // 设置dist_key
@@ -336,16 +338,19 @@ public class SearchOpenService {
         // 设置查询子句,若需多个索引组合查询,需要setQuery处合并,否则若设置多个setQuery后面的会替换前面查询
         searchParams.setQuery(queryStr);
 
-        // identity: 0个人,1协销,2会员机构,3供应商,4普通机构
-        // p_valid:0逻辑删除 1待审核 2已上架 3已下架 8审核未通过 9已隐身 10已冻结
-        // p_visibility:3:所有人可见,2:普通机构可见,1:会员机构可见
         String thisFilter = "";
+        // identity: 0个人,1协销,2会员机构,3供应商,4普通机构,5医美机构
+        // p_valid:0逻辑删除 1待审核 2已上架 3已下架 8审核未通过 9已隐身 10已冻结
+        // p_visibility:3:所有人可见,2:普通机构可见,1:会员机构可见,4:仅医美机构可见
         if (identity == 1) {
             // 协销 | 综合供应商
             thisFilter += "(p_valid=2 OR p_valid=3 OR p_valid=9) AND p_type=1";
+        } else if (identity == 5) {
+            // 医美机构
+            thisFilter += "p_valid=2 AND p_type=1";
         } else if (identity == 2) {
             // 会员机构
-            thisFilter += "p_valid=2 AND p_type=1";
+            thisFilter += "(p_visibility=1 OR p_visibility=2 OR p_visibility=3) ANDp_valid=2 AND p_type=1";
         } else if (identity == 4) {
             // 普通机构
             thisFilter += "(p_visibility=2 OR p_visibility=3) AND p_valid=2 AND p_type=1";
@@ -464,16 +469,20 @@ public class SearchOpenService {
         SearchParams searchParams = new SearchParams(config);
         // 设置查询子句,若需多个索引组合查询,需要setQuery处合并,否则若设置多个setQuery后面的会替换前面查询
         searchParams.setQuery(queryStr);
-        // identity: 0个人,1协销,2会员机构,3供应商,4普通机构
-        // p_valid:0逻辑删除 1待审核 2已上架 3已下架 8审核未通过 9已隐身 10已冻结
-        // p_visibility:3:所有人可见,2:普通机构可见,1:会员机构可见
+
         String thisFilter = "";
+        // identity: 0个人,1协销,2会员机构,3供应商,4普通机构,5医美机构
+        // p_valid:0逻辑删除 1待审核 2已上架 3已下架 8审核未通过 9已隐身 10已冻结
+        // p_visibility:3:所有人可见,2:普通机构可见,1:会员机构可见,4:仅医美机构可见
         if (identity == 1) {
             // 协销 | 综合供应商
             thisFilter += "(p_valid=2 OR p_valid=3 OR p_valid=9) AND p_type=1";
+        } else if (identity == 5) {
+            // 医美机构
+            thisFilter += "p_valid=2 AND p_type=1";
         } else if (identity == 2) {
             // 会员机构
-            thisFilter += "p_valid=2 AND p_type=1";
+            thisFilter += "(p_visibility=1 OR p_visibility=2 OR p_visibility=3) ANDp_valid=2 AND p_type=1";
         } else if (identity == 4) {
             // 普通机构
             thisFilter += "(p_visibility=2 OR p_visibility=3) AND p_valid=2 AND p_type=1";

+ 1 - 1
src/main/java/com/caimei365/commodity/controller/ProductShopApi.java

@@ -37,7 +37,7 @@ public class ProductShopApi {
     @ApiOperation("供应商-主推商品(旧:/supplier/home/products)")
     @ApiImplicitParams({
         @ApiImplicitParam(required = true, name = "shopId", value = "供应商Id(旧:supplierId)"),
-        @ApiImplicitParam(required = false, name = "identity", value = "用户身份:1协销,2会员机构,3供应商,4普通机构")
+        @ApiImplicitParam(required = false, name = "identity", value = "用户身份:1协销,2会员机构,3供应商,4普通机构,5医美机构")
     })
     @GetMapping("/product/main")
     public ResponseJson<List<ProductListVo>> getSupplierMainProducts(Integer shopId, @RequestParam(value = "identity", defaultValue = "0") Integer identity) {

+ 1 - 1
src/main/java/com/caimei365/commodity/controller/PromotionsApi.java

@@ -70,7 +70,7 @@ public class PromotionsApi {
     @ApiOperation("获取促销活动凑单商品(旧:/product/promotion/products)")
     @ApiImplicitParams({
         @ApiImplicitParam(required = true, name = "promotionsId", value = "促销活动Id"),
-        @ApiImplicitParam(required = false, name = "identity", value = "用户身份: 0个人,1协销,2会员机构,3供应商,4普通机构"),
+        @ApiImplicitParam(required = false, name = "identity", value = "用户身份: 0个人,1协销,2会员机构,3供应商,4普通机构,5医美机构"),
         @ApiImplicitParam(required = false, name = "pageNum", value = "页码"),
         @ApiImplicitParam(required = false, name = "pageSize", value = "每页数量")
     })

+ 5 - 5
src/main/java/com/caimei365/commodity/controller/SearchProductApi.java

@@ -41,7 +41,7 @@ public class SearchProductApi {
             @ApiImplicitParam(required = false, name = "newFlag", value = "查询新品标记,默认0,新品1"),
             @ApiImplicitParam(required = false, name = "promotionFlag", value = "查询促销标记,默认0,促销1"),
             @ApiImplicitParam(required = false, name = "idType", value = "id类型:1一级分类,2二级分类,3三级分类"),
-            @ApiImplicitParam(required = false, name = "identity", value = "用户身份: 0个人,1协销,2会员机构,3供应商,4普通机构")
+            @ApiImplicitParam(required = false, name = "identity", value = "用户身份: 0个人,1协销,2会员机构,3供应商,4普通机构,5医美机构")
     })
     @GetMapping("/brand")
     public ResponseJson<Set<HashMap<String, Object>>> queryBrand(String keyword, Integer id, Integer idType,
@@ -63,7 +63,7 @@ public class SearchProductApi {
     @ApiImplicitParams({
             @ApiImplicitParam(required = false, name = "keyword", value = "搜索关键字"),
             @ApiImplicitParam(required = false, name = "brandIds", value = "品牌id字符串,逗号隔开"),
-            @ApiImplicitParam(required = false, name = "identity", value = "用户身份: 0个人,1协销,2会员机构,3供应商,4普通机构"),
+            @ApiImplicitParam(required = false, name = "identity", value = "用户身份: 0个人,1协销,2会员机构,3供应商,4普通机构,5医美机构"),
             @ApiImplicitParam(required = false, name = "newFlag", value = "查询新品标记,默认0,新品1"),
             @ApiImplicitParam(required = false, name = "promotionFlag", value = "查询促销标记,默认0,促销1"),
             @ApiImplicitParam(required = false, name = "pageNum", value = "页码"),
@@ -95,7 +95,7 @@ public class SearchProductApi {
             @ApiImplicitParam(required = true, name = "id", value = "bigTypeID/smallTypeID/tinyTypeID"),
             @ApiImplicitParam(required = true, name = "idType", value = "id类型:1一级分类,2二级分类,3三级分类"),
             @ApiImplicitParam(required = false, name = "brandIds", value = "品牌id字符串,逗号隔开"),
-            @ApiImplicitParam(required = false, name = "identity", value = "用户身份: 0个人,1协销,2会员机构,3供应商,4普通机构"),
+            @ApiImplicitParam(required = false, name = "identity", value = "用户身份: 0个人,1协销,2会员机构,3供应商,4普通机构,5医美机构"),
             @ApiImplicitParam(required = false, name = "newFlag", value = "查询新品标记,默认0,新品1"),
             @ApiImplicitParam(required = false, name = "promotionFlag", value = "查询促销标记,默认0,促销1"),
             @ApiImplicitParam(required = false, name = "pageNum", value = "页码"),
@@ -125,7 +125,7 @@ public class SearchProductApi {
     @ApiOperation("根据小程序运营分类Id搜索商品")
     @ApiImplicitParams({
             @ApiImplicitParam(required = true, name = "id", value = "运营级分类Id"),
-            @ApiImplicitParam(required = false, name = "identity", value = "用户身份: 0个人,1协销,2会员机构,3供应商,4普通机构"),
+            @ApiImplicitParam(required = false, name = "identity", value = "用户身份: 0个人,1协销,2会员机构,3供应商,4普通机构,5医美机构"),
             @ApiImplicitParam(required = false, name = "pageNum", value = "页码"),
             @ApiImplicitParam(required = false, name = "pageSize", value = "每页数量"),
             @ApiImplicitParam(required = false, name = "sortField", value = "排序字段:价格price,销量sales,人气favorite"),
@@ -152,7 +152,7 @@ public class SearchProductApi {
     @ApiImplicitParams({
             @ApiImplicitParam(required = true, name = "id", value = "供应商Id"),
             @ApiImplicitParam(required = false, name = "keyword", value = "搜索关键字"),
-            @ApiImplicitParam(required = false, name = "identity", value = "用户身份: 0个人,1协销,2会员机构,3供应商,4普通机构"),
+            @ApiImplicitParam(required = false, name = "identity", value = "用户身份: 0个人,1协销,2会员机构,3供应商,4普通机构,5医美机构"),
             @ApiImplicitParam(required = false, name = "pageNum", value = "页码"),
             @ApiImplicitParam(required = false, name = "pageSize", value = "每页数量"),
             @ApiImplicitParam(required = false, name = "sortField", value = "排序字段:价格price,销量sales,人气favorite"),

+ 1 - 1
src/main/java/com/caimei365/commodity/controller/SearchQueryApi.java

@@ -99,7 +99,7 @@ public class SearchQueryApi {
     @ApiOperation("根据关键词搜索供应商")
     @ApiImplicitParams({
         @ApiImplicitParam(required = false, name = "keyword", value = "搜索关键字"),
-        @ApiImplicitParam(required = false, name = "identity", value = "用户身份: 0个人,1协销,2会员机构,3供应商,4普通机构"),
+        @ApiImplicitParam(required = false, name = "identity", value = "用户身份: 0个人,1协销,2会员机构,3供应商,4普通机构,5医美机构"),
         @ApiImplicitParam(required = false, name = "pageNum", value = "页码"),
         @ApiImplicitParam(required = false, name = "pageSize", value = "每页数量")
     })

+ 4 - 0
src/main/java/com/caimei365/commodity/mapper/PriceMapper.java

@@ -61,4 +61,8 @@ public interface PriceMapper {
     void insertProductSales(ProductSalesVo salesVo);
 
     void updateProductSales(ProductSalesVo salesVo);
+    /**
+     * 会员机构类型:1医美,2生美
+     */
+    Integer getClubTypeById(Integer userId);
 }

+ 1 - 1
src/main/java/com/caimei365/commodity/model/vo/SecondDetailVo.java

@@ -142,7 +142,7 @@ public class SecondDetailVo implements Serializable {
      */
     private String contactMobile;
     /**
-     * 商品可见度:3:所有人可见,2:普通机构可见,1:会员机构可见
+     * 商品可见度:3:所有人可见,2:普通机构可见,1:会员机构可见,4:仅医美机构可见
      */
     private Integer visibility;
 

+ 19 - 11
src/main/java/com/caimei365/commodity/service/impl/PageServiceImpl.java

@@ -560,25 +560,33 @@ public class PageServiceImpl implements PageService {
             shop.setBusinessLicense(ImageUtils.getImageURL("shopLogo", shop.getBusinessLicense(), 0, domain));
             product.setShop(shop);
         }
-        // 商品可见度:3:所有人可见,2:普通机构可见,1:会员机构可见
+        // 商品可见度:3:所有人可见,2:普通机构可见,1:会员机构可见,4:仅医美机构可见
         Integer visibility = product.getVisibility();
         if (null != userId && userId > 0) {
             // 用户身份:0个人,1协销,2会员机构,3供应商,4普通机构
             Integer identity = shopMapper.getUserIdentityById(userId);
+            // 会员机构类型:1医美,2生美
+            Integer clubType = 0;
+            if (null != identity && identity == 2) {
+                clubType = priceMapper.getClubTypeById(userId);
+            }
             // 超级会员用户id
-            Integer svipUserId = priceMapper.getSvipUserIdByUserId(userId);
-            // 超级会员
-            boolean pass1 = null != svipUserId;
-            // 协销 | 会员机构 | 综合供应商
-            boolean pass2 = null != identity && (identity == 1 || identity == 2);
+            Integer superVipId = priceMapper.getSvipUserIdByUserId(userId);
+            // 所有人可见
+            boolean pass1 = visibility == 3;
+            // 协销
+            boolean pass2 = null != identity && identity == 1;
+            // 医美机构
+            boolean pass3 = visibility == 4 && (null != clubType && clubType == 1);
+            // 会员机构 | 超级会员
+            boolean pass4 = visibility == 1 && (null != superVipId || (null != identity && identity == 2));
             // 普通机构
-            boolean pass3 = null != identity && (identity == 4 && (visibility == 2 || visibility == 3));
-            // 游客
-            boolean pass4 = visibility == 3;
-            if (!(pass1 || pass2 || pass3 || pass4)) {
+            boolean pass5 = visibility == 2 && (null != identity && (identity == 4 || identity == 2));
+            // 没有权限查看该商品
+            if (!(pass1 || pass2 || pass3 || pass4 || pass5)) {
                 return ResponseJson.success(1, "没有权限查看该商品", new ProductDetailVo());
             }
-        } else if (2 == visibility || 1 == visibility) {
+        } else if (2 == visibility || 1 == visibility || 4 == visibility) {
             return ResponseJson.success(1, "没有权限查看该商品,userId为空", new ProductDetailVo());
         }
         // 商品不处于已删除/待审核/审核未通过的状态

+ 7 - 3
src/main/java/com/caimei365/commodity/service/impl/PromotionsServiceImpl.java

@@ -90,10 +90,14 @@ public class PromotionsServiceImpl implements PromotionsService {
      */
     @Override
     public ResponseJson<PageInfo<ProductListVo>> getPromotionProduct(Integer promotionsId, Integer identity, int pageNum, int pageSize) {
-        // identity: 0个人,1协销,2会员机构,3供应商,4普通机构 ||| visibility:3:所有人可见,2:普通机构可见,1:会员机构可见
+        // identity: 0个人,1协销,2会员机构,3供应商,4普通机构,5医美机构
+        // visibility:3:所有人可见,2:普通机构可见,1:会员机构可见,4:仅医美机构可见
         List<Integer> visibilityList = new ArrayList<>();
-        if (identity == 1 || identity == 2) {
-            // 协销 | 会员机构 | 综合供应商
+        if (identity == 1 || identity == 5) {
+            // 协销 | 医美机构 | 综合供应商
+            visibilityList.addAll(Arrays.asList(1,2,3,4));
+        } else if (identity == 2) {
+            // 会员机构
             visibilityList.addAll(Arrays.asList(1,2,3));
         } else if (identity == 4) {
             // 普通机构

+ 34 - 16
src/main/java/com/caimei365/commodity/service/impl/SecondHandServiceImpl.java

@@ -1,7 +1,6 @@
 package com.caimei365.commodity.service.impl;
 
 import com.caimei365.commodity.components.RedisService;
-import com.caimei365.commodity.mapper.PageMapper;
 import com.caimei365.commodity.mapper.PriceMapper;
 import com.caimei365.commodity.mapper.SecondHandMapper;
 import com.caimei365.commodity.model.ResponseJson;
@@ -44,9 +43,6 @@ public class SecondHandServiceImpl implements SecondHandService {
     private RedisService redisService;
     @Resource
     private PriceMapper priceMapper;
-    @Resource
-    private PageMapper pageMapper;
-
 
     /**
      * 二手商品列表
@@ -65,6 +61,13 @@ public class SecondHandServiceImpl implements SecondHandService {
         Integer userIdentity = 0;
         if (userId != null && userId > 0) {
             userIdentity = priceMapper.getIdentityByUserId(userId);
+            if (null != userIdentity && userIdentity == 2) {
+                // 会员机构类型:1医美,2生美
+                Integer clubType = priceMapper.getClubTypeById(userId);
+                if (null != clubType && clubType == 1){
+                    userIdentity = 5;
+                }
+            }
         }
         PageHelper.startPage(pageNum, pageSize);
         List<SecondListVo> secondList = secondHandMapper.getSeconHandList(userIdentity, secondHandType, instrumentType, name);
@@ -107,20 +110,35 @@ public class SecondHandServiceImpl implements SecondHandService {
      */
     @Override
     public ResponseJson<SecondDetailVo> getSecondHandDetail(Integer userId, Integer productId) {
-        //0游客,2会员机构,4普通机构
-        Integer userIdentity = 0;
-        if (userId != null && userId > 0) {
-            userIdentity = priceMapper.getIdentityByUserId(userId);
-        }
-        // 超级会员标识
-        Integer svipUserId = pageMapper.getSvipUserIdByUserId(userId);
-        boolean svipUserFlag = null != svipUserId;
         SecondDetailVo second = secondHandMapper.getSecondHandDetail(productId);
+        // 商品可见度:3:所有人可见,2:普通机构可见,1:会员机构可见,4:仅医美机构可见
         Integer visibility = second.getVisibility();
-        boolean b = userIdentity == 0 && (visibility == 1 || visibility == 2);
-        boolean a = userIdentity == 4 && visibility == 1 && !svipUserFlag;
-        if (b || a) {
-            return ResponseJson.error("无权限查看", null);
+        if (null != userId && userId > 0) {
+            // 用户身份:0个人,1协销,2会员机构,3供应商,4普通机构
+            Integer identity = priceMapper.getIdentityByUserId(userId);
+            // 会员机构类型:1医美,2生美
+            Integer clubType = 0;
+            if (null != identity && identity == 2) {
+                clubType = priceMapper.getClubTypeById(userId);
+            }
+            // 超级会员用户id
+            Integer superVipId = priceMapper.getSvipUserIdByUserId(userId);
+            // 所有人可见
+            boolean pass1 = visibility == 3;
+            // 协销
+            boolean pass2 = null != identity && identity == 1;
+            // 医美机构
+            boolean pass3 = visibility == 4 && (null != clubType && clubType == 1);
+            // 会员机构 | 超级会员
+            boolean pass4 = visibility == 1 && (null != superVipId || (null != identity && identity == 2));
+            // 普通机构
+            boolean pass5 = visibility == 2 && (null != identity && (identity == 4 || identity == 2));
+            // 没有权限查看该商品
+            if (!(pass1 || pass2 || pass3 || pass4 || pass5)) {
+                return ResponseJson.success(1, "没有权限查看该商品", new SecondDetailVo());
+            }
+        } else if (2 == visibility || 1 == visibility || 4 == visibility) {
+            return ResponseJson.success(1, "没有权限查看该商品,userId为空", new SecondDetailVo());
         }
         // 优化地址信息
         String provinceCityDistrict = second.getProvinceCityDistrict();

+ 9 - 6
src/main/java/com/caimei365/commodity/service/impl/ShopServiceImpl.java

@@ -58,15 +58,18 @@ public class ShopServiceImpl implements ShopService {
         if (shopId == null) {
             return ResponseJson.error("参数异常:缺少供应商Id", null);
         }
-        // identity: 0个人,1协销,2会员机构,3供应商,4普通机构
-        // p_visibility:3:所有人可见,2:普通机构可见,1:会员机构可见
+        // identity: 0个人,1协销,2会员机构,3供应商,4普通机构,5医美机构
+        // visibility:3:所有人可见,2:普通机构可见,1:会员机构可见,4:仅医美机构可见
         List<Integer> visibilityList = new ArrayList<>();
-        if (identity == 1 || identity == 2) {
-            // 协销 | 会员机构 | 综合供应商
-            visibilityList.addAll(Arrays.asList(1, 2, 3));
+        if (identity == 1 || identity == 5) {
+            // 协销 | 医美机构 | 综合供应商
+            visibilityList.addAll(Arrays.asList(1,2,3,4));
+        } else if (identity == 2) {
+            // 会员机构
+            visibilityList.addAll(Arrays.asList(1,2,3));
         } else if (identity == 4) {
             // 普通机构
-            visibilityList.addAll(Arrays.asList(2, 3));
+            visibilityList.addAll(Arrays.asList(2,3));
         } else {
             // 游客|所有人
             visibilityList.add(3);

+ 3 - 0
src/main/resources/mapper/PriceMapper.xml

@@ -137,4 +137,7 @@
             property=#{property}
         WHERE productId = #{productId}
     </update>
+    <select id="getClubTypeById" resultType="java.lang.Integer">
+        SELECT firstClubType FROM club WHERE userID = #{userId}
+    </select>
 </mapper>

+ 4 - 1
src/main/resources/mapper/SearchMapper.xml

@@ -301,9 +301,12 @@
             <when test="identity == 1">
                 and p.validFlag in (2,3,9)
             </when>
-            <when test="identity == 2">
+            <when test="identity == 5">
                 and p.validFlag = 2
             </when>
+            <when test="identity == 2">
+                and p.visibility in (1,2,3) and p.validFlag = 2
+            </when>
             <when test="identity == 4">
                 and p.visibility in (2,3) and p.validFlag = 2
             </when>

+ 3 - 0
src/main/resources/mapper/SecondHandMapper.xml

@@ -73,6 +73,9 @@
         <if test="userIdentity == 4">
             AND p.visibility IN (2,3)
         </if>
+        <if test="userIdentity == 2">
+            AND p.visibility IN (1,2,3)
+        </if>
         order by cshd.onLineDate desc
     </select>
     <select id="getSecondHandDetail" resultType="com.caimei365.commodity.model.vo.SecondDetailVo">