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

目录

五、产品属性值设置

5.1 前端需求 

5.2 前端代码

5.3 后端接口

5.3.1 PropertyValueService

5.3.2 PropertyValueServiceImpl

5.3.3 PropertyValueController

六、用户管理

6.1 前端需求

6.2 前端代码

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 后端接口

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值