Golang实战项目-B2C电商平台项目(4)

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)
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值