Golang实战项目-B2C电商平台项目
Posted 旧时星空
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Golang实战项目-B2C电商平台项目相关的知识,希望对你有一定的参考价值。
Golang实战项目-B2C电商平台项目(4)
多表查询正确显示叶子类目
- 查询完商品信息后可以通过商品信息中Cid做为商品类目表的主键值进行查询
- 页面中最终数据的效果和TbItem只差一个属性所以可以通过组合的形式实现
type TbItemChild struct {
TbItem
CategoryName string
}
-
整体架构使用分层实现,商品类目代码也属于商品模块中功能,所以在item文件夹下新建cat文件夹.在cat文件夹中编写类目的代码.
-
由于需要把商品类目查询的功能暴露给item包下,所以编写商品类目业务代码时函数名称首字母大写.
-
不暴露数据库访问层代码
-
在item文件夹下新建cat文件夹
-
在cat中新建TbItemCat.go
-
//商品类目
type TbItemCat struct {
Id int
ParentId int
Name string
Status byte
SortOrder int8
IsParent byte
Created string
Updated string
}
在item/cat下新建TbItemCatDao.go实现根据主键查询
import (
"commons"
"fmt"
)
func selByIdDao(id int) (t *TbItemCat){
rows,err:=commons.Dql("select * from tb_item_cat where id=?",id)
if err!=nil{
fmt.Println(err)
return nil
}
if rows.Next(){
t =new (TbItemCat)
rows.Scan(&t.Id,&t.ParentId,&t.Name,&t.Status,&t.SortOrder,&t.IsParent,&t.Created,&t.Updated)
}
commons.CloseConn()
return
}
在item/cat下新建TbItemCatService.go,并把函数暴露
//根据id查询类目
func ShowCatByIdService(id int) *TbItemCat {
return selByIdDao(id)
}
在item/TbItem.go中添加代码
//给页面使用,实现商品类目
type TbItemChild struct {
TbItem
CategoryName string
}
修改item/TbItemService.go中代码
import (
"commons"
"item/cat"
)
func showItemService(page,rows int) (e *commons.Datagrid){
ts:=selByPageDao(rows,page)
if ts!=nil{
itemChildren :=make([]TbItemChild,0)
for i:=0;i<len(ts);i++{
var itemChild TbItemChild
itemChild.Id = ts[i].Id
itemChild.Updated=ts[i].Updated
itemChild.Created=ts[i].Created
itemChild.Status=ts[i].Status
itemChild.Barcode=ts[i].Barcode
//itemChild.Cid=ts[i].Cid
//itemChild.Image=ts[i].Image
itemChild.Price=ts[i].Price
itemChild.Num=ts[i].Num
itemChild.SellPoint=ts[i].SellPoint
itemChild.Title=ts[i].Title
itemChild.CategoryName = cat.ShowCatByIdService(ts[i].Cid).Name
itemChildren= append(itemChildren,itemChild)
}
e= new(commons.Datagrid)
e.Rows=itemChildren
e.Total=selCount()
return
}
return nil
}
商品删除
- 页面支持多条删除.客户端向服务端传递的是拼接好的字符串,服务端需要对内容进行拆分
- 根据数据库中tb_item表设计,数据删除是逻辑删除,即删除时修改tb_item中status为3
- 商品的删除,下架,上架都是修改status列的值,dao编写时要考虑复用
- 服务器接收后删除多条数据,返回EgoResult对应的JSON数据,客户端根据返回数据的Status判断是否删除成功
$.post("/item/delete",{"ids":ids},function (data) {
if (data.Status==200){
$.messager.show({
title:'系统消息',
msg:'删除'+ids+'成功',
showType:'show',
showType:'slide'
});
$("#item_table").datagrid("reload")
}else{
$.messager.show({
title:'系统消息',
msg:'删除失败',
showType:'show',
showType:'slide'
});
}
})
在页面中Datagrid中已经编写了代码,根据不同status值显示不同效果
{field: 'Status', title: '状态', width: 100,formatter: function(value,row,index){
if (value==1){
return "正常";
}else if (value==2){
return "<span style='color:blue'>下架</span>";
}else if (value==3){
return "<span style='color:red'>删除</span>";
}
}
},
代码
/*在TbItemDao中添加函数,实现删除
返回值如果小于0表示更新失败
*/
func updStatusByIdsDao(ids []string,status int) int{
if len(ids)<=0{
return -1
}
sql:="update tb_item set status=? where "
for i:=0;i<len(ids);i++{
sql+=" id="+ids[i]
if i<len(ids)-1{
sql+=" or "
}
}
count,err := commons.Dml(sql,status)
if err!=nil{
fmt.Println(err)
return -1
}
return int(count)
}
在TbItemService.go中添加函数
//删除商品
func delByIdsService(ids string) (e commons.EgoResult){
count:=updStatusByIdsDao(strings.Split(ids,","),3)
if count>0{
e.Status=200
}
return
}
在TbItemController.go中添加函数,并修改ItemHandler()函数内容
//商品删除
func delByIdsController(w http.ResponseWriter, r *http.Request) {
ids:=r.FormValue("ids")
er:=delByIdsService(ids)
b,_:=json.Marshal(er)
w.Header().Set("Content-Type","application/json;charset=utf-8")
w.Write(b)
}
func ItemHandler() {
commons.Router.HandleFunc("/showItem", showItemController)
commons.Router.HandleFunc("/item/delete", delByIdsController)
}
以上是关于Golang实战项目-B2C电商平台项目的主要内容,如果未能解决你的问题,请参考以下文章