zoukankan      html  css  js  c++  java
  • 校园商铺-8商品模块-4商品添加controller层的设计

    package com.csj2018.o2o.web.shopadmin;
    
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    import javax.servlet.http.HttpServletRequest;
    
    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.RequestMethod;
    import org.springframework.web.bind.annotation.ResponseBody;
    import org.springframework.web.multipart.MultipartHttpServletRequest;
    import org.springframework.web.multipart.MultipartRequest;
    import org.springframework.web.multipart.commons.CommonsMultipartFile;
    import org.springframework.web.multipart.commons.CommonsMultipartResolver;
    
    import com.csj2018.o2o.dto.ImageHolder;
    import com.csj2018.o2o.dto.ProductExecution;
    import com.csj2018.o2o.entity.Product;
    import com.csj2018.o2o.entity.Shop;
    import com.csj2018.o2o.enums.ProductStateEnum;
    import com.csj2018.o2o.service.ProductService;
    import com.csj2018.o2o.util.CodeUtil;
    import com.csj2018.o2o.util.HttpServletRequestUtil;
    import com.fasterxml.jackson.databind.ObjectMapper;
    
    @Controller
    @RequestMapping("/shopadmin")
    public class ProductManagementController {
    	@Autowired
    	private ProductService productService;
    	
    	//支持上传图片详情图的最大数值
    	private static final int IMAGEMAXCOUNT = 6;
    	
    	@RequestMapping(value="/addproduct",method=RequestMethod.POST)
    	@ResponseBody
    	private Map<String,Object> addProduct(HttpServletRequest request){
    		Map<String, Object> modelMap = new HashMap<String,Object>();
    		//验证码校验
    		if(!CodeUtil.checkVerifyCode(request)) {
    			modelMap.put("success", false);
    			modelMap.put("errMsg", "输入了错误的验证码");
    			return modelMap;
    		}
    		//接收前端参数的变量的初始化,包括商品、缩略图、详情图列表实体类
    		ObjectMapper mapper = new ObjectMapper();
    		Product product = null;
    		String productStr = HttpServletRequestUtil.getString(request, "productStr");
    		MultipartHttpServletRequest multipartRequest = null;
    		ImageHolder thumbnail = null;
    		List<ImageHolder> productImgList = new ArrayList<ImageHolder>();
    		CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext());
    		
    		try {
    			//若请求中存在文件流,则取出相关的文件(包括缩略图和详情图)
    			if(multipartResolver.isMultipart(request)) {
    				multipartRequest = (MultipartHttpServletRequest) request;
    				//取出缩略图并构建ImageHolder的对象
    				CommonsMultipartFile thumbnailFile = (CommonsMultipartFile) multipartRequest.getFile("thumbnail");
    				thumbnail = new ImageHolder(thumbnailFile.getOriginalFilename(),thumbnailFile.getInputStream());
    				//取出详情图列表并构建List<ImageHolder>列表对象,最多支持6张图片上传
    				for(int i=0;i<IMAGEMAXCOUNT;i++) {
    					CommonsMultipartFile productImgFile = (CommonsMultipartFile)multipartRequest.getFile("productImg"+i);
    					if(productImgFile != null) {
    						//若取出的第i个详情图片文件流不为空,则将其加入详情图列表
    						ImageHolder productImg = new ImageHolder(productImgFile.getOriginalFilename(),productImgFile.getInputStream());
    						productImgList.add(productImg);
    					}else {
    						//若取出的第i个详情图片文件流为空,则终止循环
    						break;
    					}
    				}
    			}else {
    				modelMap.put("success", false);
    				modelMap.put("errMsg", "上传图片不为空");
    				return modelMap;
    			}
    		}catch (Exception e) {
    			modelMap.put("success", false);
    			modelMap.put("errMsg", e.toString());
    			return modelMap;
    		}
    		
    		try {
    			//
    			product = mapper.readValue(productStr,Product.class);
    			
    		}catch(Exception e) {
    			modelMap.put("success", false);
    			modelMap.put("errMsg", e.toString());
    			return modelMap;
    		}
    		//若product信息,缩略图、详情图不为空,则开始进行商品添加操作
    		if(product != null && thumbnail != null &&productImgList.size() != 0) {
    			try {
    				//从session中获取当前店铺的ID,并赋值给product,减少对前端数据的依赖
    				Shop currentShop = (Shop) request.getSession().getAttribute("currentShop");
    				product.setShop(currentShop);
    				//执行添加操作
    				ProductExecution pe = productService.addProduct(product, thumbnail, productImgList);
    				if(pe.getState() == ProductStateEnum.SUCCESS.getState()) {
    					modelMap.put("success", true);
    				}else {
    					modelMap.put("success", false);
    					modelMap.put("errMsg", pe.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;
    	}
    }
    
    
  • 相关阅读:
    三.装饰器函数
    二.函数进阶
    生成器
    一个列表实现__iter__和__next__方法的例子
    可迭代对象和迭代器
    asyncio模块实现线程的嵌套和穿插
    线程的阻塞
    利用collections下的counter实现对列表重复元素的查重
    queue的一些用法
    利用python deque的extend特性实现列表元素查重
  • 原文地址:https://www.cnblogs.com/csj2018/p/12458434.html
Copyright © 2011-2022 走看看