Browse Source

Merge remote-tracking branch 'origin/developerA' into developerA

# Conflicts:
#	src/main/java/com/caimei365/commodity/model/po/ArchivePo.java
#	src/main/java/com/caimei365/commodity/model/vo/ArchiveDetailVo.java
Aslee 3 years ago
parent
commit
4fc465a069

+ 26 - 0
src/main/java/com/caimei365/commodity/controller/ProductPageApi.java

@@ -249,4 +249,30 @@ public class ProductPageApi {
         return pageService.getProductRepair(code);
     }
 
+
+    /**
+     * 商品资料列表
+     */
+    @ApiOperation("商品资料列表")
+    @ApiImplicitParams({
+            @ApiImplicitParam(required = false, name = "keyword", value = "搜索关键词"),
+            @ApiImplicitParam(required = false, name = "productType", value = "商品属性:1产品,2仪器"),
+            @ApiImplicitParam(required = false, name = "pageNum", value = "页码"),
+            @ApiImplicitParam(required = false, name = "pageSize", value = "每页数量")
+    })
+    @GetMapping("/product/archive")
+    public ResponseJson<PaginationVo<ArchiveVo>> getProductArchive(String keyword, Integer productType, Integer pageNum, Integer pageSize) {
+        return pageService.getProductArchive(keyword, productType, pageNum, pageSize);
+    }
+
+    /**
+     * 商品资料详情
+     */
+    @GetMapping("/product/archive/detail")
+    public ResponseJson<ArchiveDetailVo> getArchiveDetail(Integer archiveId, Integer userId) {
+        if (null == archiveId || null == userId) {
+            return ResponseJson.error("参数错误",  null);
+        }
+        return pageService.getArchiveDetail(archiveId, userId);
+    }
 }

+ 75 - 0
src/main/java/com/caimei365/commodity/mapper/PageMapper.java

@@ -1,5 +1,7 @@
 package com.caimei365.commodity.mapper;
 
+import com.caimei365.commodity.model.po.ArchiveFilePo;
+import com.caimei365.commodity.model.po.ArchivePo;
 import com.caimei365.commodity.model.search.ProductListVo;
 import com.caimei365.commodity.model.vo.*;
 import org.apache.ibatis.annotations.Mapper;
@@ -184,4 +186,77 @@ public interface PageMapper {
      * @return
      */
     List<Integer> findAllProductId(@Param("couponId") Integer couponId, @Param("source") Integer source);
+
+    /**
+     * 查询商品资料列表
+     *
+     * @param keyword     搜索关键词
+     * @param productType 商品属性:1产品,2仪器
+     * @return
+     */
+    List<ArchiveVo> getProductArchiveList(@Param("keyword") String keyword, @Param("productType") Integer productType);
+
+    /**
+     * 获取图片资料列表
+     * @param archiveId   商品资料id
+     * @return
+     */
+    List<ArchiveContentVo> getImageArchiveList(Integer archiveId);
+
+    /**
+     * 获取视频资料列表
+     * @param archiveId   商品资料id
+     * @return
+     */
+    List<ArchiveContentVo> getVideoArchiveList(Integer archiveId);
+
+    /**
+     * 获取文件资料列表
+     * @param archiveId   商品资料id
+     * @return
+     */
+    List<ArchiveContentVo> getFileArchiveList(Integer archiveId);
+
+    /**
+     * 获取图片资料图片列表
+     * @param archiveContentId  资料内容id
+     * @return
+     */
+    List<String> getArchiveImageList(Integer archiveContentId);
+
+    /**
+     * 获取商品资料文件
+     * @param archiveContentId  资料内容id
+     * @return
+     */
+    ArchiveFilePo getArchiveFile(Integer archiveContentId);
+
+    /**
+     * 获取商品资料信息
+     * @param archiveId 商品资料id
+     * @return
+     */
+    ArchivePo getArchiveByArchiveId(Integer archiveId);
+
+    /**
+     * 获取机构类型
+     * @param userId 用户id
+     * @return
+     */
+    Integer getClubTypeByUserId(Integer userId);
+
+    /**
+     * 根据商品id获取资料id
+     * @param productId 商品id
+     * @return
+     */
+    Integer getArchiveIdById(Integer productId);
+
+    /**
+     * 查询商品资料抵扣采美豆记录
+     * @param userId
+     * @param archiveId
+     * @return
+     */
+    Integer findBeansHistoryByArchiveId(Integer userId, Integer archiveId);
 }

