天猫整站(简易版)SSM(五)

目录

五、产品属性值设置

5.1 前端需求 

5.2 前端代码

5.3 后端接口

5.3.1 PropertyValueService

5.3.2 PropertyValueServiceImpl

5.3.3 PropertyValueController

六、用户管理

6.1 前端需求

6.2 前端代码

扫描二维码关注公众号,回复: 3539103 查看本文章

6.3 后端接口

6.3.1 UserService

6.3.2 UserServiceImpl

6.3.3 UserController

七、订单管理

7.1 前端需求

7.2 前端页面

7.3 后端接口


五、产品属性值设置

为PropertyValue增加一个property属性以及getter,setter

5.1 前端需求 

点击设置属性,然后跳转到设置页面

只有修改和显示功能。

5.2 前端代码

<%--
  Created by IntelliJ IDEA.
  User: 
  Date: 2018/9/20
  Time: 10:05
  To change this template use File | Settings | File Templates.
--%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
         pageEncoding="UTF-8" import="java.util.*"%>

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@include file="../include/admin/adminHeader.jsp"%>
<%@include file="../include/admin/adminNavigator.jsp"%>

<title>编辑产品属性值</title>
<script>
    $(function() {
        $("input.pvValue").keyup(function(){
            var value = $(this).val();
            var page = "admin_propertyValue_update";
            var pvid = $(this).attr("pvid");
            var parentSpan = $(this).parent("span");
            parentSpan.css("border","1px solid yellow");
            $.post(
                page,
                {"value":value,"id":pvid},
                function(result){
                    if("success" === result)
                        parentSpan.css("border","1px solid green");
                    else
                        parentSpan.css("border","1px solid red");
                }
            );
        });
    });
</script>
<div class="workingArea">
    <ol class="breadcrumb">
        <li><a href="admin_category_list">所有分类</a></li>
        <li><a href="admin_product_list?cid=${product.category.id}">${product.category.name}</a></li>
        <li class="active">${product.name}</li>
        <li class="active">编辑产品属性</li>
    </ol>

    <div class="editPVDiv">
        <c:forEach items="${list}" var="pv">
            <div class="eachPV">
                <span class="pvName" >${pv.property.name}</span>
                <span class="pvValue"><input style="outline: none" class="pvValue" pvid="${pv.id}" type="text" value="${pv.value}"></span>
            </div>
        </c:forEach>
        <div style="clear:both"></div>
    </div>
</div>

5.3 后端接口

5.3.1 PropertyValueService

package com.li.tmall.service;

import com.li.tmall.pojo.Product;
import com.li.tmall.pojo.PropertyValue;

import java.util.List;

/**
 * @Author: 98050
 * Time: 2018-09-19 22:45
 * Feature:CRUD
 */
public interface PropertyValueService {

    /**
     * 初始化
     * @param product
     */
    void init(Product product);

    /**
     * 更新属性值
     * @param propertyValue
     */
    void update(PropertyValue propertyValue);

    /**
     * 获取属性值
     * @param ptid
     * @param pid
     * @return
     */
    PropertyValue get(Integer ptid,Integer pid);

    /**
     * 根据商品id查询对应属性
     * @param pid
     * @return
     */
    List<PropertyValue> list(Integer pid);
}

5.3.2 PropertyValueServiceImpl

PropertyValueServiceImpl实现了PropertyValueService:
1. get(int ptid, int pid)
根据属性id和产品id获取PropertyValue对象

2. list(int pid)
根据产品id获取所有的属性值

3. init方法
3.1 这个方法的作用是初始化PropertyValue。 为什么要初始化呢? 因为对于PropertyValue的管理,没有增加,只有修改。 所以需要通过初始化来进行自动地增加,以便于后面的修改。
3.2 首先根据产品获取分类,然后获取这个分类下的所有属性集合
3.3 然后用属性和id产品id去查询,看看这个属性和这个产品,是否已经存在属性值了。
3.4 如果不存在,那么就创建一个属性值,并设置其属性和产品,接着插入到数据库中。
这样就完成了属性值的初始化。 

4. update(PropertyValue pv)
更新

package com.li.tmall.service.impl;

import com.li.tmall.mapper.PropertyValueMapper;
import com.li.tmall.pojo.Product;
import com.li.tmall.pojo.Property;
import com.li.tmall.pojo.PropertyValue;
import com.li.tmall.pojo.PropertyValueExample;
import com.li.tmall.service.PropertyService;
import com.li.tmall.service.PropertyValueService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @Author: 98050
 * Time: 2018-09-19 22:57
 * Feature:CRUD
 */
@Service
public class PropertyValueServiceImpl implements PropertyValueService {

    @Autowired
    private PropertyValueMapper propertyValueMapper;

    @Autowired
    private PropertyService propertyService;


    @Override
    public void init(Product product) {
        List<Property> list = propertyService.list(product.getCid());

        for (Property property : list){
            PropertyValue propertyValue = get(property.getId(),product.getId());
            if (propertyValue == null){
                propertyValue = new PropertyValue();
                propertyValue.setPid(product.getId());
                propertyValue.setPtid(property.getId());
                propertyValueMapper.insertSelective(propertyValue);
            }
        }
    }

    @Override
    public void update(PropertyValue propertyValue) {
        propertyValueMapper.updateByPrimaryKeySelective(propertyValue);
    }

    @Override
    public PropertyValue get(Integer ptid, Integer pid) {
        PropertyValueExample example = new PropertyValueExample();
        example.createCriteria().andPtidEqualTo(ptid).andPidEqualTo(pid);
        List<PropertyValue> list = propertyValueMapper.selectByExample(example);
        if (!list.isEmpty()){
            return list.get(0);
        }else {
            return null;
        }
    }

