Advertisement

java后台修改商品信息_shop--9.商品--商品编辑--修改(后端)

阅读量:

首先获取店铺下的商品信息

dao层

/**

  • 由商品Id获取商品信息

  • @param productId

  • @return

*/

Product queryProductByproductId(Long productId);

dao.xml

要重新定义resultMap

由于返回的商品详情图片构成一个List,因此必须采用collection来进行定义。同时,在对数据进行查询的过程中,需要运用多表连接的技术。

javaType="com.shop.bean.ProductCategory">

SELECT

p.product_id,

p.product_name,

p.product_desc,

p.img_addr,

p.normal_price,

p.promotion_price,

p.priority,

p.create_time,

p.last_edit_time,

p.status,

p.product_category_id,

p.shop_id,

pm.product_img_id,

pm.img_addr,

pm.img_desc,

pm.priority,

pm.create_time,

pm.product_id

FROM

product p

LEFT JOIN

product_img pm

ON

p.product_id=pm.product_id

WHERE p.product_id=#{productId}

ORDER BY

pm.priority DESC

service

/**

  • 由商品Id获取商品信息

  • @param productId

  • @return

*/

Product getProductByProductId(Long productId);

/**

  • 由商品Id获取商品信息

  • @param productId

  • @return

*/

@Override

public Product getProductByProductId(Long productId) {

return productDao.queryProductByproductId( productId );

}

controller层

@RequestMapping(value="getproductbyid", method=RequestMethod.GET)

@ResponseBody

public Map getProductById(@RequestParam Long productId){

Map modelMap = new HashMap<>();

//Long productId = HttpServletRequestUtil.getLong( request, "productId" );

if(productId > 0){

//获取商品Id的商品信息

Product product = productService.getProductByProductId( productId );

//获取该店铺下的商品类别列表

List productCategoryList =

categoryService.getCategoryList( product.getShop().getShopId() );

modelMap.put("success", true);

modelMap.put( "product", product );

modelMap.put( "productCategoryList", productCategoryList );

} else{

modelMap.put( "success", false );

modelMap.put( "errMsg", "empty productId" );

}

return modelMap;

}

2.新传入的图片(缩略图或详情图)都会覆盖(删除)掉原来的图片

dao层

/**

  • 根据productId获取商品详情图片列表

  • @param productId

  • @return

*/

List queryProductImgByProductId(Long productId);

/**

  • 根据传入的productImgId删除所有商品详情图片

  • @param productId

  • @return

*/

int deleteProductImgByProductId(Long productId);

SELECT

product_img_id,

img_addr

FROM

product_img

WHERE

product_id=#{productId}

DELETE FROM product_img WHERE product_id=#{productId}

3.点击提交按钮之后,提交到后台,修改数据库中的信息

dao层

/**

  • 更新商品信息

  • @param product

  • @return

*/

int updateProduct(Product product);

UPDATE product

product_name=#{productName},

product_desc=#{productDesc},

img_addr=#{imgAddr},

normal_price=#{normalPrice},

promotion_price=#{promotionPrice},

last_edit_time=#{lastEditTime},

status=#{status},

product_category_id=#{productCategory.productCategoryId}

WHERE product_id=#{productId}

AND shop_id=#{shop.shopId}

service

/**

  • 修改商品信息

*1.若缩略图参数有值,则处理缩略图

若文件夹中存在缩略图,则先删除该文件夹中的所有缩略图,并获取新生成的缩略图的相对路径;接着将新路径赋值给变量product。

  • 2.若商品详情列表有值,则再处理商品详情图,删除文件夹下的商品详情图

  • 3.将product_img数据库中的商品记录删除

  • 4.更新数据库product_img和product的信息

  • @param product

  • @return

*/

@Override

@Transactional

public ProductExecution generateProduct(Product product, CommonsMultipartFile thumbnail, List productImgList)

throws ProductOperationException {

if(product != null && product.getShop() != null && product.getShop().getShopId() != null){

try{

//如果商品缩略图改变了的话,就将原来的商品缩略图删除,再放入新的

if(thumbnail != null){

//从数据库获取传入的商品信息

根据产品ID查询对应的产品实例tempProduct

//首先判断是否存在根据商品Id有当前要插入的商品信息

if(tempProduct != null && tempProduct.getImgAddr() != null){

ImageUtil.deleteFileOrPath( tempProduct.getImgAddr() );

}

addThumbnail( product, thumbnail );

}

//如果添加了商品详情图的话,就把原来的商品详情图删掉,再加入新的

if(productImgList != null && productImgList.size() > 0){

deleteProductImgList(product.getProductId());

addProductImgList( product, productImgList );

}

//添加商品信息中必要的部分

product.setLastEditTime( new Date( ) );

int effectNum = productDao.updateProduct( product );

if(effectNum > 0){

product = productDao.queryProductByproductId( product.getProductId() );

return new ProductExecution(ProductStateEnum.SUCCESS, product);

} else{

return new ProductExecution( ProductStateEnum.INNER_ERROR );

}

}catch(ProductOperationException e){

throws new ProductException( "alter the product error : " + e.getMessage() );

}

} else{

return new ProductExecution(ProductStateEnum.EMPTY);

}

}