+ 4 - 0
src/main/java/com/caimei365/commodity/model/vo/ProductDetailVo.java

@@ -302,4 +302,8 @@ public class ProductDetailVo implements Serializable {
      * 商品小程序端活动类型,0无活动,1云上美博会
      */
     private Integer appletsActType;
+    /**
+     * 商品资料id
+     */
+    private Integer archiveId;
 }

+ 18 - 1
src/main/java/com/caimei365/commodity/service/PageService.java

@@ -5,7 +5,6 @@ import com.caimei365.commodity.model.po.ProductParameterPo;
 import com.caimei365.commodity.model.search.ProductListVo;
 import com.caimei365.commodity.model.vo.*;
 
-import java.text.ParseException;
 import java.util.List;
 import java.util.Map;
 
@@ -136,4 +135,22 @@ public interface PageService {
      * @return
      */
     Boolean setCouponsLogo(Integer userId, Integer productId, Integer source);
+
+    /**
+     * 商品资料列表
+     * @param keyword       搜索关键词
+     * @param productType   商品属性:1产品,2仪器
+     * @param pageNum       页码
+     * @param pageSize      每页数量
+     * @return
+     */
+    ResponseJson<PaginationVo<ArchiveVo>> getProductArchive(String keyword, Integer productType, Integer pageNum, Integer pageSize);
+
+    /**
+     * 商品资料详情
+     * @param archiveId     商品资料id
+     * @param userId        用户id
+     * @return
+     */
+    ResponseJson<ArchiveDetailVo> getArchiveDetail(Integer archiveId, Integer userId);
 }

+ 118 - 3
src/main/java/com/caimei365/commodity/service/impl/PageServiceImpl.java

@@ -3,9 +3,7 @@ package com.caimei365.commodity.service.impl;
 import com.caimei365.commodity.components.PriceUtilService;
 import com.caimei365.commodity.mapper.*;
 import com.caimei365.commodity.model.ResponseJson;
-import com.caimei365.commodity.model.po.ProductDetailInfoPo;
-import com.caimei365.commodity.model.po.ProductImagePo;
-import com.caimei365.commodity.model.po.ProductParameterPo;
+import com.caimei365.commodity.model.po.*;
 import com.caimei365.commodity.model.search.ProductListVo;
 import com.caimei365.commodity.model.vo.*;
 import com.caimei365.commodity.service.PageService;
