Browse Source

商品资料数据

Aslee 3 years ago
parent
commit
ad62fc104b

+ 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);
 }

+ 28 - 0
src/main/java/com/caimei365/commodity/model/po/ArchiveFilePo.java

@@ -0,0 +1,28 @@
+package com.caimei365.commodity.model.po;
+
+import com.caimei365.commodity.model.vo.ArchiveContentVo;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * Description
+ *
+ * @author : Aslee
+ * @date : 2021/9/9
+ */
+@ApiModel("商品资料文件")
+@Data
+public class ArchiveFilePo implements Serializable {
+    private static final long serialVersionUID = 1L;
+    /**
+     * 文件名称
+     */
+    private String fileName;
+    /**
+     * 文件oss链接
+     */
+    private String fileUrl;
+}

+ 26 - 0
src/main/java/com/caimei365/commodity/model/po/ArchivePo.java

@@ -0,0 +1,26 @@
+package com.caimei365.commodity.model.po;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * Description
+ *
+ * @author : Aslee
+ * @date : 2021/9/9
+ */
+@ApiModel("商品资料")
+@Data
+public class ArchivePo implements Serializable {
+    private static final long serialVersionUID = 1L;
+    /**
+     * 资料等级:1一类资料,2二类资料,3三类资料
+     */
+    private Integer archiveLevel;
+    /**
+     * 商品分类:1生美,2医美
+     */
+    private Integer productClassify;
+}

+ 48 - 0
src/main/java/com/caimei365/commodity/model/vo/ArchiveContentVo.java

@@ -0,0 +1,48 @@
+package com.caimei365.commodity.model.vo;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * Description
+ *
+ * @author : Aslee
+ * @date : 2021/9/9
+ */
+@ApiModel("资料内容")
+@Data
+public class ArchiveContentVo implements Serializable {
+    private static final long serialVersionUID = 1L;
+    /**
+     * 资料内容id
+     */
+    private Integer archiveContentId;
+    /**
+     * 图片列表
+     */
+    private List<String> imageList;
+    /**
+     * 图片数量
+     */
+    private Integer imageNum;
+    /**
+     * 文件名称
+     */
+    private String fileName;
+    /**
+     * 文件oss链接
+     */
+    private String fileUrl;
+    /**
+     * 资料标题
+     */
+    private String title;
+    /**
+     * 添加时间
+     */
+    private Date addTime;
+}

+ 39 - 0
src/main/java/com/caimei365/commodity/model/vo/ArchiveDetailVo.java

@@ -0,0 +1,39 @@
+package com.caimei365.commodity.model.vo;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * Description
+ *
+ * @author : Aslee
+ * @date : 2021/9/9
+ */
+@ApiModel("商品资料详情")
+@Data
+public class ArchiveDetailVo implements Serializable {
+    private static final long serialVersionUID = 1L;
+    /**
+     * 图片资料列表
+     */
+    List<ArchiveContentVo> imageArchiveList;
+    /**
+     * 视频资料列表
+     */
+    List<ArchiveContentVo> videoArchiveList;
+    /**
+     * 文件资料列表
+     */
+    List<ArchiveContentVo> fileArchiveList;
+    /**
+     * 查看权限:0不能查看,1可以查看
+     */
+    Integer permission;
+    /**
+     * 提示类型:0未登录,1需升级会员机构,2需升级医美会员机构,3需要抵扣采美豆,4无权限查看
+     */
+    Integer tipType;
+}

+ 51 - 0
src/main/java/com/caimei365/commodity/model/vo/ArchiveVo.java

@@ -0,0 +1,51 @@
+package com.caimei365.commodity.model.vo;
+
+import com.caimei365.commodity.model.po.ProductDetailInfoPo;
+import com.caimei365.commodity.model.po.ProductImagePo;
+import com.caimei365.commodity.model.po.ProductParameterPo;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * Description
+ *
+ * @author : Aslee
+ * @date : 2021/9/9
+ */
+@ApiModel("商品资料")
+@Data
+public class ArchiveVo implements Serializable {
+    private static final long serialVersionUID = 1L;
+    /**
+     * 商品资料id
+     */
+    private Integer archiveId;
+    /**
+     * 商品productID
+     */
+    private Integer productId;
+    /**
+     * 商品名称
+     */
+    private String productName;
+    /**
+     * 商品图片
+     */
+    private String productImage;
+    /**
+     * 供应商名称
+     */
+    private String shopName;
+    /**
+     * 商品属性:1产品,2仪器
+     */
+    private Integer productType;
+    /**
+     * 跳转页面:1商品详情,2自定义页面
+     */
+    private Integer redirectType;
+}

