基于javaweb+mysql的ssm水果蔬菜商城系统(java+ssm+jsp+mysql)
私信源码获取及调试交流
运行环境
Java≥8、MySQL≥5.7、Tomcat≥8
开发工具
eclipse/idea/myeclipse/sts等均可配置运行
适用
课程设计,大作业,毕业设计,项目练习,学习演示等
功能说明
基于javaweb的SSM水果蔬菜商城系统(java+ssm+jsp+mysql)
项目描述:这是一个基于SSM框架开发的水果蔬菜商城系统。首先,这个项目页面简洁清爽,易于理解和学习。其次,这个项目功能丰富,具有一个在线水果蔬菜商城该有的所有功能,并且还涉及到沙箱支付宝支付等等技术亮点。
项目功能:此项目分为三个角色:客户、卖家和管理员。客户有登录注册、浏览商品信息、添加购物车、支付订单、收藏商品、评论商品等等功能。卖家有管理自己的商品、管理自己的订单、管理自己个人信息等等功能。管理员具有管理所有用户信息、管理所有商品信息、管理所有评论信息、管理商品种类信息、管理所有订单信息等等功能。
应用技术:Jsp + SSM + MySQL + 沙箱支付宝
运行环境:Eclipse/IntelliJ IDEA + MySQL5.7(项目压缩包中自带) + Tomcat7.0(项目压缩包中自带) + JDK1.8
/**
* 前台商品控制器
*
*/
@RequestMapping("/product")
@Controller
public class HomeProductController {
@Autowired
private AccountService accountService;
@Autowired
private ProductCategoryService productCategoryService;
@Autowired
private ProductService productService;
@Autowired
private CommentService commentService;
/**
* 商品详情页面
* @param model
* @return
*/
@RequestMapping(value = "/detail",method = RequestMethod.GET)
public ModelAndView index(ModelAndView model,Long id){
model.addObject("productCategoryList", MenuUtil.getTreeCategory(productCategoryService.findList(new HashMap<String, Object>())));
model.addObject("allCategoryId","shop_hd_menu_all_category");
if(id == null){
model.addObject("msg", "非法商品id");
model.setViewName("home/common/error");
return model;
}
Product product = productService.findById(id);
if(product == null || product.getState() != 2){
model.addObject("msg", "商品不存在或未审核通过!");
model.setViewName("home/common/error");
return model;
}
model.addObject("product", product);
Map<String, Object> queryMap = new HashMap<String, Object>();
queryMap.put("offset", 0);
*/
@RequestMapping(value="/delete",method=RequestMethod.POST)
@ResponseBody
public Map<String, String> delete(Long id){
Map<String, String> ret = new HashMap<String, String>();
if(id == null){
ret.put("type", "error");
ret.put("msg", "请选择要删除的角色!");
return ret;
}
try {
if(roleService.delete(id) <= 0){
ret.put("type", "error");
ret.put("msg", "删除失败,请联系管理员!");
return ret;
}
} catch (Exception e) {
// TODO: handle exception
ret.put("type", "error");
ret.put("msg", "该角色下存在权限或者用户信息,不能删除!");
return ret;
}
ret.put("type", "success");
ret.put("msg", "角色删除成功!");
return ret;
}
/**
* 获取所有的菜单信息
* @return
*/
@RequestMapping(value="/get_all_menu",method=RequestMethod.POST)
@ResponseBody
public List<Menu> getAllMenu(){
Map<String, Object> queryMap = new HashMap<String, Object>();
queryMap.put("offset", 0);
queryMap.put("pageSize", 99999);
return menuService.findList(queryMap);
}
/**
* 添加权限
* @param ids
* @return
*/
@RequestMapping(value="/add_authority",method=RequestMethod.POST)
@ResponseBody
public Map<String, String> addAuthority(
@RequestParam(name="ids",required=true) String ids,
@RequestParam(name="roleId",required=true) Long roleId
* @return
*/
@RequestMapping(value="/list",method=RequestMethod.POST)
@ResponseBody
public Map<String, Object> getMenuList(Page page,
@RequestParam(name="name",required=false,defaultValue="") String name
){
Map<String, Object> ret = new HashMap<String, Object>();
Map<String, Object> queryMap = new HashMap<String, Object>();
queryMap.put("offset", 0);
queryMap.put("pageSize", 500);
queryMap.put("name", name);
List<Menu> findList = menuService.findList(queryMap);
ret.put("rows", findList);
ret.put("total", menuService.getTotal(queryMap));
return ret;
}
/**
* 获取指定目录下的系统icon集合
* @param request
* @return
*/
@RequestMapping(value="/get_icons",method=RequestMethod.POST)
@ResponseBody
public Map<String, Object> getIconList(HttpServletRequest request){
Map<String, Object> ret = new HashMap<String, Object>();
String realPath = request.getServletContext().getRealPath("/");
File file = new File(realPath + "\\resources\\admin\\easyui\\css\\icons");
List<String> icons = new ArrayList<String>();
if(!file.exists()){
ret.put("type", "error");
ret.put("msg", "文件目录不存在!");
return ret;
}
File[] listFiles = file.listFiles();
for(File f:listFiles){
if(f!= null && f.getName().contains("png")){
icons.add("icon-" + f.getName().substring(0, f.getName().indexOf(".")).replace("_", "-"));
}
}
ret.put("type", "success");
ret.put("content", icons);
return ret;
}
/**
* 菜单添加
* @param menu
* @return
*/
/**
* 商品分类管理控制器
*
*/
@RequestMapping("/admin/product_category")
@Controller
public class ProductCategoryController {
@Autowired
private ProductCategoryService productCategoryService;
/**
* 商品分类列表页
* @param model
* @return
*/
@RequestMapping(value="/list",method=RequestMethod.GET)
public ModelAndView list(ModelAndView model){
model.setViewName("product_category/list");
return model;
}
/**
* 查询商品分类列表
* @param name
* @param page
* @return
*/
@RequestMapping(value="/list",method=RequestMethod.POST)
@ResponseBody
public Map<String, Object> list(@RequestParam(name="name",defaultValue="")String name,
queryMap.put("userId", onlineAccount.getId());
queryMap.put("productId", product.getId());
Cart existCart = cartService.findByIds(queryMap);
if(existCart != null){
//表示这个商品已经被添加到购物车,只需更新数量和金额即可
existCart.setNum(existCart.getNum() + cart.getNum());
existCart.setMoney(existCart.getNum() * existCart.getPrice());
if(cartService.edit(existCart) <= 0){
ret.put("msg", "商品已被添加到购物车,但更新数量出错!");
return ret;
}
ret.put("type", "success");
return ret;
}
cart.setImageUrl(product.getImageUrl());
cart.setMoney(product.getPrice() * cart.getNum());
cart.setName(product.getName());
cart.setPrice(product.getPrice());
cart.setUserId(onlineAccount.getId());
cart.setCreateTime(new Date());
if(cartService.add(cart) <= 0){
ret.put("msg", "添加失败,请联系管理员!");
return ret;
}
ret.put("type", "success");
return ret;
}
/**
* 更新购物车商品数量
* @param cartId
* @param num
* @return
*/
@RequestMapping(value = "/update_num",method = RequestMethod.POST)
@ResponseBody
public Map<String, String> updateNum(Long cartId,Integer num){
Map<String, String> ret = new HashMap<String, String>();
ret.put("type", "error");
Cart cart = cartService.findById(cartId);
if(cart == null){
ret.put("msg", "请选择正确的商品信息");
return ret;
}
if(num == null){
ret.put("msg", "编辑成功!");
return ret;
}
/**
* 删除商品分类
* @param id
* @return
*/
@RequestMapping(value="/delete",method=RequestMethod.POST)
@ResponseBody
public Map<String, Object> delete(Long id){
Map<String, Object> ret = new HashMap<String, Object>();
if(id == null){
ret.put("type", "error");
ret.put("msg", "请选择要删除的分类");
return ret;
}
try {
if(productCategoryService.delete(id) <= 0){
ret.put("type", "error");
ret.put("msg", "删除失败,请联系管理员!");
return ret;
}
} catch (Exception e) {
// TODO: handle exception
ret.put("type", "error");
ret.put("msg", "该分类下存在商品信息,不允许删除!");
return ret;
}
ret.put("type", "success");
ret.put("msg", "删除成功!");
return ret;
}
/**
* 根据列表生成二级树形关系分类
* @param productCategorieList
* @return
*/
private List<Map<String, Object>> getTreeCategory(List<ProductCategory> productCategorieList){
List<Map<String, Object>> ret = new ArrayList<Map<String,Object>>();
//所有的父分类整理
for(ProductCategory productCategory : productCategorieList){
if(productCategory.getParentId() == null){
Map<String, Object> top = new HashMap<String, Object>();
top.put("id", productCategory.getId());
top.put("text", productCategory.getName());
top.put("children", new ArrayList<Map<String,Object>>());
ret.add(top);
}
if(findByUsername == null){
ret.put("type", "error");
ret.put("msg", "该用户名不存在!");
logService.add("登录时,用户名为"+user.getUsername()+"的用户不存在!");
return ret;
}
if(!user.getPassword().equals(findByUsername.getPassword())){
ret.put("type", "error");
ret.put("msg", "密码错误!");
logService.add("用户名为"+user.getUsername()+"的用户登录时输入密码错误!");
return ret;
}
//说明用户名密码及验证码都正确
//此时需要查询用户的角色权限
Role role = roleService.find(findByUsername.getRoleId());
List<Authority> authorityList = authorityService.findListByRoleId(role.getId());//根据角色获取权限列表
String menuIds = "";
for(Authority authority:authorityList){
menuIds += authority.getMenuId() + ",";
}
if(!StringUtils.isEmpty(menuIds)){
menuIds = menuIds.substring(0,menuIds.length()-1);
}
List<Menu> userMenus = menuService.findListByIds(menuIds);
//把角色信息、菜单信息放到session中
request.getSession().setAttribute("admin", findByUsername);
request.getSession().setAttribute("role", role);
request.getSession().setAttribute("userMenus", userMenus);
ret.put("type", "success");
ret.put("msg", "登录成功!");
logService.add("用户名为{"+user.getUsername()+"},角色为{"+role.getName()+"}的用户登录成功!");
return ret;
}
/**
* 后台退出注销功能
* @param request
* @return
*/
@RequestMapping(value="/logout",method=RequestMethod.GET)
public String logout(HttpServletRequest request){
HttpSession session = request.getSession();
session.setAttribute("admin", null);
session.setAttribute("role", null);
request.getSession().setAttribute("userMenus", null);
return "redirect:login";
}
/**
* 修改密码页面
* @param model
* @return
*/
/**
* 系统操作类控制器
*
*/
@Controller
@RequestMapping("/system")
public class SystemController {
@Autowired
private UserService userService;
@Autowired
private RoleService roleService;
@Autowired
private AuthorityService authorityService;
@Autowired
private MenuService menuService;
@Autowired
private LogService logService;
/**
* 系统登录后的主页
* @param model
* @return
*/
@RequestMapping(value="/index",method=RequestMethod.GET)
public ModelAndView index(ModelAndView model,HttpServletRequest request){
List<Menu> userMenus = (List<Menu>)request.getSession().getAttribute("userMenus");
model.addObject("topMenuList", MenuUtil.getAllTopMenu(userMenus));
model.addObject("secondMenuList", MenuUtil.getAllSecondMenu(userMenus));
model.setViewName("system/index");
return model;//WEB-INF/views/+system/index+.jsp = WEB-INF/views/system/index.jsp
}
/**
@Controller
public class AliPayController {
//==========================这些信息未经作者允许,不允许分享使用!!!=================================
private final String APP_ID = "2016110300790563";
private final String APP_PRIVATE_KEY = "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCCsWvZktzLxZhB8yFUp0f98s3uPegxu0p95sYwwSurm9FrCqn8jEJaR92git/i19QsODjE4KFY85O+AVrcZEDJoqubf8Pc5tCGcaCI1Ho+OD2LHW31cmDj29tlLHi2SlsL9EynSD/LL2DsG1Ufj12/TkuWPVAzjwsf/NJwiKV9mTIX/I88RvCJV2tqX8vT8V5LuHvI27vmGeKTgioExymrv6GQlhM1aHv3w2GMShp/n5wY1S0bhgMLL5zzO3FJSOKrOBPTYh0sCLAhvcD7vDXDH3ruBVq+jbtqXkQMdHww1nmaTz/t06uqNEoofGYCKfZWSQgXnPwEQBpqdSEs8Nl/AgMBAAECggEAbYbY9pbwuUkYR7TFKxeh6r3wPQfersbiL88WK0fIHGJSR93BBahZ9yUhJGkeJhJwerqHQN9r+IrxNxwVlHvkG9da789MSrWY7gMN4X4IEFq7oPmB7F/1uR/Ipup1I3f/A26ySsLuy44iMNzbIr7YdvnbuMYbj4oCbcVIawzpe+6ThkSERg+kaqZbg9DsAjLEkUFLRLE37R2F5BgdM4Gc5Dsw6e7ZuRc1fyBwI4bbdC11oxpLTOkFQFL9aAR1iyKvaPhbV7fswYbMBmJXDTplfDLXufcZPbm7MgfbV1sIhipjf6HpNOB3Qc0WI3iWwBNrb5EGD6PbqAtZyLDBPOVz+QKBgQC4s3Xnt18XoQXqHU5cgg+XCZSkP6z5z/NB3rmvCfThFz1mMEhscw3YruvL2ohXxB0cqoI0eiH2LFMG2tw3g4aDavOLx4H2o+VjcT3rFHoePmTTXv/H+R8roE0IMOKpVQ8Mc65EEBHaZtbLAD2vEZpdv8CjBSx9hCVVC3ISF25otQKBgQC1JMfvT5ofKGUqKoqgz3+0sqd8nfkx5Q3BmeS02nhEXgLW65KThfJnez9MB+0V3f4lxJnRTwYGwh7RFL3bViAkFcO1ETwM9rW73n9tkmuAjY0OPQGiPfxnMUgmGUyR7cov8j7t/cCRUREx/GUXxAOngheDxXsZ8pSX8bPhs2ed4wKBgBwAmU+YLYKXlx33c3ny/goYGcENJlx5epfx/JTdHZNCwrxLda97gg3n9zfg2er0gLVn5HWwTpXUAoJ3jAuelTY3cNUwWjPahVyePpT1dc5AB2lEbeMTkfY7R3KGdtbVXoK0xybqiMpj7Qy57KAuOwkbmUkd77DX6BEMuy6i/spBAoGBAKAI+sqmnRdh7N6v7wHb0IuoOuiR+JLoNpsQh0pwqUhddkzCmyDSejKKZIWbiw6CrgJYCz0sf7qAzhESLhoVoRfAUsMpktAxNqXgENyRO4C7jh9CLqtT8CaLF57xQwC6AKMTdh10ziiUYoiy3+17M29OM9ArLHLkKfuDgtSoV6bZAoGATIOCxQrqrZFVe4zLCnzcAFHFQvqxeNKdeLo7fMfQhU5MnDn9TVmzHhVtNg0SfdNA4WwbVX2Per019M/UcKSjJc5uYJ8G5BZaBZ7ZNJ1JAG1TtOi0m4zAFJJG3SznJVgKOFCDeMc7shMpE2FnTXBJx39LCweTnz8PsF4T4A2/GLY=";
private final String CHARSET = "UTF-8";
private final String ALIPAY_PUBLIC_KEY = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAhdqk8i1YrbG/6bxhrSRI7IcoezOAb+fMzc4XypuM3mFV8VWs4VgurDj2latDcmcWs2vvs3abgfLrWKjiHJPnnLZ6+/gzKkcJnQqikWRUQIQH/miAPoroDE4G31U3SGyfG53c+84b3H9zCzvGDbHBOda4dxjHUqi0oOGrTA8ETtJGfJ0j73cBhlmCjJLjzMZLV25pXUTI6drGuPls6I/FnlFhnPNOP8qav9S4syadYtYpJe2SzEr6eRla0Gfz9VXXKCFWCZTm1Y6WHI2685nc/2uPpSf42izFw0DPjf0/Lhtx7SmnQaFbd55pnsL07d77/pdLzTFUQWM7CGDiT/TjHwIDAQAB";
//这是沙箱接口路径,正式路径为https://openapi.alipay.com/gateway.do
private final String GATEWAY_URL ="https://openapi.alipaydev.com/gateway.do";
private final String FORMAT = "JSON";
//签名方式
private final String SIGN_TYPE = "RSA2";
//支付宝异步通知路径,付款完毕后会异步调用本项目的方法,必须为公网地址
private final String NOTIFY_URL = "http://localhost:8080/FruitShop/alipay/returnUrl";
//支付宝同步通知路径,也就是当付款完毕后跳转本项目的页面,可以不是公网地址
private final String RETURN_URL = "http://localhost:8080/FruitShop/alipay/returnUrl";
//==========================这些信息未经作者允许,不允许分享使用!!!=================================
@Autowired
private OrderService orderService;
/**
* 支付页面
* @param req
* @param httpResponse
* @throws IOException
*/
@GetMapping("/alipay/pay")
public void alipay(HttpServletRequest req, HttpServletResponse httpResponse) throws IOException {
double totalMoney = (double) req.getSession().getAttribute("totalMoney");
Account onlineAccount = (Account)req.getSession().getAttribute("account");
Random r = new Random();
//实例化客户端,填入所需参数
AlipayClient alipayClient = new DefaultAlipayClient(GATEWAY_URL, APP_ID, APP_PRIVATE_KEY, FORMAT, CHARSET, ALIPAY_PUBLIC_KEY, SIGN_TYPE);
AlipayTradePagePayRequest request = new AlipayTradePagePayRequest();
//在公共参数中设置回跳和通知地址
request.setReturnUrl(RETURN_URL);
//request.setNotifyUrl(NOTIFY_URL);
ret.put("msg", "请填写验证码");
return ret;
}
Object codeObject = request.getSession().getAttribute("userLoginCpacha");
if(codeObject == null){
ret.put("msg", "验证码已过期,请刷新页面后重试!");
return ret;
}
if(!code.equalsIgnoreCase((String)codeObject)){
ret.put("msg", "验证码错误!");
return ret;
}
Account findByName = accountService.findByName(account.getName());
if(findByName == null){
ret.put("msg", "该用户名不存在!");
return ret;
}
if(!account.getPassword().equals(findByName.getPassword())){
ret.put("msg", "密码错误!");
return ret;
}
if(findByName.getStatus() == 0){
ret.put("msg", "该用户已被冻结,请联系管理员!");
return ret;
}
request.getSession().setAttribute("userLoginCpacha", null);
request.getSession().setAttribute("account", findByName);
ret.put("type", "success");
return ret;
}
/**
* 用户注销
* @param model
* @return
*/
@RequestMapping(value = "/logout",method = RequestMethod.GET)
public String logout(HttpServletRequest request){
request.getSession().setAttribute("account", null);
return "redirect:login";
return ret;
}
}
/**
* 订单管理控制器
*
*/
@RequestMapping("/admin/order")
@Controller
public class OrderController {
@Autowired
private OrderService orderService;
@Autowired
private AccountService accountService;
@Autowired
private UserService userService;
* @param request
* @return
*/
@RequestMapping(value = "/list_2",method = RequestMethod.GET)
public ModelAndView list2(ModelAndView model,HttpServletRequest request){
model.addObject("productCategoryList", MenuUtil.getTreeCategory(productCategoryService.findList(new HashMap<String, Object>())));
model.addObject("allCategoryId","shop_hd_menu_all_category");
Account onlineAccount = (Account)request.getSession().getAttribute("account");
List<Purse> purse = purseService.findById(onlineAccount.getId());
if(purse.size()>0) {
Purse purse2 = purse.get(0);
request.getSession().setAttribute("purseT", purse2);
model.addObject("purse",purse2);
}
Map<String, Object> queryMap = new HashMap<String, Object>();
queryMap.put("userId", onlineAccount.getId());
model.addObject("cartList", cartService.findList(queryMap));
model.addObject("currentCart", "current_");
model.addObject("addressList", addressService.findList(queryMap));
model.setViewName("home/cart/list_2");
return model;
}
/**
* 添加购物车
* @param account
* @return
*/
@RequestMapping(value = "/add",method = RequestMethod.POST)
@ResponseBody
public Map<String, String> add(Cart cart,HttpServletRequest request){
Map<String, String> ret = new HashMap<String, String>();
Account onlineAccount = (Account)request.getSession().getAttribute("account");
ret.put("type", "error");
if(cart == null){
ret.put("msg", "请选择正确的商品信息");
return ret;
}
if(cart.getProductId() == null){
ret.put("msg", "请选择要添加的商品!");
return ret;
}
/**
* 检查用户名是否存在
* @param name
* @param id
* @return
*/
private boolean isExist(String name,Long id){
Account account = accountService.findByName(name);
if(account == null)return false;
if(account.getId().longValue() == id.longValue())return false;
return true;
}
}
/**
* 前台收货地址控制器
//如果是卖家角色, 只能看到自己的订单
queryMap.put("sellerId", user.getId());
}
queryMap.put("offset", page.getOffset());
queryMap.put("pageSize", page.getRows());
ret.put("rows", orderService.findList(queryMap));
ret.put("total", orderService.getTotal(queryMap));
return ret;
}
/**
* 根据订单id查询订单子项
* @param orderId
* @return
*/
@RequestMapping(value="/get_item_list",method=RequestMethod.POST)
@ResponseBody
public Map<String, Object> itemList(Long orderId){
Map<String, Object> ret = new HashMap<String, Object>();
ret.put("rows", orderService.findOrderItemList(orderId));
return ret;
}
/**
* 编辑订单
* @param order
* @return
*/
@RequestMapping(value="/edit",method=RequestMethod.POST)
@ResponseBody
public Map<String, Object> edit(Order order){
Map<String, Object> ret = new HashMap<String, Object>();
if(order == null){
ret.put("type", "error");
ret.put("msg", "请选择正确的订单信息");
return ret;
}
if(StringUtils.isEmpty(order.getAddress())){
ret.put("type", "error");
ret.put("msg", "请填写订单收货地址");
return ret;
}
if(order.getMoney() == null){
ret.put("type", "error");
ret.put("msg", "请填写订单金额!");
return ret;
}
Map<String, Object> grandson = new HashMap<String, Object>();
grandson.put("id", productCategory.getId());
grandson.put("text", productCategory.getName());
grandsons.add(grandson);
}
}
}
}
}
return ret;
}
}
private final String RETURN_URL = "http://localhost:8080/FruitShop/alipay/returnUrl";
//==========================这些信息未经作者允许,不允许分享使用!!!=================================
@Autowired
private OrderService orderService;
/**
* 支付页面
* @param req
* @param httpResponse
* @throws IOException
*/
@GetMapping("/alipay/pay")
public void alipay(HttpServletRequest req, HttpServletResponse httpResponse) throws IOException {
double totalMoney = (double) req.getSession().getAttribute("totalMoney");
Account onlineAccount = (Account)req.getSession().getAttribute("account");
Random r = new Random();
//实例化客户端,填入所需参数
AlipayClient alipayClient = new DefaultAlipayClient(GATEWAY_URL, APP_ID, APP_PRIVATE_KEY, FORMAT, CHARSET, ALIPAY_PUBLIC_KEY, SIGN_TYPE);
AlipayTradePagePayRequest request = new AlipayTradePagePayRequest();
//在公共参数中设置回跳和通知地址
request.setReturnUrl(RETURN_URL);
//request.setNotifyUrl(NOTIFY_URL);
//商户订单号,商户网站订单系统中唯一订单号,必填
//生成随机Id
String out_trade_no = String.valueOf(UUID.randomUUID());
//付款金额,必填
String total_amount = String.valueOf(totalMoney);
//订单名称,必填
String subject ="水果蔬菜商城订单支付";
//商品描述,可空
String body = "尊敬的用户:"+onlineAccount.getName()+",欢迎您在水果蔬菜商城下单!";
request.setBizContent("{\"out_trade_no\":\""+ out_trade_no +"\","
+ "\"total_amount\":\""+ total_amount +"\","
+ "\"subject\":\""+ subject +"\","
+ "\"body\":\""+ body +"\","
/**
* 订单管理控制器
*
*/
@RequestMapping("/admin/order")
@Controller
public class OrderController {
@Autowired
private OrderService orderService;
@Autowired
private AccountService accountService;
@Autowired
private UserService userService;
/**
* 订单列表页
* @param model
* @return
*/
@RequestMapping(value="/list",method=RequestMethod.GET)
public ModelAndView list(ModelAndView model){
model.setViewName("order/list");
model.addObject("accountList", JSONArray.fromObject(accountService.findList(new HashMap<String, Object>())));
model.addObject("userList", JSONArray.fromObject(userService.findList(new HashMap<String, Object>())));
return model;
}
/**
* 前台商品控制器
*
*/
@RequestMapping("/product")
@Controller
public class HomeProductController {
@Autowired
private AccountService accountService;
@Autowired
private ProductCategoryService productCategoryService;
@Autowired
private ProductService productService;
@Autowired
private CommentService commentService;
/**
* 商品详情页面
* @param model
* @return
*/