chao 4 éve
szülő
commit
1a669b48fb

+ 66 - 0
src/main/java/com/caimei365/commodity/controller/SecondHandApi.java

@@ -0,0 +1,66 @@
+package com.caimei365.commodity.controller;
+
+import com.caimei365.commodity.model.ResponseJson;
+import com.caimei365.commodity.model.vo.PaginationVo;
+import com.caimei365.commodity.model.vo.SecondDetailVo;
+import com.caimei365.commodity.model.vo.SecondListVo;
+import com.caimei365.commodity.service.SecondHandService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2021/4/14
+ */
+@Api(tags="二手商品API")
+@RestController
+@RequiredArgsConstructor
+@RequestMapping("/commodity/second")
+public class SecondHandApi {
+
+    private final SecondHandService secondHandService;
+
+    /**
+     * 二手商品列表
+     */
+    @ApiOperation("二手商品列表(旧:/product/getSecondHandProductList)")
+    @ApiImplicitParams({
+        @ApiImplicitParam(required = false, name = "secondHandType", value = "二手商品分类,1二手仪器,2临期产品,3其他"),
+        @ApiImplicitParam(required = false, name = "instrumentType", value = "二手仪器分类的类型,1轻光电、2重光电、3耗材配件"),
+        @ApiImplicitParam(required = false, name = "name", value = "二手商品名称搜索关键词"),
+        @ApiImplicitParam(required = false, name = "pageNum", value = "页码"),
+        @ApiImplicitParam(required = false, name = "pageSize", value = "每页数量")
+    })
+    @GetMapping("list")
+    public ResponseJson<PaginationVo<SecondListVo>> getSecondHandList(Integer secondHandType, Integer instrumentType, String name,
+                                                                      @RequestParam(value = "pageNum", defaultValue = "1") int pageNum,
+                                                                      @RequestParam(value = "pageSize", defaultValue = "10") int pageSize) {
+        return secondHandService.getSecondHandList(secondHandType, instrumentType, name, pageNum, pageSize);
+    }
+
+    /**
+     * 获取二手商品详情
+     *
+     * @param productId 商品表的商品Id
+     */
+    @ApiOperation("二手商品详情(旧:/product/getSecondHandProductDetail)")
+    @ApiImplicitParam(required = true, name = "productId", value = "商品Id")
+    @GetMapping("detail")
+    public ResponseJson<SecondDetailVo> getSecondDetail(Integer productId) {
+        return secondHandService.getSecondHandDetail(productId);
+    }
+
+
+
+}

+ 35 - 0
src/main/java/com/caimei365/commodity/mapper/SecondHandMapper.java

@@ -0,0 +1,35 @@
+package com.caimei365.commodity.mapper;
+
+import com.caimei365.commodity.model.vo.SecondDetailVo;
+import com.caimei365.commodity.model.vo.SecondListVo;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2021/4/14
+ */
+@Mapper
+public interface SecondHandMapper {
+    /**
+     * 二手商品列表
+     * @param secondHandType  二手商品分类,1二手仪器,2临期产品,3其他
+     * @param instrumentType  二手仪器分类的类型,1轻光电、2重光电、3耗材配件
+     * @param name            二手商品名称搜索关键词
+     */
+    List<SecondListVo> getSeconHandList(Integer secondHandType, Integer instrumentType, String name);
+    /**
+     * 获取二手商品详情
+     * @param productId 商品Id
+     */
+    SecondDetailVo getSecondHandDetail(Integer productId);
+    /**
+     * 获取二手商品图片
+     * @param productId 商品Id
+     */
+    List<String> getImageByProductId(Integer productId);
+
+}

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

