复习电商笔记-12-商品代码

第三天:商品管理+图片上传+属性注入+Nginx动静分离

思考:

序号

知识点

类型

难度系数

掌握程度

  1.  

EasyUI.datagrid执行过程

技术

3

熟练

  1.  

分页PageHelper工作原理

论述

1

会用

  1.  

PropertyConfig注解实现读取属性文件值

技术

2

熟练

知识点:

序号

知识点

类型

难度系数

掌握程度

  1.  

商品表、商品描述表设计

设计

3

熟练

  1.  

商品新增、列表、修改、删除

技术

1

熟练

  1.  

EasyUI.datagrid 表格控件

技术

2

了解

  1.  

分页PageHelper、PageInfo,应用

技术

1

熟练

  1.  

域名IP映射工具 SwitchHost

技术

1

熟练

 

 

商品新增

 

 

分析item-add.jsp的执行过程

EasyUI页面控件,点击提交按钮,执行submitForm事件,submit方法中首先进行页面校验,通过校验后,将页面提交的内容拼接为json串,将json串写入itemParams隐藏域,然后post提交/item/save,保存成功后返回data数据,data对象中有个status属性,当等于200,表示成功。Data对象的格式特殊定义SysResult,提示新增商品成功。

 

 

*新增保存后返回SysResult对象

传统返回值一般为一个字符串,来通知用户成功或者失败。这样的信息严重偏少。系统构造SysResult对象配合json可以返回很丰富的信息,方便用户更详细的了解执行的情况。注意它处理后都是通过json串返回,在springmvc中通过@ResponseBody标签来处理。

例如:

@RequestMapping("save")
	@ResponseBody
	public SysResult save(Item item){
		itemService.saveItem(item);
		return SysResult.ok();
	}

 

 

开发步骤

第一步:创建ItemController

package com.jt.manage.controller;

import java.util.Date;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
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.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import com.jt.common.vo.SysResult;
import com.jt.manage.pojo.Item;
import com.jt.manage.service.ItemService;

/**
 * 商品相关的业务逻辑处理
 * 
 */
@RequestMapping("item")
@Controller
public class ItemController {

    private static final Logger LOGGER = LoggerFactory.getLogger(ItemController.class);

    @Autowired
    private ItemService itemService;

    //@ Autowired
    //private ItemDescService itemDescService;

    /**
     * 新增商品数据
     */
    @RequestMapping(value = "save", method = RequestMethod.POST)
    @ResponseBody
    public SysResult saveItem(Item item, @RequestParam("desc") String desc,
            @RequestParam("itemParams") String itemParams) {

        item.setCreated(new Date());
        item.setStatus(1);
        if (item.getId() != null) {
            LOGGER.warn("传入的商品数据中包含id数据! id = {}", item.getId());
        }
     item.setId(null);	// 安全方面考虑,强制设置id为null
        itemService.save(item);

        return SysResult.ok();
    }


}

第二步:创建ItemService

package com.jt.manage.service;

import org.springframework.stereotype.Service;

import com.jt.manage.pojo.Item;

@Service
public class ItemService extends BaseService<Item>{

}

第三步:创建ItemMapper

package com.jt.manage.mapper;

import com.jt.manage.mapper.base.mapper.SysMapper;
import com.jt.manage.pojo.Item;

public interface ItemMapper extends SysMapper<Item>{

}

第四步:创建Item实体

package com.jt.manage.pojo;

import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Table(name = "tb_item")
public class Item extends BasePojo{
    
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String title;
    @Column(name = "sell_point")
    private String sellPoint;
    private Long price;
    private Integer num;
    private String barcode;
    private String image;
    private Long cid;
    private Integer status;
public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public String getSellPoint() {
        return sellPoint;
    }
    public void setSellPoint(String sellPoint) {
        this.sellPoint = sellPoint;
    }
    public Long getPrice() {
        return price;
    }
    public void setPrice(Long price) {
        this.price = price;
    }
    public Integer getNum() {
        return num;
    }
    public void setNum(Integer num) {
        this.num = num;
    }
    public String getBarcode() {
        return barcode;
    }
    public void setBarcode(String barcode) {
        this.barcode = barcode;
    }
    public String getImage() {
        return image;
    }
    public void setImage(String image) {
        this.image = image;
    }
    public Long getCid() {
        return cid;
    }
    public void setCid(Long cid) {
        this.cid = cid;
    }
    public Integer getStatus() {
        return status;
    }
    public void setStatus(Integer status) {
        this.status = status;
    }
    @Override
    public String toString() {
   return "Item [id=" + id + ", title=" + title + ", sellPoint=" + sellPoint + ", price=" + price
                + ", num=" + num + ", barcode=" + barcode + ", image=" + image + ", cid=" + cid + ", status="
                + status + ", created=" + getCreated() + ", updated=" + getUpdated() + "]";
    }

}

 

 

常见错误:不能找到SysResult

jt-common工程mvn install,将jar包发布到本地仓库,其他项目才可以访问。

商品编辑

 

 

图片回显

执行流程:

页面加载创建toolbar EasyUI的工具栏,在点击“编辑”按钮时,创建一个window。打开窗口从选择的第一个记录中获取数据,通过$("#itemeEditForm").form("load",

data);表单回显数据,再执行KindEditorUtil.init方法,从数据中获取到图片链接字符串,init方法又调用common.js中的this.initPicUpload(data)方法,这个方法中又判断图片的链接,多个进行拆分,并显示。