    @Override
    public List<PropertyValue> list(Integer pid) {
        PropertyValueExample example = new PropertyValueExample();
        example.createCriteria().andPidEqualTo(pid);
        List<PropertyValue> list = propertyValueMapper.selectByExample(example);
        for (PropertyValue propertyValue : list){
            propertyValue.setProperty(propertyService.get(propertyValue.getPtid()));
        }
        return list;
    }
}

5.3.3 PropertyValueController

package com.li.tmall.controller;

import com.li.tmall.pojo.Product;
import com.li.tmall.pojo.PropertyValue;
import com.li.tmall.service.ProductService;
import com.li.tmall.service.PropertyValueService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.List;

/**
 * @Author: 98050
 * Time: 2018-09-20 09:55
 * Feature:
 */
@Controller
@RequestMapping("")
public class PropertyValueController {

    @Autowired
    private PropertyValueService propertyValueService;

    @Autowired
    private ProductService productService;

    @RequestMapping("admin_propertyValue_edit")
    public String edit(Model model, Integer pid){
        Product product = productService.get(pid);

        propertyValueService.init(product);

        List<PropertyValue> list = propertyValueService.list(pid);

        model.addAttribute("product",product);
        model.addAttribute("list",list);
        return "admin/editPropertyValue";
    }

    @RequestMapping("admin_propertyValue_update")
    @ResponseBody
    public String update(PropertyValue propertyValue){
        propertyValueService.update(propertyValue);
        return "success";
    }



}

5.3.3.1 编辑功能

通过产品管理界面的设置属性,跳到编辑页面
调用PropertyValueController的edit方法:
1. 根据pid获取product对象,因为面包屑导航里需要显示产品的名称和分类的连接。
2. 初始化属性值: propertyValueService.init(p)。 因为在第一次访问的时候,这些属性值是不存在的,需要进行初始化。
3. 根据产品,获取其对应的属性值集合。
4. 服务端跳转到editPropertyValue.jsp 上
5. 在editPropertyValue.jsp上,用c:forEach遍历出这些属性值

5.3.3.2 修改功能

修改功能采用的是使用post方式提交ajax的异步调用方式

1. 监听输入框上的keyup事件
2. 获取输入框里的值
3. 获取输入框上的自定义属性pvid,这就是当前PropertyValue对应的id
4. 把边框的颜色修改为黄色,表示正在修改的意思
5. 借助JQuery的ajax函数 $.post,把id和值,提交到admin_propertyValue_update
6. admin_propertyValue_update导致PropertyValueController的update方法被调用
6.1 参数 PropertyValue 获取浏览器Ajax方式提交的参数
6.2 通过 propertyValueService.update(propertyValue) 更新到数据库
6.3 结合方法update上的注解@ResponseBody和return "success" 就会向浏览器返回字符串 "success"
6.4 propertyValueService调用的是propertValueMapper.updateByPrimaryKeySelective(pv); 这个方法只会更新propertyValue存在的字段,而参数PropertyValue只有id和value有值,所以即便这个PropertyValue对象没有pid和ptid值,修改的时候也不会影响该PropertyValue的pid和ptid。
7 浏览器判断如果返回值是"success",那么就把边框设置为绿色,表示修改成功,否则设置为红色,表示修改失败

5.3.3.3 删除,增加功能不需要

属性的维护是在分类中进行,这里仅仅做值的设置。 不提供删除和增加功能

六、用户管理

6.1 前端需求

6.2 前端代码

6.3 后端接口

6.3.1 UserService

package com.li.tmall.service;

import com.li.tmall.pojo.User;

import java.util.List;

/**
 * @Author: 98050
 * Time: 2018-09-20 10:50
 * Feature:R
 */
public interface UserService {

    /**
     * 用户列表
     * @return
     */
    List<User> list();

    /**
     * 在查询订单时,为订单项中的user字段赋值
     * @param id
     * @return
     */
    User get(Integer id);
}

6.3.2 UserServiceImpl

package com.li.tmall.service.impl;

import com.li.tmall.mapper.UserMapper;
import com.li.tmall.pojo.User;
import com.li.tmall.pojo.UserExample;
import com.li.tmall.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @Author: 98050
 * Time: 2018-09-20 10:53
 * Feature:
 */
@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserMapper userMapper;

    @Override
    public List<User> list() {
        UserExample example = new UserExample();
        example.setOrderByClause("id desc");
        return userMapper.selectByExample(example);
    }

    @Override
    public User get(Integer id) {
        return userMapper.selectByPrimaryKey(id);
    }
}

6.3.3 UserController

package com.li.tmall.controller;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.li.tmall.pojo.User;
import com.li.tmall.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import util.Page;

import java.util.List;

/**
 * @Author: 98050
 * Time: 2018-09-20 10:55
 * Feature:
 */
@Controller
@RequestMapping("")
public class UserController {

    @Autowired
    private UserService userService;

    @RequestMapping("admin_user_list")
    public String list(Model model, Page page){
        PageHelper.offsetPage(page.getStart(),page.getCount());
        List<User> users = userService.list();
        int total = (int) new PageInfo<>(users).getTotal();
        page.setTotal(total);

        model.addAttribute("users",users);
        model.addAttribute("page",page);
        return "admin/listUser";
    }
}

七、订单管理

7.1 前端需求

7.2 前端页面

7.3 后端接口

猜你喜欢

转载自blog.csdn.net/lyj2018gyq/article/details/82860756