• 商品模块开发


    静态代码块优于普通代码块,普通代码块优于构造代码块。

    每次new对象的时候都会执行构造代码块和普通代码块,而静态代码块仅仅在加载类的时候执行并且仅仅执行一次。

    ProductDetailVo:
    package com.mmall.vo;
    
    import java.math.BigDecimal;
    
    /**
     * Created by geely
     */
    public class ProductDetailVo {
    
        private Integer  id;
        private Integer categoryId;
        private String name;
        private String subtitle;
        private String mainImage;
        private String subImages;
        private String detail;
        private BigDecimal price;
        private Integer stock;
        private Integer status;
        private String createTime;
        private String updateTime;
    
    
        private String imageHost;
        private Integer parentCategoryId;
    
        public Integer getId() {
            return id;
        }
    
        public void setId(Integer id) {
            this.id = id;
        }
    
        public Integer getCategoryId() {
            return categoryId;
        }
    
        public void setCategoryId(Integer categoryId) {
            this.categoryId = categoryId;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getSubtitle() {
            return subtitle;
        }
    
        public void setSubtitle(String subtitle) {
            this.subtitle = subtitle;
        }
    
        public String getMainImage() {
            return mainImage;
        }
    
        public void setMainImage(String mainImage) {
            this.mainImage = mainImage;
        }
    
        public String getSubImages() {
            return subImages;
        }
    
        public void setSubImages(String subImages) {
            this.subImages = subImages;
        }
    
        public String getDetail() {
            return detail;
        }
    
        public void setDetail(String detail) {
            this.detail = detail;
        }
    
        public BigDecimal getPrice() {
            return price;
        }
    
        public void setPrice(BigDecimal price) {
            this.price = price;
        }
    
        public Integer getStock() {
            return stock;
        }
    
        public void setStock(Integer stock) {
            this.stock = stock;
        }
    
        public Integer getStatus() {
            return status;
        }
    
        public void setStatus(Integer status) {
            this.status = status;
        }
    
        public String getCreateTime() {
            return createTime;
        }
    
        public void setCreateTime(String createTime) {
            this.createTime = createTime;
        }
    
        public String getUpdateTime() {
            return updateTime;
        }
    
        public void setUpdateTime(String updateTime) {
            this.updateTime = updateTime;
        }
    
        public String getImageHost() {
            return imageHost;
        }
    
        public void setImageHost(String imageHost) {
            this.imageHost = imageHost;
        }
    
        public Integer getParentCategoryId() {
            return parentCategoryId;
        }
    
        public void setParentCategoryId(Integer parentCategoryId) {
            this.parentCategoryId = parentCategoryId;
        }
    }
    DateTimeUtil:
    package com.mmall.util;
    
    import org.apache.commons.lang3.StringUtils;
    import org.joda.time.DateTime;
    import org.joda.time.format.DateTimeFormat;
    import org.joda.time.format.DateTimeFormatter;
    
    import java.util.Date;
    
    /**
     * Created by geely
     */
    public class DateTimeUtil {
    
        //joda-time
    
        //str->Date
        //Date->str
        public static final String STANDARD_FORMAT = "yyyy-MM-dd HH:mm:ss";
    
    
    
        public static Date strToDate(String dateTimeStr,String formatStr){
            DateTimeFormatter dateTimeFormatter = DateTimeFormat.forPattern(formatStr);
            DateTime dateTime = dateTimeFormatter.parseDateTime(dateTimeStr);
            return dateTime.toDate();
        }
    
        public static String dateToStr(Date date,String formatStr){
            if(date == null){
                return StringUtils.EMPTY;
            }
            DateTime dateTime = new DateTime(date);
            return dateTime.toString(formatStr);
        }
    
        public static Date strToDate(String dateTimeStr){
            DateTimeFormatter dateTimeFormatter = DateTimeFormat.forPattern(STANDARD_FORMAT);
            DateTime dateTime = dateTimeFormatter.parseDateTime(dateTimeStr);
            return dateTime.toDate();
        }
    
        public static String dateToStr(Date date){
            if(date == null){
                return StringUtils.EMPTY;
            }
            DateTime dateTime = new DateTime(date);
            return dateTime.toString(STANDARD_FORMAT);
        }
    
    
    
    
        public static void main(String[] args) {
            System.out.println(DateTimeUtil.dateToStr(new Date(),"yyyy-MM-dd HH:mm:ss"));
            System.out.println(DateTimeUtil.strToDate("2010-01-01 11:11:11","yyyy-MM-dd HH:mm:ss"));
    
        }
    
    
    }
    ProductServiceImpl:
    package com.mmall.service.impl;
    
    import com.github.pagehelper.Page;
    import com.github.pagehelper.PageHelper;
    import com.github.pagehelper.PageInfo;
    import com.google.common.collect.Lists;
    import com.mmall.common.Const;
    import com.mmall.common.ResponseCode;
    import com.mmall.common.ServerResponse;
    import com.mmall.dao.CategoryMapper;
    import com.mmall.dao.ProductMapper;
    import com.mmall.pojo.Category;
    import com.mmall.pojo.Product;
    import com.mmall.service.ICategoryService;
    import com.mmall.service.IProductService;
    import com.mmall.util.DateTimeUtil;
    import com.mmall.util.PropertiesUtil;
    import com.mmall.vo.ProductDetailVo;
    import com.mmall.vo.ProductListVo;
    import org.apache.commons.lang3.StringUtils;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * Created by geely
     */
    @Service("iProductService")
    public class ProductServiceImpl implements IProductService {
    
    
        @Autowired
        private ProductMapper productMapper;
    
        @Autowired
        private CategoryMapper categoryMapper;
    
        @Autowired
        private ICategoryService iCategoryService;
    
        public ServerResponse saveOrUpdateProduct(Product product){
            if(product != null)
            {
                if(StringUtils.isNotBlank(product.getSubImages())){
                    String[] subImageArray = product.getSubImages().split(",");
                    if(subImageArray.length > 0){
                        product.setMainImage(subImageArray[0]);
                    }
                }
    
                if(product.getId() != null){
                    int rowCount = productMapper.updateByPrimaryKey(product);
                    if(rowCount > 0){
                        return ServerResponse.createBySuccess("更新产品成功");
                    }
                    return ServerResponse.createBySuccess("更新产品失败");
                }else{
                    int rowCount = productMapper.insert(product);
                    if(rowCount > 0){
                        return ServerResponse.createBySuccess("新增产品成功");
                    }
                    return ServerResponse.createBySuccess("新增产品失败");
                }
            }
            return ServerResponse.createByErrorMessage("新增或更新产品参数不正确");
        }
    
    
        public ServerResponse<String> setSaleStatus(Integer productId,Integer status){
            if(productId == null || status == null){
                return ServerResponse.createByErrorCodeMessage(ResponseCode.ILLEGAL_ARGUMENT.getCode(),ResponseCode.ILLEGAL_ARGUMENT.getDesc());
            }
            Product product = new Product();
            product.setId(productId);
            product.setStatus(status);
            int rowCount = productMapper.updateByPrimaryKeySelective(product);
            if(rowCount > 0){
                return ServerResponse.createBySuccess("修改产品销售状态成功");
            }
            return ServerResponse.createByErrorMessage("修改产品销售状态失败");
        }
    
    
        public ServerResponse<ProductDetailVo> manageProductDetail(Integer productId){
            if(productId == null){
                return ServerResponse.createByErrorCodeMessage(ResponseCode.ILLEGAL_ARGUMENT.getCode(),ResponseCode.ILLEGAL_ARGUMENT.getDesc());
            }
            Product product = productMapper.selectByPrimaryKey(productId);
            if(product == null){
                return ServerResponse.createByErrorMessage("产品已下架或者删除");
            }
            ProductDetailVo productDetailVo = assembleProductDetailVo(product);
            return ServerResponse.createBySuccess(productDetailVo);
        }
    
        private ProductDetailVo assembleProductDetailVo(Product product){
            ProductDetailVo productDetailVo = new ProductDetailVo();
            productDetailVo.setId(product.getId());
            productDetailVo.setSubtitle(product.getSubtitle());
            productDetailVo.setPrice(product.getPrice());
            productDetailVo.setMainImage(product.getMainImage());
            productDetailVo.setSubImages(product.getSubImages());
            productDetailVo.setCategoryId(product.getCategoryId());
            productDetailVo.setDetail(product.getDetail());
            productDetailVo.setName(product.getName());
            productDetailVo.setStatus(product.getStatus());
            productDetailVo.setStock(product.getStock());
    
            productDetailVo.setImageHost(PropertiesUtil.getProperty("ftp.server.http.prefix","http://img.happymmall.com/"));
    
            Category category = categoryMapper.selectByPrimaryKey(product.getCategoryId());
            if(category == null){
                productDetailVo.setParentCategoryId(0);//默认根节点
            }else{
                productDetailVo.setParentCategoryId(category.getParentId());
            }
    
            productDetailVo.setCreateTime(DateTimeUtil.dateToStr(product.getCreateTime()));
            productDetailVo.setUpdateTime(DateTimeUtil.dateToStr(product.getUpdateTime()));
            return productDetailVo;
        }
    
    
    
        public ServerResponse<PageInfo> getProductList(int pageNum,int pageSize){
            //startPage--start
            //填充自己的sql查询逻辑
            //pageHelper-收尾
            PageHelper.startPage(pageNum,pageSize);
            List<Product> productList = productMapper.selectList();
    
            List<ProductListVo> productListVoList = Lists.newArrayList();
            for(Product productItem : productList){
                ProductListVo productListVo = assembleProductListVo(productItem);
                productListVoList.add(productListVo);
            }
            PageInfo pageResult = new PageInfo(productList);
            pageResult.setList(productListVoList);
            return ServerResponse.createBySuccess(pageResult);
        }
    
        private ProductListVo assembleProductListVo(Product product){
            ProductListVo productListVo = new ProductListVo();
            productListVo.setId(product.getId());
            productListVo.setName(product.getName());
            productListVo.setCategoryId(product.getCategoryId());
            productListVo.setImageHost(PropertiesUtil.getProperty("ftp.server.http.prefix","http://img.happymmall.com/"));
            productListVo.setMainImage(product.getMainImage());
            productListVo.setPrice(product.getPrice());
            productListVo.setSubtitle(product.getSubtitle());
            productListVo.setStatus(product.getStatus());
            return productListVo;
        }
    
    
    
        public ServerResponse<PageInfo> searchProduct(String productName,Integer productId,int pageNum,int pageSize){
            PageHelper.startPage(pageNum,pageSize);
            if(StringUtils.isNotBlank(productName)){
                productName = new StringBuilder().append("%").append(productName).append("%").toString();
            }
            List<Product> productList = productMapper.selectByNameAndProductId(productName,productId);
            List<ProductListVo> productListVoList = Lists.newArrayList();
            for(Product productItem : productList){
                ProductListVo productListVo = assembleProductListVo(productItem);
                productListVoList.add(productListVo);
            }
            PageInfo pageResult = new PageInfo(productList);
            pageResult.setList(productListVoList);
            return ServerResponse.createBySuccess(pageResult);
        }
    
    
        public ServerResponse<ProductDetailVo> getProductDetail(Integer productId){
            if(productId == null){
                return ServerResponse.createByErrorCodeMessage(ResponseCode.ILLEGAL_ARGUMENT.getCode(),ResponseCode.ILLEGAL_ARGUMENT.getDesc());
            }
            Product product = productMapper.selectByPrimaryKey(productId);
            if(product == null){
                return ServerResponse.createByErrorMessage("产品已下架或者删除");
            }
            if(product.getStatus() != Const.ProductStatusEnum.ON_SALE.getCode()){
                return ServerResponse.createByErrorMessage("产品已下架或者删除");
            }
            ProductDetailVo productDetailVo = assembleProductDetailVo(product);
            return ServerResponse.createBySuccess(productDetailVo);
        }
    
    
        public ServerResponse<PageInfo> getProductByKeywordCategory(String keyword,Integer categoryId,int pageNum,int pageSize,String orderBy){
            if(StringUtils.isBlank(keyword) && categoryId == null){
                return ServerResponse.createByErrorCodeMessage(ResponseCode.ILLEGAL_ARGUMENT.getCode(),ResponseCode.ILLEGAL_ARGUMENT.getDesc());
            }
            List<Integer> categoryIdList = new ArrayList<Integer>();
    
            if(categoryId != null){
                Category category = categoryMapper.selectByPrimaryKey(categoryId);
                if(category == null && StringUtils.isBlank(keyword)){
                    //没有该分类,并且还没有关键字,这个时候返回一个空的结果集,不报错
                    PageHelper.startPage(pageNum,pageSize);
                    List<ProductListVo> productListVoList = Lists.newArrayList();
                    PageInfo pageInfo = new PageInfo(productListVoList);
                    return ServerResponse.createBySuccess(pageInfo);
                }
                categoryIdList = iCategoryService.selectCategoryAndChildrenById(category.getId()).getData();
            }
            if(StringUtils.isNotBlank(keyword)){
                keyword = new StringBuilder().append("%").append(keyword).append("%").toString();
            }
    
            PageHelper.startPage(pageNum,pageSize);
            //排序处理
            if(StringUtils.isNotBlank(orderBy)){
                if(Const.ProductListOrderBy.PRICE_ASC_DESC.contains(orderBy)){
                    String[] orderByArray = orderBy.split("_");
                    PageHelper.orderBy(orderByArray[0]+" "+orderByArray[1]);
                }
            }
            List<Product> productList = productMapper.selectByNameAndCategoryIds(StringUtils.isBlank(keyword)?null:keyword,categoryIdList.size()==0?null:categoryIdList);
    
            List<ProductListVo> productListVoList = Lists.newArrayList();
            for(Product product : productList){
                ProductListVo productListVo = assembleProductListVo(product);
                productListVoList.add(productListVo);
            }
    
            PageInfo pageInfo = new PageInfo(productList);
            pageInfo.setList(productListVoList);
            return ServerResponse.createBySuccess(pageInfo);
        }
    
    }
    ProductMapper:
    package com.mmall.dao;
    
    import com.mmall.pojo.Product;
    import org.apache.ibatis.annotations.Param;
    
    import java.util.List;
    
    public interface ProductMapper {
        int deleteByPrimaryKey(Integer id);
    
        int insert(Product record);
    
        int insertSelective(Product record);
    
        Product selectByPrimaryKey(Integer id);
    
        int updateByPrimaryKeySelective(Product record);
    
        int updateByPrimaryKey(Product record);
    
        List<Product> selectList();
    
        List<Product> selectByNameAndProductId(@Param("productName") String productName, @Param("productId") Integer productId);
    
        List<Product> selectByNameAndCategoryIds(@Param("productName") String productName, @Param("categoryIdList") List<Integer> categoryIdList);
    
    
    }

    ProductMapper:

    <?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.mmall.dao.ProductMapper" >
      <resultMap id="BaseResultMap" type="com.mmall.pojo.Product" >
        <constructor >
          <idArg column="id" jdbcType="INTEGER" javaType="java.lang.Integer" />
          <arg column="category_id" jdbcType="INTEGER" javaType="java.lang.Integer" />
          <arg column="name" jdbcType="VARCHAR" javaType="java.lang.String" />
          <arg column="subtitle" jdbcType="VARCHAR" javaType="java.lang.String" />
          <arg column="main_image" jdbcType="VARCHAR" javaType="java.lang.String" />
          <arg column="sub_images" jdbcType="VARCHAR" javaType="java.lang.String" />
          <arg column="detail" jdbcType="VARCHAR" javaType="java.lang.String" />
          <arg column="price" jdbcType="DECIMAL" javaType="java.math.BigDecimal" />
          <arg column="stock" jdbcType="INTEGER" javaType="java.lang.Integer" />
          <arg column="status" jdbcType="INTEGER" javaType="java.lang.Integer" />
          <arg column="create_time" jdbcType="TIMESTAMP" javaType="java.util.Date" />
          <arg column="update_time" jdbcType="TIMESTAMP" javaType="java.util.Date" />
        </constructor>
      </resultMap>
      <sql id="Base_Column_List" >
        id, category_id, name, subtitle, main_image, sub_images, detail, price, stock, status, 
        create_time, update_time
      </sql>
      <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer" >
        select 
        <include refid="Base_Column_List" />
        from mmall_product
        where id = #{id,jdbcType=INTEGER}
      </select>
      <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer" >
        delete from mmall_product
        where id = #{id,jdbcType=INTEGER}
      </delete>
      <insert id="insert" parameterType="com.mmall.pojo.Product" >
        insert into mmall_product (id, category_id, name, 
          subtitle, main_image, sub_images, 
          detail, price, stock, 
          status, create_time, update_time
          )
        values (#{id,jdbcType=INTEGER}, #{categoryId,jdbcType=INTEGER}, #{name,jdbcType=VARCHAR}, 
          #{subtitle,jdbcType=VARCHAR}, #{mainImage,jdbcType=VARCHAR}, #{subImages,jdbcType=VARCHAR}, 
          #{detail,jdbcType=VARCHAR}, #{price,jdbcType=DECIMAL}, #{stock,jdbcType=INTEGER}, 
          #{status,jdbcType=INTEGER}, now(), now()
          )
      </insert>
      <insert id="insertSelective" parameterType="com.mmall.pojo.Product" >
        insert into mmall_product
        <trim prefix="(" suffix=")" suffixOverrides="," >
          <if test="id != null" >
            id,
          </if>
          <if test="categoryId != null" >
            category_id,
          </if>
          <if test="name != null" >
            name,
          </if>
          <if test="subtitle != null" >
            subtitle,
          </if>
          <if test="mainImage != null" >
            main_image,
          </if>
          <if test="subImages != null" >
            sub_images,
          </if>
          <if test="detail != null" >
            detail,
          </if>
          <if test="price != null" >
            price,
          </if>
          <if test="stock != null" >
            stock,
          </if>
          <if test="status != null" >
            status,
          </if>
          <if test="createTime != null" >
            create_time,
          </if>
          <if test="updateTime != null" >
            update_time,
          </if>
        </trim>
        <trim prefix="values (" suffix=")" suffixOverrides="," >
          <if test="id != null" >
            #{id,jdbcType=INTEGER},
          </if>
          <if test="categoryId != null" >
            #{categoryId,jdbcType=INTEGER},
          </if>
          <if test="name != null" >
            #{name,jdbcType=VARCHAR},
          </if>
          <if test="subtitle != null" >
            #{subtitle,jdbcType=VARCHAR},
          </if>
          <if test="mainImage != null" >
            #{mainImage,jdbcType=VARCHAR},
          </if>
          <if test="subImages != null" >
            #{subImages,jdbcType=VARCHAR},
          </if>
          <if test="detail != null" >
            #{detail,jdbcType=VARCHAR},
          </if>
          <if test="price != null" >
            #{price,jdbcType=DECIMAL},
          </if>
          <if test="stock != null" >
            #{stock,jdbcType=INTEGER},
          </if>
          <if test="status != null" >
            #{status,jdbcType=INTEGER},
          </if>
          <if test="createTime != null" >
            now(),
          </if>
          <if test="updateTime != null" >
            now(),
          </if>
        </trim>
      </insert>
      <update id="updateByPrimaryKeySelective" parameterType="com.mmall.pojo.Product" >
        update mmall_product
        <set >
          <if test="categoryId != null" >
            category_id = #{categoryId,jdbcType=INTEGER},
          </if>
          <if test="name != null" >
            name = #{name,jdbcType=VARCHAR},
          </if>
          <if test="subtitle != null" >
            subtitle = #{subtitle,jdbcType=VARCHAR},
          </if>
          <if test="mainImage != null" >
            main_image = #{mainImage,jdbcType=VARCHAR},
          </if>
          <if test="subImages != null" >
            sub_images = #{subImages,jdbcType=VARCHAR},
          </if>
          <if test="detail != null" >
            detail = #{detail,jdbcType=VARCHAR},
          </if>
          <if test="price != null" >
            price = #{price,jdbcType=DECIMAL},
          </if>
          <if test="stock != null" >
            stock = #{stock,jdbcType=INTEGER},
          </if>
          <if test="status != null" >
            status = #{status,jdbcType=INTEGER},
          </if>
          <if test="createTime != null" >
            create_time = #{createTime,jdbcType=TIMESTAMP},
          </if>
          <if test="updateTime != null" >
            update_time = now(),
          </if>
        </set>
        where id = #{id,jdbcType=INTEGER}
      </update>
      <update id="updateByPrimaryKey" parameterType="com.mmall.pojo.Product" >
        update mmall_product
        set category_id = #{categoryId,jdbcType=INTEGER},
          name = #{name,jdbcType=VARCHAR},
          subtitle = #{subtitle,jdbcType=VARCHAR},
          main_image = #{mainImage,jdbcType=VARCHAR},
          sub_images = #{subImages,jdbcType=VARCHAR},
          detail = #{detail,jdbcType=VARCHAR},
          price = #{price,jdbcType=DECIMAL},
          stock = #{stock,jdbcType=INTEGER},
          status = #{status,jdbcType=INTEGER},
          create_time = #{createTime,jdbcType=TIMESTAMP},
          update_time = now()
        where id = #{id,jdbcType=INTEGER}
      </update>
    
    
      <select id="selectList" resultMap="BaseResultMap" >
        SELECT
        <include refid="Base_Column_List"/>
        from mmall_product
        ORDER BY id asc
      </select>
    
    
      <select id="selectByNameAndProductId" resultMap="BaseResultMap" parameterType="map">
        SELECT
        <include refid="Base_Column_List"/>
        from mmall_product
        <where>
          <if test="productName != null">
            and name like #{productName}
          </if>
          <if test="productId != null">
            and id = #{productId}
          </if>
        </where>
      </select>
      
      <select id="selectByNameAndCategoryIds" resultMap="BaseResultMap" parameterType="map">
        SELECT
        <include refid="Base_Column_List"></include>
        from mmall_product
        where status = 1
        <if test="productName != null">
          and name like #{productName}
        </if>
        <if test="categoryIdList != null" >
          and category_id in
          <foreach item="item" index="index" open="(" separator="," close=")" collection="categoryIdList">
            #{item}
          </foreach>
        </if>
      </select>
    
    </mapper>
    FTPUtil:
    package com.mmall.util;
    
    import org.apache.commons.net.ftp.FTPClient;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.util.List;
    
    /**
     * Created by geely
     */
    public class FTPUtil {
    
        private static  final Logger logger = LoggerFactory.getLogger(FTPUtil.class);
    
        private static String ftpIp = PropertiesUtil.getProperty("ftp.server.ip");
        private static String ftpUser = PropertiesUtil.getProperty("ftp.user");
        private static String ftpPass = PropertiesUtil.getProperty("ftp.pass");
    
        public FTPUtil(String ip,int port,String user,String pwd){
            this.ip = ip;
            this.port = port;
            this.user = user;
            this.pwd = pwd;
        }
        public static boolean uploadFile(List<File> fileList) throws IOException {
            FTPUtil ftpUtil = new FTPUtil(ftpIp,21,ftpUser,ftpPass);
            logger.info("开始连接ftp服务器");
            boolean result = ftpUtil.uploadFile("img",fileList);
            logger.info("开始连接ftp服务器,结束上传,上传结果:{}");
            return result;
        }
    
    
        private boolean uploadFile(String remotePath,List<File> fileList) throws IOException {
            boolean uploaded = true;
            FileInputStream fis = null;
            //连接FTP服务器
            if(connectServer(this.ip,this.port,this.user,this.pwd)){
                try {
                    ftpClient.changeWorkingDirectory(remotePath);
                    ftpClient.setBufferSize(1024);
                    ftpClient.setControlEncoding("UTF-8");
                    ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
                    ftpClient.enterLocalPassiveMode();
                    for(File fileItem : fileList){
                        fis = new FileInputStream(fileItem);
                        ftpClient.storeFile(fileItem.getName(),fis);
                    }
    
                } catch (IOException e) {
                    logger.error("上传文件异常",e);
                    uploaded = false;
                    e.printStackTrace();
                } finally {
                    fis.close();
                    ftpClient.disconnect();
                }
            }
            return uploaded;
        }
    
    
    
        private boolean connectServer(String ip,int port,String user,String pwd){
    
            boolean isSuccess = false;
            ftpClient = new FTPClient();
            try {
                ftpClient.connect(ip);
                isSuccess = ftpClient.login(user,pwd);
            } catch (IOException e) {
                logger.error("连接FTP服务器异常",e);
            }
            return isSuccess;
        }
    
        private String ip;
        private int port;
        private String user;
        private String pwd;
        private FTPClient ftpClient;
    
        public String getIp() {
            return ip;
        }
    
        public void setIp(String ip) {
            this.ip = ip;
        }
    
        public int getPort() {
            return port;
        }
    
        public void setPort(int port) {
            this.port = port;
        }
    
        public String getUser() {
            return user;
        }
    
        public void setUser(String user) {
            this.user = user;
        }
    
        public String getPwd() {
            return pwd;
        }
    
        public void setPwd(String pwd) {
            this.pwd = pwd;
        }
    
        public FTPClient getFtpClient() {
            return ftpClient;
        }
    
        public void setFtpClient(FTPClient ftpClient) {
            this.ftpClient = ftpClient;
        }
    }
    IProductService:
    package com.mmall.service;
    
    import com.github.pagehelper.PageInfo;
    import com.mmall.common.ServerResponse;
    import com.mmall.pojo.Product;
    import com.mmall.vo.ProductDetailVo;
    
    /**
     * Created by geely
     */
    public interface IProductService {
    
        ServerResponse saveOrUpdateProduct(Product product);
    
        ServerResponse<String> setSaleStatus(Integer productId, Integer status);
    
        ServerResponse<ProductDetailVo> manageProductDetail(Integer productId);
    
        ServerResponse<PageInfo> getProductList(int pageNum, int pageSize);
    
        ServerResponse<PageInfo> searchProduct(String productName, Integer productId, int pageNum, int pageSize);
    
        ServerResponse<ProductDetailVo> getProductDetail(Integer productId);
    
        ServerResponse<PageInfo> getProductByKeywordCategory(String keyword, Integer categoryId, int pageNum, int pageSize, String orderBy);
    
    
    
    }
    ProductManageController:
    package com.mmall.controller.backend;
    
    import com.google.common.collect.Maps;
    import com.mmall.common.Const;
    import com.mmall.common.ResponseCode;
    import com.mmall.common.ServerResponse;
    import com.mmall.pojo.Product;
    import com.mmall.pojo.User;
    import com.mmall.service.IFileService;
    import com.mmall.service.IProductService;
    import com.mmall.service.IUserService;
    import com.mmall.util.PropertiesUtil;
    import org.apache.commons.lang3.StringUtils;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.bind.annotation.ResponseBody;
    import org.springframework.web.multipart.MultipartFile;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    import java.util.Map;
    
    /**
     * Created by geely
     */
    
    @Controller
    @RequestMapping("/manage/product")
    public class ProductManageController {
    
        @Autowired
        private IUserService iUserService;
        @Autowired
        private IProductService iProductService;
        @Autowired
        private IFileService iFileService;
    
        @RequestMapping("save.do")
        @ResponseBody
        public ServerResponse productSave(HttpSession session, Product product){
            User user = (User)session.getAttribute(Const.CURRENT_USER);
            if(user == null){
                return ServerResponse.createByErrorCodeMessage(ResponseCode.NEED_LOGIN.getCode(),"用户未登录,请登录管理员");
    
            }
            if(iUserService.checkAdminRole(user).isSuccess()){
                //填充我们增加产品的业务逻辑
                return iProductService.saveOrUpdateProduct(product);
            }else{
                return ServerResponse.createByErrorMessage("无权限操作");
            }
        }
    
        @RequestMapping("set_sale_status.do")
        @ResponseBody
        public ServerResponse setSaleStatus(HttpSession session, Integer productId,Integer status){
            User user = (User)session.getAttribute(Const.CURRENT_USER);
            if(user == null){
                return ServerResponse.createByErrorCodeMessage(ResponseCode.NEED_LOGIN.getCode(),"用户未登录,请登录管理员");
    
            }
            if(iUserService.checkAdminRole(user).isSuccess()){
                return iProductService.setSaleStatus(productId,status);
            }else{
                return ServerResponse.createByErrorMessage("无权限操作");
            }
        }
    
        @RequestMapping("detail.do")
        @ResponseBody
        public ServerResponse getDetail(HttpSession session, Integer productId){
            User user = (User)session.getAttribute(Const.CURRENT_USER);
            if(user == null){
                return ServerResponse.createByErrorCodeMessage(ResponseCode.NEED_LOGIN.getCode(),"用户未登录,请登录管理员");
    
            }
            if(iUserService.checkAdminRole(user).isSuccess()){
                //填充业务
                return iProductService.manageProductDetail(productId);
    
            }else{
                return ServerResponse.createByErrorMessage("无权限操作");
            }
        }
    
        @RequestMapping("list.do")
        @ResponseBody
        public ServerResponse getList(HttpSession session, @RequestParam(value = "pageNum",defaultValue = "1") int pageNum,@RequestParam(value = "pageSize",defaultValue = "10") int pageSize){
            User user = (User)session.getAttribute(Const.CURRENT_USER);
            if(user == null){
                return ServerResponse.createByErrorCodeMessage(ResponseCode.NEED_LOGIN.getCode(),"用户未登录,请登录管理员");
    
            }
            if(iUserService.checkAdminRole(user).isSuccess()){
                //填充业务
                return iProductService.getProductList(pageNum,pageSize);
            }else{
                return ServerResponse.createByErrorMessage("无权限操作");
            }
        }
    
        @RequestMapping("search.do")
        @ResponseBody
        public ServerResponse productSearch(HttpSession session,String productName,Integer productId, @RequestParam(value = "pageNum",defaultValue = "1") int pageNum,@RequestParam(value = "pageSize",defaultValue = "10") int pageSize){
            User user = (User)session.getAttribute(Const.CURRENT_USER);
            if(user == null){
                return ServerResponse.createByErrorCodeMessage(ResponseCode.NEED_LOGIN.getCode(),"用户未登录,请登录管理员");
    
            }
            if(iUserService.checkAdminRole(user).isSuccess()){
                //填充业务
                return iProductService.searchProduct(productName,productId,pageNum,pageSize);
            }else{
                return ServerResponse.createByErrorMessage("无权限操作");
            }
        }
    
        @RequestMapping("upload.do")
        @ResponseBody
        public ServerResponse upload(HttpSession session,@RequestParam(value = "upload_file",required = false) MultipartFile file,HttpServletRequest request){
            User user = (User)session.getAttribute(Const.CURRENT_USER);
            if(user == null){
                return ServerResponse.createByErrorCodeMessage(ResponseCode.NEED_LOGIN.getCode(),"用户未登录,请登录管理员");
            }
            if(iUserService.checkAdminRole(user).isSuccess()){
                String path = request.getSession().getServletContext().getRealPath("upload");
                String targetFileName = iFileService.upload(file,path);
                String url = PropertiesUtil.getProperty("ftp.server.http.prefix")+targetFileName;
    
                Map fileMap = Maps.newHashMap();
                fileMap.put("uri",targetFileName);
                fileMap.put("url",url);
                return ServerResponse.createBySuccess(fileMap);
            }else{
                return ServerResponse.createByErrorMessage("无权限操作");
            }
        }
    
    
        @RequestMapping("richtext_img_upload.do")
        @ResponseBody
        public Map richtextImgUpload(HttpSession session, @RequestParam(value = "upload_file",required = false) MultipartFile file, HttpServletRequest request, HttpServletResponse response){
            Map resultMap = Maps.newHashMap();
            User user = (User)session.getAttribute(Const.CURRENT_USER);
            if(user == null){
                resultMap.put("success",false);
                resultMap.put("msg","请登录管理员");
                return resultMap;
            }
            //富文本中对于返回值有自己的要求,我们使用是simditor所以按照simditor的要求进行返回
    //        {
    //            "success": true/false,
    //                "msg": "error message", # optional
    //            "file_path": "[real file path]"
    //        }
            if(iUserService.checkAdminRole(user).isSuccess()){
                String path = request.getSession().getServletContext().getRealPath("upload");
                String targetFileName = iFileService.upload(file,path);
                if(StringUtils.isBlank(targetFileName)){
                    resultMap.put("success",false);
                    resultMap.put("msg","上传失败");
                    return resultMap;
                }
                String url = PropertiesUtil.getProperty("ftp.server.http.prefix")+targetFileName;
                resultMap.put("success",true);
                resultMap.put("msg","上传成功");
                resultMap.put("file_path",url);
                response.addHeader("Access-Control-Allow-Headers","X-File-Name");
                return resultMap;
            }else{
                resultMap.put("success",false);
                resultMap.put("msg","无权限操作");
                return resultMap;
            }
        }
    
    }
    ProductListVo:
    package com.mmall.vo;
    
    import java.math.BigDecimal;
    
    /**
     * Created by geely
     */
    public class ProductListVo {
    
        private Integer id;
        private Integer categoryId;
    
        private String name;
        private String subtitle;
        private String mainImage;
        private BigDecimal price;
    
        private Integer status;
    
        private String imageHost;
    
        public Integer getId() {
            return id;
        }
    
        public void setId(Integer id) {
            this.id = id;
        }
    
        public Integer getCategoryId() {
            return categoryId;
        }
    
        public void setCategoryId(Integer categoryId) {
            this.categoryId = categoryId;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getSubtitle() {
            return subtitle;
        }
    
        public void setSubtitle(String subtitle) {
            this.subtitle = subtitle;
        }
    
        public String getMainImage() {
            return mainImage;
        }
    
        public void setMainImage(String mainImage) {
            this.mainImage = mainImage;
        }
    
        public BigDecimal getPrice() {
            return price;
        }
    
        public void setPrice(BigDecimal price) {
            this.price = price;
        }
    
        public Integer getStatus() {
            return status;
        }
    
        public void setStatus(Integer status) {
            this.status = status;
        }
    
        public String getImageHost() {
            return imageHost;
        }
    
        public void setImageHost(String imageHost) {
            this.imageHost = imageHost;
        }
    }

     mmall.properties:

    ftp.server.ip=192.168.80.130
    ftp.user=ftpuser
    ftp.pass=ftpuser
    ftp.server.http.prefix=http://image.imooc.com/
    
    password.salt = ouyan12433rewfdsc3sad!@#$%

    index.jsp(这里可以测试下):

    <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
    <%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8" %>
    <html>
    <body>
    <h2>Hello World!</h2>
    <form name="form1" action="/manage/product/upload.do" method="post" enctype="multipart/form-data">
        <input type="file" name="upload_file" />
        <input type="submit" value="springmvc上传文件" />
    </form>
    <form name="form1" action="/manage/product/richtext_img_upload.do" method="post" enctype="multipart/form-data">
        <input type="file" name="upload_file" />
        <input type="submit" value="富文本上传文件" />
    </form>
    </body>
    </html>
    IFileService:
    package com.mmall.service;
    
    import org.springframework.web.multipart.MultipartFile;
    
    /**
     * Created by geely
     */
    public interface IFileService {
    
        String upload(MultipartFile file, String path);
    }
    FileServiceImpl:
    package com.mmall.service.impl;
    
    import com.google.common.collect.Lists;
    import com.mmall.service.IFileService;
    import com.mmall.util.FTPUtil;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.stereotype.Service;
    import org.springframework.web.multipart.MultipartFile;
    
    import java.io.File;
    import java.io.IOException;
    import java.util.UUID;
    
    /**
     * Created by geely
     */
    @Service("iFileService")
    public class FileServiceImpl implements IFileService {
    
        private Logger logger = LoggerFactory.getLogger(FileServiceImpl.class);
    
    
        public String upload(MultipartFile file,String path){
            String fileName = file.getOriginalFilename();
            //扩展名
            //abc.jpg
            String fileExtensionName = fileName.substring(fileName.lastIndexOf(".")+1);
            String uploadFileName = UUID.randomUUID().toString()+"."+fileExtensionName;
            logger.info("开始上传文件,上传文件的文件名:{},上传的路径:{},新文件名:{}",fileName,path,uploadFileName);
    
            File fileDir = new File(path);
            if(!fileDir.exists()){
                fileDir.setWritable(true);
                fileDir.mkdirs();
            }
            File targetFile = new File(path,uploadFileName);
    
    
            try {
                file.transferTo(targetFile);
                //文件已经上传成功了
    
    
                FTPUtil.uploadFile(Lists.newArrayList(targetFile));
                //已经上传到ftp服务器上
    
                targetFile.delete();
            } catch (IOException e) {
                logger.error("上传文件异常",e);
                return null;
            }
            //A:abc.jpg
            //B:abc.jpg
            return targetFile.getName();
        }
    
    }
    ProductController:
    package com.mmall.controller.portal;
    
    import com.github.pagehelper.PageInfo;
    import com.mmall.common.ServerResponse;
    import com.mmall.service.IProductService;
    import com.mmall.vo.ProductDetailVo;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.bind.annotation.ResponseBody;
    
    /**
     * Created by geely
     */
    
    @Controller
    @RequestMapping("/product/")
    public class ProductController {
    
        @Autowired
        private IProductService iProductService;
    
    
    
        @RequestMapping("detail.do")
        @ResponseBody
        public ServerResponse<ProductDetailVo> detail(Integer productId){
            return iProductService.getProductDetail(productId);
        }
    
        @RequestMapping("list.do")
        @ResponseBody
        public ServerResponse<PageInfo> list(@RequestParam(value = "keyword",required = false)String keyword,
                                             @RequestParam(value = "categoryId",required = false)Integer categoryId,
                                             @RequestParam(value = "pageNum",defaultValue = "1") int pageNum,
                                             @RequestParam(value = "pageSize",defaultValue = "10") int pageSize,
                                             @RequestParam(value = "orderBy",defaultValue = "") String orderBy){
            return iProductService.getProductByKeywordCategory(keyword,categoryId,pageNum,pageSize,orderBy);
        }
    }

    然后需要在ftpuser下新建文件夹img,并右键点击更改权限:

    全部勾选:

    接下来:

     然后重启nginx即可:

    
    
  • 相关阅读:
    方向余弦阵,欧拉角,四元数
    贝叶斯公式理解
    mysql安装错误解决办法
    arduino 配置 esp8266
    决策树的python实现
    ppt罗列项排版
    ★-原创性说明-★
    【通知】即日起重启技术博客
    第一篇:你不一定了解的"推荐系统"
    第十篇:K均值聚类(KMeans)
  • 原文地址:https://www.cnblogs.com/XJJD/p/8503328.html
Copyright © 2020-2023  润新知