/**

为用户提供商品缩略图的存储位置,并同步至店铺信息中的商品图片数据

  • @param product

  • @param thumbnail

*/

private void addThumbnail(Product product, CommonsMOCKABLE thumbnail){

//获取缩略图的存储途径,直接存储在店铺的文件夹下

The variable relativeImgPath is obtained via the method PathUtil.getShopImgPath, which accepts the product's shop ID as an argument.

String realRelativeImgPath = ImageUtil.generateThumbnail(thumbnail, relativeImgPath);

product.setImgAddr( realRelativeImgPath );

}

/**

按批次导入商品详情图片至与该用户相关的文件夹中,并完成将这些图片一次性注入数据库的过程

  • @param product

  • @param productImgList

*/

private void addProductImgList(Product product, List productImgList){

//获取图片的存储途径,直接存储在店铺的文件夹下

String relativeImgPath = getStoreImagePath( product.shop.id );

List productImgs = new ArrayList<>();

//遍历图片列表进行处理,并且将结果添加到productImgs中

for(CommonsMultipartFile proImg : productImgList){

String imgAddr = ImageUtil.generateNormalImg(proImg, relativeImgPath);

ProductImg productImg = new ProductImg();

productImg.setImgAddr( imgAddr );

productImg.setProductId(product.getProductId());

productImg.setCreateTime( new Date( ) );

productImgs.add( productImg );

}

if(productImgs.size() > 0){

try{

int effectNum = productImgDao.batchInsertProductImg( productImgs );

if(effectNum <= 0){

throw new ProductOperationException("创建商品详情图片失败");

}

} catch(Exception e){

调用Product类构造方法生成图片时出现错误状态会导致资源未被正确释放

}

}

}

private void deleteProductImgList(Long productId){

//从prodcut_img数据库中获取product_id为productId的

ArrayList imgProducts = productImgDao.queryProductImgByProductId(productId);

if(productImgList != null && productImgList.size() > 0){

for(ProductImg tempProductImg : productImgList){

ImageUtil.deleteFileOrPath( tempProductImg.getImgAddr() );

}

//删除数据库中原有的照片

productImgDao.deleteProductImgByProductId( productId );

}

}

controller层

@RequestMapping(value="/modifyproduct", method=RequestMethod.POST)

@ResponseBody

public Map modifyProduct(HttpServletRequest request){

Map modelMap = new HashMap<>();

//校验验证码

//验证码校验

if(!CodeUtil.checkVerifyCode(request)){

modelMap.put( "success", false );

modelMap.put( "errMsg", "验证码错误" );

return modelMap;

}

//接收前端传来的参数:商品信息,缩略图,商品详情图片

ObjectMapper objectMapper = new ObjectMapper( );

Product product = null;

character str = RequestHandlerUtils.getString(request, str);

CommonsMultipartFile thumbnail = null;

List productImgList = new ArrayList<>();

//在本次会话的上下文session中获取上传的文件

CommonsMultipartResolver commonsMultipartResolver =

创建实例 of CommutativeMultipartResolver by calling request.getSession().getServletContext().

//如果有缩略图,商品详情图的话,就赋值给相应的变量,没有的话,就不管

if(commonsMultipartResolver.isMultipart( request )){

MultipartHttpServletRequest multipartHttpServletRequest = new MultipartHttpServletRequest(request);

通过访问multipartHttpServletRequest并调用其getFile方法来提取名为' thumbnail'的文件

for(int i = 0; i < MAXIMAGECOUNT; i++){

通过()的方式获取变量 commonsMultipartFile = ()调用多部分输入request获取文件,并结合产品图片名i进行拼接

if(commonsMultipartFile != null){

productImgList.add( commonsMultipartFile );

} else{

break;

}

}

}

在ProductStr字符串内,通过ObjectMapper将productStr转换为Product实体类

try{

product = objectMapper.readValue(productStr, Product.class);

} catch (Exception e) {

modelMap.put( "success", false );

modelMap.put("errMsg", e.toString());

return modelMap;

}

//如果product不是null,则进行商品修改

if(product != null){

try{

Shop shop = new Shop();

shop.setShopId( 1L );

product.setShop(shop);

该产品执行器 product execution 赋值于 ... propertyResource.modifyProduct( 该产品 图片thumban 产品图片productImgList )

if(productExecution.getState() == ProductStateEnum.SUCCESS.getState()){

modelMap.put("success", true);

} else{

modelMap.put( "success", false );

modelMap.put( "errMsg", productExecution.getStateInfo() );

}

}catch(RuntimeException e){

modelMap.put( "success", false );

modelMap.put( "errMsg", e.toString() );

return modelMap;

}

} else{

modelMap.put( "success", false );

modelMap.put( "errMsg", "请输入商品信息");

}

return modelMap;

}

全部评论 (0)

还没有任何评论哟~