@@ -418,6 +416,9 @@ public class PageServiceImpl implements PageService {
         Integer appletsBeautyStatus = shopMapper.getAppletsBeautyStatusById(product.getProductId());
         product.setPcActType(null != pcBeautyStatus ? 1 : 0);
         product.setAppletsActType(null != appletsBeautyStatus ? 1 : 0);
+        // 商品资料id
+        Integer archiveId = pageMapper.getArchiveIdById(product.getProductId());
+        product.setArchiveId(null != archiveId ? archiveId : 0);
         //供应商信息
         ShopVo shop = shopMapper.getProductShopById(product.getShopId());
         if (null != shop) {
@@ -846,4 +847,118 @@ public class PageServiceImpl implements PageService {
         }
         return couponsLogo;
     }
+
+    /**
+     * 商品资料列表
+     * @param keyword       搜索关键词
+     * @param productType   商品属性:1产品,2仪器
+     * @param pageNum       页码
+     * @param pageSize      每页数量
+     * @return
+     */
+    @Override
+    public ResponseJson<PaginationVo<ArchiveVo>> getProductArchive(String keyword, Integer productType, Integer pageNum, Integer pageSize) {
+        PageHelper.startPage(pageNum, pageSize);
+        List<ArchiveVo> archiveList = pageMapper.getProductArchiveList(keyword, productType);
+        archiveList.forEach(archive->{
+            if (null != archive.getProductId()) {
+                String imageURL = ImageUtils.getImageURL("product", archive.getProductImage(), 0, domain);
+                archive.setProductImage(imageURL);
+            }
+        });
+        PaginationVo<ArchiveVo> pageData = new PaginationVo<>(archiveList);
+        return ResponseJson.success(pageData);
+    }
+
+    /**
+     * 商品资料内容
+     * @param archiveId     商品资料id
+     * @param userId        用户id
+     * @return
+     */
+    @Override
+    public ResponseJson<ArchiveDetailVo> getArchiveDetail(Integer archiveId, Integer userId) {
+        // 判断该用户是否拥有访问该资料的权限
+        Integer permission = checkArchivePermission(archiveId, userId);
+        List<ArchiveContentVo> imageArchiveList = pageMapper.getImageArchiveList(archiveId);
+        List<ArchiveContentVo> videoArchiveList = pageMapper.getVideoArchiveList(archiveId);
+        List<ArchiveContentVo> fileArchiveList = pageMapper.getFileArchiveList(archiveId);
+        imageArchiveList.forEach(imageArchive->{
+            List<String> imageList = pageMapper.getArchiveImageList(imageArchive.getArchiveContentId());
+            if (0 == permission) {
+                imageArchive.setImageList(imageList);
+            }
+            imageArchive.setImageNum(imageList.size());
+        });
+        videoArchiveList.forEach(videoArchive->{
+            ArchiveFilePo archiveFile = pageMapper.getArchiveFile(videoArchive.getArchiveContentId());
+            if (0 == permission) {
+                videoArchive.setFileUrl(archiveFile.getFileUrl());
+            }
+        });
+        fileArchiveList.forEach(fileArchive->{
+            ArchiveFilePo archiveFile = pageMapper.getArchiveFile(fileArchive.getArchiveContentId());
+            fileArchive.setFileName(archiveFile.getFileName());
+            if (0 == permission) {
+                fileArchive.setFileUrl(archiveFile.getFileUrl());
+            }
+        });
+        ArchiveDetailVo archiveDetail = new ArchiveDetailVo();
+        archiveDetail.setImageArchiveList(imageArchiveList);
+        archiveDetail.setVideoArchiveList(videoArchiveList);
+        archiveDetail.setFileArchiveList(fileArchiveList);
+        archiveDetail.setPermission(permission);
+        return ResponseJson.success(archiveDetail);
+    }
+
+    private Integer checkArchivePermission(Integer archiveId, Integer userId) {
+        ArchivePo archive = pageMapper.getArchiveByArchiveId(archiveId);
+        //资料等级:1一类资料,2二类资料,3三类资料
+        Integer archiveLevel = archive.getArchiveLevel();
+        //商品分类:1生美,2医美
+        Integer productClassify = archive.getProductClassify();
+        // 根据用户Id查询用户身份
+        Integer identity = priceMapper.getIdentityByUserId(userId);
+        // 1生美机构,2医美机构
+        Integer clubType = pageMapper.getClubTypeByUserId(userId);
+        // permission:0可查看,1未登录,2需升级会员机构,3需升级医美会员机构,4需要抵扣采美豆,5无权限查看
+        Integer permission = null;
+        if (null == identity) {
+            // 未登录
+            permission = 1;
+        } else if (1 == identity) {
+            //协销可查看所有资料
+            permission = 0;
+        } else if (5 == identity) {
+            // 普通机构
+            if (archiveLevel > 1) {
+                // 二级资料,普通机构
+                permission = 1 == productClassify ? 2 : 3;
+            } else {
+                permission = 0;
+            }
+        } else if (2 == identity) {
+            // 会员机构
+            if (2 == archiveLevel && 2 == productClassify && (0 == clubType || 1 == clubType)) {
+                // 二级医美资料,生美会员机构
+                permission = 3;
+            } else if (3 == archiveLevel) {
+                // 查询用户对该资料的抵扣记录
+                Integer historyId = pageMapper.findBeansHistoryByArchiveId(userId, archiveId);
+                if (2 == productClassify && (0 == clubType || 1 == clubType)) {
+                    // 三级医美资料,生美会员机构
+                    permission = 3;
+                } else if (null == historyId){
+                    permission = 4;
+                } else {
+                    permission = 0;
+                }
+            } else {
+                permission = 0;
+            }
+        } else{
+            permission = 5;
+        }
+        return permission;
+    }
 }