@@ -0,0 +1,83 @@
+package com.caimei365.commodity.model.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2021/4/15
+ */
+@Data
+public class SecondDetailVo implements Serializable {
+    private static final long serialVersionUID = 1L;
+    /** 商品productID */
+    private Integer productId;
+    /** 名称name */
+    private String name;
+    /** 主图mainImage */
+    private String image;
+    /** 品牌 */
+    private String brandName;
+    private Integer brandId;
+    /** 是否已售 0和空未出售,1已出售 */
+    private String sold;
+    /** 是否新上架 0非新上架,1新上架 */
+    private String newAdded;
+    /** 是否启用详聊,1不开启,2开启(开启详聊不展示交易价)*/
+    private Integer detailTalkFlag;
+    /** 价格 */
+    private Double price;
+    /** 交易价字符串千分位 */
+    private String priceStr;
+    /** 上架时间(审核时上架变化、自动下架后再上架变化、手动下架后上架如果不在有效期内才变化) */
+    private Date onLineDate;
+    /** 上架时间字符串(年月日) */
+    private String onLineDateStr;
+    /** 浏览量 */
+    private Integer viewingNum;
+    /** 省市区(地址前部分) */
+    private String provinceCityDistrict;
+    /** 二手商品列表图片数据集合 */
+    private List<String> imageList;
+
+    /** 商品类型:0其它类型(默认),1妆字号,2械字号 */
+    private String productType;
+    /** 二手商品分类,1二手仪1器,2临期产品,3其他 */
+    private String secondHandType;
+    /** 二手仪器分类的类型,1轻光电、2重光电、3耗材配件(仅适用于二手仪器分类多个用英文逗号分分隔) */
+    private String instrumentType;
+    /** 商品类型(二手仪器-重光电) */
+    private String typeStr;
+    /** 品牌信息(品牌描述) */
+    private String brandInfo;
+    /** 商品详情信息(补充信息) */
+    private String productDetails;
+    /** 是否已售 0和空未出售,1已出售 */
+    private String productQuality;
+    /** 库存 */
+    private Integer stock;
+    /** 市场价 */
+    private Double normalPrice;
+    /** 市场价价字符串千分位 */
+    private String normalPriceStr;
+    /** 采购价/原价(该二手原始购买价格) */
+    private Double originalPrice;
+    /** 采购价/原价(该二手原始购买价格)千分位串 */
+    private String originalPriceStr;
+    /** 出厂日期格式:2020年6月 */
+    private String fixedYears;
+    /** 产品到期日格式:2020年6月(仅适用于临期产品) */
+    private String maturityYears;
+    /** 是否显示联系人,1不显示,2显示 */
+    private String showContactFlag;
+    /** 联系人名字 */
+    private String contactName;
+    /** 联系方式 */
+    private String contactMobile;
+
+}

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

@@ -0,0 +1,48 @@
+package com.caimei365.commodity.model.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2021/4/14
+ */
+@Data
+public class SecondListVo implements Serializable {
+    private static final long serialVersionUID = 1L;
+    /** 商品productID */
+    private Integer productId;
+    /** 名称name */
+    private String name;
+    /** 主图mainImage */
+    private String image;
+    /** 品牌 */
+    private String brandName;
+    private Integer brandId;
+    /** 是否已售 0和空未出售,1已出售 */
+    private Integer sold;
+    /** 是否新上架 0非新上架,1新上架 */
+    private Integer newAdded;
+    /** 是否启用详聊,1不开启,2开启(开启详聊不展示交易价)*/
+    private Integer detailTalkFlag;
+    /** 价格 */
+    private Double price;
+    /** 交易价字符串千分位 */
+    private String priceStr;
+    /** 上架时间(审核时上架变化、自动下架后再上架变化、手动下架后上架如果不在有效期内才变化) */
+    private Date onLineDate;
+    /** 上架时间字符串(年月日) */
+    private String onLineDateStr;
+    /** 浏览量 */
+    private Integer viewingNum;
+    /** 省市区(地址前部分) */
+    private String provinceCityDistrict;
+    /** 二手商品列表图片数据集合 */
+    private List<String> imageList;
+
+}

+ 34 - 0
src/main/java/com/caimei365/commodity/service/SecondHandService.java

@@ -0,0 +1,34 @@
+package com.caimei365.commodity.service;
+
+import com.caimei365.commodity.model.ResponseJson;
+import com.caimei365.commodity.model.vo.PaginationVo;
+import com.caimei365.commodity.model.vo.SecondDetailVo;
+import com.caimei365.commodity.model.vo.SecondListVo;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2021/4/14
+ */
+public interface SecondHandService {
+    /**
+     * 二手商品列表
+     *
+     * @param secondHandType  二手商品分类,1二手仪器,2临期产品,3其他
+     * @param instrumentType  二手仪器分类的类型,1轻光电、2重光电、3耗材配件
+     * @param name            二手商品名称搜索关键词
+     * @param pageNum         页码
+     * @param pageSize        每页数量
+     * @return List<SecondHandVo>
+     */
+    ResponseJson<PaginationVo<SecondListVo>> getSecondHandList(Integer secondHandType, Integer instrumentType, String name, int pageNum, int pageSize);
+
+    /**
+     * 获取二手商品详情
+     *
+     * @param productId 商品表的商品Id
+     * @return SecondDetailVo
+     */
+    ResponseJson<SecondDetailVo> getSecondHandDetail(Integer productId);
+}