if(data && data.pics){
	var imgs = data.pics.split(",");
	for(var i in imgs){
		if($.trim(imgs[i]).length > 0){
			_ele.siblings(".pics").find("ul").append("<li><a href='"+imgs[i]+"' target='_blank'><img src='"+imgs[i]+"' width='80' height='50' /></a></li>");
		}
	}
}

​​​​​商品信息修改保存

在item-edit.jsp修改保存

$.post("/item/update",$("#itemeEditForm").serialize(), function(data){
	if(data.status == 200){
		$.messager.alert('提示','修改商品成功!','info',function(){
			$("#itemEditWindow").window('close');
			$("#itemList").datagrid("reload");
		});
	}
});

在ItemController中新增修改方法

@RequestMapping(value = "update", method = RequestMethod.POST)
@ResponseBody
public SysResult updateItem(Item item, @RequestParam("desc") String desc,
   @RequestParam("itemParams") String itemParams) {
this.itemService.updateItem(item, desc, itemParams);
	return SysResult.ok();
}

    在ItemService中新增修改方法

public void updateItem(Item item, String desc, String itemParams) {
	item.setUpdated(new Date());

	item.setCreated(null);// 强制设置为null
	super.updateSelective(item);

	// 更新商品描述数据
	ItemDesc itemDesc = new ItemDesc();
	itemDesc.setUpdated(new Date());
	itemDesc.setItemId(item.getId());
	itemDesc.setItemDesc(desc);
	this.itemDescService.updateSelective(itemDesc);
}

 

商品删除

 

 

实现批量删除(物理删除)

item-list.jsp中js代码

text:'删除',
iconCls:'icon-cancel',
handler:function(){
	var ids = getSelectionsIds();
	if(ids.length == 0){
		$.messager.alert('提示','未选中商品!');
		return ;
	}
	$.messager.confirm('确认','确定删除ID为 '+ids+' 的商品吗?',function(r){
	    if (r){
		var params = {"ids":ids};
		$.post("/item/delete",params, function(data){
			if(data.status == 200){
				$.messager.alert('提示','删除商品成功!',undefined,function(){
					$("#itemList").datagrid("reload");
			});
			}
		});
	    }
	});
}

ItemController中添加删除方法

@RequestMapping(value = "delete", method = RequestMethod.POST)
@ResponseBody
public SysResult deleteItem(@RequestParam("ids") String ids) {
	this.itemService.deleteByIds(ids.split(","));
	return SysResult.ok();
}

 

商品下架和上架

有些商品违反规定会被暂时下架,整改合格后会重新上架。下架商品用户将无法访问。

 

 

ItemMapper.xml

<!-- 上架reshelf下架instock map(status,array[1,2,3])-->
<update id="updateStatus" parameterType="map">
update tb_item set status=#{status} 
	where id in 
<foreach collection="ids" item="id" open="(" close=")" separator=",">
	#{id}
</foreach>
</update>

 

 

ItemMapper.java

package com.jt.manage.mapper;

import java.util.List;
import java.util.Map;

import com.jt.common.mapper.SysMapper;
import com.jt.manage.pojo.Item;

public interface ItemMapper extends SysMapper<Item>{
	public List<Item> list();
	//上架,下架
	public void updateStatus(Map<String,Object> map);
}

ItemService

public void updateStatus(Integer status, Long[] ids){
	Map<String,Object> params = new HashMap<String,Object>();
	params.put("status", status);
	params.put("ids", ids);
	
	itemMapper.updateStatus(params);
}

 

 

ItemController

//下架
	@RequestMapping("/instock")
	@ResponseBody
	public SysResult instock(Long[] ids){
		try{
			itemService.updateStatus(2, ids);		//2下架
			return SysResult.oK();
		}catch(Exception e){
			log.error(e.getMessage());
			return SysResult.build(201, "修改为下架状态失败!");
		}
	}
	
	//上架
	@RequestMapping("/reshelf")
	@ResponseBody
	public SysResult reshelf(Long[] ids){
		try{
			itemService.updateStatus(1, ids);		//1正常
			return SysResult.oK();
		}catch(Exception e){
			log.error(e.getMessage());
			return SysResult.build(201, "修改为上架状态失败!");
		}
	} 

 

 

自考“电子商务案例分析”笔记   第一章 概述   一、案例分析的重要性   1.电子商务的概念、特点   概念:交易当事人或参与人利用计算机技术和网络技术等现代信息技术所进行的各类商务活动,它包括货物贸易、服务贸易和知识产权贸易等。   特点:虚拟性、低成本性、个性化、敏捷性、全球性   2.案例分析的重要性   电子商务蓬勃发展,喜忧参半。   理论研究滞后于电子商务的实际发展,总结成功或失败的经验教训有助于将来电子商务的发展。   从教学的角度,三个方面:深化巩固以前的学习;有助于实践联系理论;逼真的模拟环境训练,有助于教学相长。   二、案例的分类(按专业分)   1.网站建设与维护:电子商务网站硬件建设核心   2.网站内容设计:电子商务网站软件建设核心   3.B2C   4.B2B   5.服务案例   6.EDI案例:EDI主要应用于国际贸易与政府采购,用于企业与企业、企业与批发商、批发商与零售商之间的批发业务。   三、案例分析的主要内容   1.网站背景资料:经营团队、经营策略、投资方、合作伙伴、有无上市计划等。   2.网站建设与维护方法分析:网络平台技术分析、网站安全技术分析、网站维护方法分析。   3.网站经营特色分析:内容设计、营销方法、支付方式、物流配送方式。   4.网站效益分析:盈亏状况、经营风险、竞争优势与劣势、网站发展前景。   四、案例分析的常用方法   综合分析、比较分析、统计分析   五、相关案例   8848、亚马逊
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值