+ 58 - 0
src/main/resources/mapper/PageMapper.xml

@@ -408,5 +408,63 @@
               AND appletsStatus = 1
           </if>
     </select>
+    <select id="getProductArchiveList" resultType="com.caimei365.commodity.model.vo.ArchiveVo">
+        select cpa.id AS "archiveId",
+        cpa.productId AS "productId",
+        if(cpa.productId is not null, p.name, cpa.productName) AS "productName",
+        if(cpa.productId is not null, s.name, cpa.shopName) AS "shopName",
+        if(cpa.productId is not null, p.mainImage, cpa.productImage) AS "productImage",
+        if(cpa.productId is not null, ifnull(p.commodityType, cpa.productType),cpa.productType) AS "productType",
+        if(cpa.productId is not null,1,2) AS "redirectType"
+        from cm_product_archive cpa
+        left join product p on cpa.productId = p.productID
+        left join shop s on p.shopID = s.shopID
+        <where>
+            <if test="keyword != null and keyword != ''">
+                and (cpa.productName LIKE concat('%', #{keyword}, '%') or p.name like concat('%', #{keyword}, '%')
+                or cpa.shopName LIKE concat('%', #{keyword}, '%') or s.name like concat('%', #{keyword}, '%'))
+            </if>
+            <if test="productType != null and productType != 0">
+                and if(cpa.productId is not null and p.commodityType is not null,p.commodityType = #{productType},
+                cpa.productType = #{productType})
+            </if>
+        </where>
+    </select>
+    <select id="getImageArchiveList" resultType="com.caimei365.commodity.model.vo.ArchiveContentVo">
+        select id as archiveContentId, title, addTime
+        from cm_product_archive_content
+        where productArchiveId = #{archiveId} and type = 1
+    </select>
+    <select id="getVideoArchiveList" resultType="com.caimei365.commodity.model.vo.ArchiveContentVo">
+        select id as archiveContentId, title, addTime
+        from cm_product_archive_content
+        where productArchiveId = #{archiveId} and type = 2
+    </select>
+    <select id="getFileArchiveList" resultType="com.caimei365.commodity.model.vo.ArchiveContentVo">
+        select id as archiveContentId, title, addTime
+        from cm_product_archive_content
+        where productArchiveId = #{archiveId} and type = 3
+    </select>
+    <select id="getArchiveImageList" resultType="java.lang.String">
+        select ossUrl from cm_product_archive_file where archiveContentId = #{archiveContentId}
+    </select>
+    <select id="getArchiveFile" resultType="com.caimei365.commodity.model.po.ArchiveFilePo">
+        select fileName,ossUrl as fileUrl from cm_product_archive_file where archiveContentId = #{archiveContentId}
+    </select>
+    <select id="getArchiveByArchiveId" resultType="com.caimei365.commodity.model.po.ArchivePo">
+        select cpa.archiveLevel    AS "archiveLevel",
+               cpa.productClassify AS "productClassify"
+        from cm_product_archive cpa
+        where cpa.id = #{archiveId}
+    </select>
+    <select id="getClubTypeByUserId" resultType="java.lang.Integer">
+        select ifnull(firstClubType,0) from club where userID = #{userId}
+    </select>
+    <select id="getArchiveIdById" resultType="java.lang.Integer">
+        select id from cm_product_archive where productId = #{productId}
+    </select>
+    <select id="findBeansHistoryByArchiveId" resultType="java.lang.Integer">
+        select id from user_beans_history where userId = #{userId} and archiveId = #{archiveId}
+    </select>
 
 </mapper>