+ 159 - 0
src/main/java/com/caimei365/commodity/service/impl/SecondHandServiceImpl.java

@@ -0,0 +1,159 @@
+package com.caimei365.commodity.service.impl;
+
+import com.caimei365.commodity.mapper.SecondHandMapper;
+import com.caimei365.commodity.model.ResponseJson;
+import com.caimei365.commodity.model.vo.PaginationVo;
+import com.caimei365.commodity.model.vo.SecondDetailVo;
+import com.caimei365.commodity.model.vo.SecondListVo;
+import com.caimei365.commodity.service.SecondHandService;
+import com.caimei365.commodity.utils.ImageUtils;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.util.StringUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import javax.annotation.Resource;
+import java.text.DecimalFormat;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+import java.util.regex.Matcher;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2021/4/14
+ */
+@Slf4j
+@Service
+public class SecondHandServiceImpl implements SecondHandService {
+    @Value("${caimei.wwwDomain}")
+    private String domain;
+    @Resource
+    private SecondHandMapper secondHandMapper;
+
+    /**
+     * 二手商品列表
+     *
+     * @param secondHandType 二手商品分类,1二手仪器,2临期产品,3其他
+     * @param instrumentType 二手仪器分类的类型,1轻光电、2重光电、3耗材配件
+     * @param name           二手商品名称搜索关键词
+     * @param pageNum        页码
+     * @param pageSize       每页数量
+     * @return List<SecondHandVo>
+     */
+    @Override
+    public ResponseJson<PaginationVo<SecondListVo>> getSecondHandList(Integer secondHandType, Integer instrumentType, String name, int pageNum, int pageSize) {
+        PageHelper.startPage(pageNum, pageSize);
+        List<SecondListVo> secondList = secondHandMapper.getSeconHandList(secondHandType, instrumentType, name);
+        if (!CollectionUtils.isEmpty(secondList)) {
+            // 初始化商品产品标签
+            int initNewNum = 0;
+            for (SecondListVo second : secondList) {
+                initNewNum++;
+                if (initNewNum > 10) {
+                    second.setNewAdded(0);
+                } else {
+                    second.setNewAdded(1);
+                }
+                // 优化地址信息
+                String provinceCityDistrict = second.getProvinceCityDistrict();
+                provinceCityDistrict = provinceCityDistrict.replace("/", "").replace("市辖区", "");
+                second.setProvinceCityDistrict(provinceCityDistrict);
+                //价格千分位处理
+                second.setPriceStr(priceFormatStr(second.getPrice()));
+                // 处理时间格式化
+                second.setOnLineDateStr(dateFormatStr(second.getOnLineDate()));
+                // 获取二手商品图片
+                List<String> images = secondHandMapper.getImageByProductId(second.getProductId());
+                images.forEach(img -> {
+                    img = ImageUtils.getImageURL("product", img, 0, domain);
+                });
+                second.setImageList(images);
+            }
+        }
+        PaginationVo<SecondListVo> pageData = new PaginationVo<SecondListVo>(secondList);
+        return ResponseJson.success(pageData);
+    }
+
+    /**
+     * 获取二手商品详情
+     *
+     * @param productId 商品表的商品Id
+     * @return SecondDetailVo
+     */
+    @Override
+    public ResponseJson<SecondDetailVo> getSecondHandDetail(Integer productId) {
+        SecondDetailVo second = secondHandMapper.getSecondHandDetail(productId);
+        // 优化地址信息
+        String provinceCityDistrict = second.getProvinceCityDistrict();
+        provinceCityDistrict = provinceCityDistrict.replace("/", "").replace("市辖区", "");
+        second.setProvinceCityDistrict(provinceCityDistrict);
+        //价格千分位处理
+        second.setPriceStr(priceFormatStr(second.getPrice()));
+        second.setNormalPriceStr(priceFormatStr(second.getNormalPrice()));
+        second.setOriginalPriceStr(priceFormatStr(second.getOriginalPrice()));
+        // 处理时间格式化
+        second.setOnLineDateStr(dateFormatStr(second.getOnLineDate()));
+        // 获取二手商品图片
+        List<String> images = secondHandMapper.getImageByProductId(second.getProductId());
+        // 获取二手商品图片(处理老的非全路径图片)
+        images.forEach(img -> {
+            img = ImageUtils.getImageURL("product", img, 0, domain);
+        });
+        second.setImageList(images);
+        // 初始商品分类
+        String typeStr = "";
+        String secondHandType = second.getSecondHandType();
+        if ("1".equals(secondHandType)) {
+            typeStr += "二手仪器";
+        } else if ("2".equals(secondHandType)) {
+            typeStr += "临期产品";
+        } else {
+            typeStr += "其他";
+        }
+        // 二手仪器分类
+        String instrumentType = second.getInstrumentType();
+        if ("1".equals(instrumentType)) {
+            typeStr += "-轻光电";
+        } else if ("2".equals(instrumentType)) {
+            typeStr += "-重光电";
+        } else if ("3".equals(instrumentType)) {
+            typeStr += "-耗材配件";
+        }
+        second.setTypeStr(typeStr);
+        return ResponseJson.success(second);
+    }
+
+    /**
+     * 金额格式化,千分位
+     *
+     * @param number 金额
+     * @return str
+     */
+    private String priceFormatStr(Double number) {
+        number = (number == null && number > 0d) ? number : 0d;
+        DecimalFormat df = new DecimalFormat("##,##0.00");
+        return df.format(number);
+    }
+
+    /**
+     * 时间格式化
+     *
+     * @param date 时间
+     * @return str
+     */
+    private String dateFormatStr(Date date) {
+        if (null != date) {
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd");
+            return sdf.format(date);
+        } else {
+            return "时间未知";
+        }
+    }
+
+
+}

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

