diff --git a/src/main/java/com/rymcu/forest/entity/Product.java b/src/main/java/com/rymcu/forest/entity/Product.java index d6fcded..1f2e63d 100644 --- a/src/main/java/com/rymcu/forest/entity/Product.java +++ b/src/main/java/com/rymcu/forest/entity/Product.java @@ -3,10 +3,7 @@ package com.rymcu.forest.entity; import com.alibaba.fastjson.annotation.JSONField; import lombok.Data; -import javax.persistence.Column; -import javax.persistence.GeneratedValue; -import javax.persistence.Id; -import javax.persistence.Table; +import javax.persistence.*; import java.io.Serializable; import java.util.Date; @@ -19,7 +16,7 @@ import java.util.Date; */ @Data @Table(name = "forest_product") -public class Product implements Serializable, Cloneable { +public class Product implements Serializable { /** * 主键 */ @@ -61,4 +58,7 @@ public class Product implements Serializable, Cloneable { private Integer status; private String tags; + + @Transient + private String productImgType; } diff --git a/src/main/java/com/rymcu/forest/entity/ProductContent.java b/src/main/java/com/rymcu/forest/entity/ProductContent.java index 8559ecb..701e874 100644 --- a/src/main/java/com/rymcu/forest/entity/ProductContent.java +++ b/src/main/java/com/rymcu/forest/entity/ProductContent.java @@ -16,7 +16,7 @@ import java.util.Date; */ @Data @Table(name = "forest_product_content") -public class ProductContent implements Serializable, Cloneable { +public class ProductContent implements Serializable { /** * 产品表主键 */ diff --git a/src/main/java/com/rymcu/forest/mapper/ProductMapper.java b/src/main/java/com/rymcu/forest/mapper/ProductMapper.java index ef57bd0..bb77426 100644 --- a/src/main/java/com/rymcu/forest/mapper/ProductMapper.java +++ b/src/main/java/com/rymcu/forest/mapper/ProductMapper.java @@ -22,7 +22,7 @@ public interface ProductMapper extends Mapper { * @param productContentHtml 产品详情 html * @return 更新数量 */ - Integer insertProductContent(@Param("idProduct") Integer idProduct, @Param("productContent") String productContent, @Param("productContentHtml") String productContentHtml); + Integer insertProductContent(@Param("idProduct") Long idProduct, @Param("productContent") String productContent, @Param("productContentHtml") String productContentHtml); /** * 查询产品列表 @@ -45,4 +45,21 @@ public interface ProductMapper extends Mapper { * @return 产品信息 */ List selectOnlineProducts(); + + /** + * 保存产品详情 + * + * @param idProduct 产品主键 + * @param productContent 产品详情 markdown + * @param productContentHtml 产品详情 html + * @return 更新数量 + */ + Integer updateProductContent(@Param("idProduct") Long idProduct, @Param("productContent") String productContent, @Param("productContentHtml") String productContentHtml); + + /** + * @param idProduct 产品主键 + * @param status 状态 + * @return 更新成功状态 + */ + int updateStatus(@Param("idProduct") Long idProduct, @Param("status") Integer status); } diff --git a/src/main/java/com/rymcu/forest/service/ProductService.java b/src/main/java/com/rymcu/forest/service/ProductService.java index 1cf4d47..d9d3a88 100644 --- a/src/main/java/com/rymcu/forest/service/ProductService.java +++ b/src/main/java/com/rymcu/forest/service/ProductService.java @@ -16,23 +16,35 @@ import java.util.List; public interface ProductService extends Service { /** * 查询产品列表 - * - * @return + * @return 产品列表 */ List findProducts(); /** * 获取产品详情 * - * @param idProduct - * @param type - * @return + * @param idProduct 产品主键 + * @param type 数据类型 + * @return 产品详情 */ ProductDTO findProductDTOById(Long idProduct, Integer type); /** * 获取在线商品 - * @return + * @return 产品列表 */ List findOnlineProducts(); + + /** + * @param product 产品信息 + * @return 产品信息 + */ + Product postProduct(ProductDTO product); + + /** + * @param idProduct 产品主键 + * @param status 状态 + * @return 更新成功状态 + */ + boolean updateStatus(Long idProduct, Integer status); } diff --git a/src/main/java/com/rymcu/forest/service/impl/ProductServiceImpl.java b/src/main/java/com/rymcu/forest/service/impl/ProductServiceImpl.java index 64c8cf8..789cf93 100644 --- a/src/main/java/com/rymcu/forest/service/impl/ProductServiceImpl.java +++ b/src/main/java/com/rymcu/forest/service/impl/ProductServiceImpl.java @@ -5,9 +5,13 @@ import com.rymcu.forest.dto.ProductDTO; import com.rymcu.forest.entity.Product; import com.rymcu.forest.mapper.ProductMapper; import com.rymcu.forest.service.ProductService; +import com.rymcu.forest.util.BeanCopierUtil; +import com.rymcu.forest.web.api.common.UploadController; +import org.apache.commons.lang.StringUtils; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.util.Date; import java.util.List; /** @@ -37,4 +41,45 @@ public class ProductServiceImpl extends AbstractService implements Prod public List findOnlineProducts() { return productMapper.selectOnlineProducts(); } + + /** + * @param product 产品信息 + * @return 产品信息 + */ + @Override + public Product postProduct(ProductDTO product) { + boolean isUpdate = product.getIdProduct() > 0; + if (StringUtils.isNotBlank(product.getProductImgType())) { + String headImgUrl = UploadController.uploadBase64File(product.getProductImgUrl(), 0); + product.setProductImgUrl(headImgUrl); + } + Product newProduct; + if (isUpdate) { + newProduct = productMapper.selectByPrimaryKey(product.getIdProduct()); + newProduct.setProductImgUrl(product.getProductImgUrl()); + newProduct.setProductTitle(product.getProductTitle()); + newProduct.setProductPrice(product.getProductPrice()); + newProduct.setProductDescription(product.getProductDescription()); + productMapper.updateByPrimaryKeySelective(newProduct); + // 更新产品详情 + productMapper.updateProductContent(newProduct.getIdProduct(), product.getProductContent(), product.getProductContentHtml()); + } else { + newProduct = new Product(); + BeanCopierUtil.convert(product, newProduct); + newProduct.setCreatedTime(new Date()); + // 创建产品详情 + productMapper.insertProductContent(newProduct.getIdProduct(), product.getProductContent(), product.getProductContentHtml()); + } + return newProduct; + } + + /** + * @param idProduct 产品主键 + * @param status 状态 + * @return 更新成功状态 + */ + @Override + public boolean updateStatus(Long idProduct, Integer status) { + return productMapper.updateStatus(idProduct, status) > 0; + } } diff --git a/src/main/java/com/rymcu/forest/web/api/admin/AdminArticleController.java b/src/main/java/com/rymcu/forest/web/api/admin/AdminArticleController.java index e56de0b..ab5c89e 100644 --- a/src/main/java/com/rymcu/forest/web/api/admin/AdminArticleController.java +++ b/src/main/java/com/rymcu/forest/web/api/admin/AdminArticleController.java @@ -34,7 +34,7 @@ public class AdminArticleController { @PatchMapping("/update-status") public GlobalResult updateArticleStatus(@RequestBody ArticleUpdateStatusDTO article) { - Long idArticle = article.getIdArticle();; + Long idArticle = article.getIdArticle(); String articleStatus = article.getArticleStatus(); String remarks = article.getRemarks(); return GlobalResultGenerator.genSuccessResult(articleService.updateStatus(idArticle, articleStatus, remarks)); diff --git a/src/main/java/com/rymcu/forest/web/api/product/ProductController.java b/src/main/java/com/rymcu/forest/web/api/product/ProductController.java index c3229ae..7873aea 100644 --- a/src/main/java/com/rymcu/forest/web/api/product/ProductController.java +++ b/src/main/java/com/rymcu/forest/web/api/product/ProductController.java @@ -2,8 +2,15 @@ package com.rymcu.forest.web.api.product; import com.rymcu.forest.core.result.GlobalResult; import com.rymcu.forest.core.result.GlobalResultGenerator; +import com.rymcu.forest.core.service.security.annotation.AuthorshipInterceptor; +import com.rymcu.forest.core.service.security.annotation.SecurityInterceptor; import com.rymcu.forest.dto.ProductDTO; +import com.rymcu.forest.entity.Product; +import com.rymcu.forest.entity.Product; +import com.rymcu.forest.entity.User; +import com.rymcu.forest.enumerate.Module; import com.rymcu.forest.service.ProductService; +import com.rymcu.forest.util.UserUtils; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; @@ -22,12 +29,32 @@ public class ProductController { @Resource private ProductService productService; - - @GetMapping("/detail/{idProduct}") public GlobalResult detail(@PathVariable Long idProduct, @RequestParam(defaultValue = "2") Integer type) { ProductDTO dto = productService.findProductDTOById(idProduct, type); return GlobalResultGenerator.genSuccessResult(dto); } + @PostMapping("/post") + public GlobalResult add(@RequestBody ProductDTO product) { + Product newProduct = productService.postProduct(product); + return GlobalResultGenerator.genSuccessResult(newProduct); + } + + @PutMapping("/post") + public GlobalResult update(@RequestBody ProductDTO product) { + if (product.getIdProduct() == null || product.getIdProduct() == 0) { + throw new IllegalArgumentException("产品主键参数异常!"); + } + Product oldProduct = productService.postProduct(product); + return GlobalResultGenerator.genSuccessResult(oldProduct); + } + + + @PatchMapping("/update-status") + public GlobalResult updateStatus(@RequestBody Product product) { + boolean flag = productService.updateStatus(product.getIdProduct(), product.getStatus()); + return GlobalResultGenerator.genSuccessResult(flag); + } + } diff --git a/src/main/java/mapper/ProductMapper.xml b/src/main/java/mapper/ProductMapper.xml index 2c07b6b..ddf51f6 100644 --- a/src/main/java/mapper/ProductMapper.xml +++ b/src/main/java/mapper/ProductMapper.xml @@ -24,6 +24,18 @@ sysdate(), sysdate()) + + update forest_product_content + set product_content = #{productContent}, + product_content_html = #{productContentHtml}, + updated_time = sysdate() + where id_product = #{idProduct} + + + update forest_product + set status = #{status} + where id_product = #{idProduct} +