+ 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);
 }

+ 132 - 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,132 @@ 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) {
+        // 判断该用户是否拥有访问该资料的权限
+        Map<String,Integer> permissionMap = checkArchivePermission(archiveId, userId);
+        Integer permission = permissionMap.get("permission");
+        Integer tipType = permissionMap.get("tipType");
+        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 (1 == permission) {
+                imageArchive.setImageList(imageList);
+            }
+            imageArchive.setImageNum(imageList.size());
+        });
+        videoArchiveList.forEach(videoArchive->{
+            ArchiveFilePo archiveFile = pageMapper.getArchiveFile(videoArchive.getArchiveContentId());
+            if (1 == permission) {
+                videoArchive.setFileUrl(archiveFile.getFileUrl());
+            }
+        });
+        fileArchiveList.forEach(fileArchive->{
+            ArchiveFilePo archiveFile = pageMapper.getArchiveFile(fileArchive.getArchiveContentId());
+            fileArchive.setFileName(archiveFile.getFileName());
+            if (1 == permission) {
+                fileArchive.setFileUrl(archiveFile.getFileUrl());
+            }
+        });
+        ArchiveDetailVo archiveDetail = new ArchiveDetailVo();
+        archiveDetail.setImageArchiveList(imageArchiveList);
+        archiveDetail.setVideoArchiveList(videoArchiveList);
+        archiveDetail.setFileArchiveList(fileArchiveList);
+        archiveDetail.setPermission(permission);
+        archiveDetail.setTipType(tipType);
+        return ResponseJson.success(archiveDetail);
+    }
+
+    private Map<String, Integer> checkArchivePermission(Integer archiveId, Integer userId) {
+        HashMap<String, Integer> permissionMap = new HashMap<>(2);
+        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可以查看
+        // tipType:0未登录,1需升级会员机构,2需升级医美会员机构,3需要抵扣采美豆,4无权限查看
+        if (null == identity) {
+            // 未登录
+            permissionMap.put("permission", 0);
+            permissionMap.put("tipType", 0);
+        } else if (1 == identity) {
+            //协销可查看所有资料
+            permissionMap.put("permission", 1);
+            permissionMap.put("tipType", null);
+        } else if (4 == identity) {
+            // 普通机构
+            if (archiveLevel > 1) {
+                // 二级资料,普通机构
+                permissionMap.put("permission", 0);
+                permissionMap.put("tipType", 1 == productClassify ? 1 : 2);
+            } else {
+                permissionMap.put("permission", 1);
+                permissionMap.put("tipType", null);
+            }
+        } else if (3 == identity) {
+            // 会员机构
+            if (2 == archiveLevel && 2 == productClassify && 1 == clubType) {
+                // 二级医美资料,生美会员机构
+                permissionMap.put("permission", 0);
+                permissionMap.put("tipType", 2);
+            } else if (3 == archiveLevel) {
+                // 查询用户对该资料的抵扣记录
+                Integer historyId = pageMapper.findBeansHistoryByArchiveId(userId, archiveId);
+                if (2 == productClassify && 1 == clubType) {
+                    // 三级医美资料,生美会员机构
+                    permissionMap.put("permission", 0);
+                    permissionMap.put("tipType", 2);
+                } else if (null == historyId){
+                    permissionMap.put("permission", 0);
+                    permissionMap.put("tipType", 3);
+                } else {
+                    permissionMap.put("permission", 1);
+                    permissionMap.put("tipType", null);
+                }
+            } else {
+                permissionMap.put("permission", 1);
+                permissionMap.put("tipType", null);
+            }
+        } else{
+            permissionMap.put("permission", 0);
+            permissionMap.put("tipType", null);
+        }
+        return permissionMap;
+    }
 }

+ 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 firstClubType from club
+    </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>