@@ -0,0 +1,72 @@
+<?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.caimei365.commodity.mapper.SecondHandMapper">
+    <select id="getSeconHandList" resultType="com.caimei365.commodity.model.vo.SecondListVo">
+        select
+            p.productID as productId,
+            p.`name` as name,
+            p.mainImage as image,
+            p.price1 as price,
+            p.brandID as brandId,
+	        IF(p.brandID != 161,cb.name ,cshd.brandName) as "brandName",
+	        cshd.sold as "sold",
+	        cshd.detailTalkFlag as "detailTalkFlag",
+	        cshd.onLineDate as "onLineDate",
+	        cshd.viewingNum as "viewingNum",
+	        cshd.provinceCityDistrict as "provinceCityDistrict"
+        from
+            product p
+        left join cm_second_hand_detail cshd on p.productID = cshd.productID
+        left join cm_brand cb on cb.id = p.brandID
+        where
+            p.productCategory = 2 and p.validFlag = 2
+        <if test="secondHandType != null and secondHandType != ''">
+            and cshd.secondHandType = #{secondHandType}
+        </if>
+        <if test="instrumentType != null and instrumentType != '' and instrumentType != '0'  and instrumentType != 0">
+            and cshd.instrumentType like CONCAT('%',#{instrumentType},'%')
+        </if>
+        <if test="name != null and name != ''">
+            and p.name like CONCAT('%',#{name},'%')
+        </if>
+        order by cshd.onLineDate desc
+    </select>
+    <select id="getSecondHandDetail" resultType="com.caimei365.commodity.model.vo.SecondDetailVo">
+        select
+            p.productID as productId,
+            p.`name` as name,
+            p.mainImage as image,
+            p.price1 as price,
+            p.normalPrice,
+            p.productType,
+            p.stock,
+            p.brandID as brandId,
+	        IF(p.brandID != 161,cb.name ,cshd.brandName) as "brandName",
+	        cb.description as "brandInfo",
+	        cshd.originalPrice,
+	        cshd.sold,
+	        cshd.detailTalkFlag,
+	        cshd.onLineDate,
+	        cshd.viewingNum,
+	        cshd.provinceCityDistrict,
+            cshd.productDetails,
+            cshd.productQuality,
+            cshd.secondHandType,
+            cshd.instrumentType,
+            cshd.showContactFlag,
+            cshd.contactMobile,
+            cshd.contactName,
+            cshd.fixedYears,
+            cshd.maturityYears
+        from product p
+        left join cm_second_hand_detail cshd on p.productID = cshd.productID
+        left join cm_brand cb on cb.id = p.brandID
+        where p.productCategory = 2 and p.productID = #{productId}
+    </select>
+    <select id="getImageByProductId" resultType="java.lang.String">
+        select image from productimage
+        where productID = #{productId}
+        order by mainFlag desc
+    </select>
+
+</mapper>