关键词:
Golang实战项目-B2C电商平台项目(8)
商品描述新增
- 商品描述表(tb_item_desc)和商品表(tb_item)具有主外键关系,商品的主键也是商品描述的主键,使用工具函数生成的主键也当作商品描述表的主键
- 商品描述中信息来源于页面中KindEditor的富文本编辑框,里面带有HTML代码直接保存就可以
- 在/item文件夹下新建desc文件夹,并在desc文件夹下新建TbItemDesc.go编写实体
ackage desc
//商品描述
type TbItemDesc struct
ItemId int
ItemDesc string
Created string
Updated string
在/item/desc下新建TbItemDescDao.go
package desc
import (
"commons"
"fmt"
)
//新增描述
func insertDescDao(t TbItemDesc ) int
count,err:=commons.Dml("insert into tb_item_desc values(?,?,?,?)",t.ItemId,t.ItemDesc,t.Created,t.Updated)
if err!=nil
fmt.Println(err)
return -1
return int(count)
在/item/desc下新建TbItemDescService.go,并把新增暴露给其他package
package desc
//新增
func Insert(t TbItemDesc) int
return insertDescDao(t)
在/item/TbItemDao.go中添加删除函数
//根据id删除
func delById(id int) int
count,err:=commons.Dml("delete from tb_item where id=?",id)
if err!=nil
fmt.Println(err)
return -1
return int(count)
修改/item/TbItemService.go中新增商品业务代码
//商品新增
func insetService(f url.Values) (e commons.EgoResult)
var t TbItem
cid,_:=strconv.Atoi(f["Cid"][0])
t.Cid =cid
t.Title = f["Title"][0]
t.SellPoint = f["SellPoint"][0]
price,_:=strconv.Atoi(f["Price"][0])
t.Price = price
num,_:=strconv.Atoi(f["Num"][0])
t.Num=num
t.Image = f["Image"][0]
t.Status = 1
date:=time.Now().Format("2006-01-02 15:04:05")
t.Created =date
t.Updated = date
id:=commons.GenId()
t.Id = id
//商品表新增执行
count :=insertItemDao(t)
if count>0
//商品描述新增
var tbItemDesc desc.TbItemDesc
tbItemDesc.ItemId = id
tbItemDesc.Created = date
tbItemDesc.Updated = date
tbItemDesc.ItemDesc = f["Desc"][0]
countDesc:=desc.Insert(tbItemDesc)
if countDesc>0
e.Status = 200
else
//删除商品中数据
delById(id)
e.Status = 400
return
商品修改页面显示信息
- 点击"查询商品"页面中编辑按钮弹出修改页面
- 要求只能选择一行进行修改
- 页面显示的数据是服务端根据客户端传递过来的商品id进行查询,查询时除了查询商品表(tb_item)以外还需要查询商品描述表(tb_item_desc)和商品类目表(tb_item_cat)把这些数据返回json
- 客户端要求商品类目名称(CategoryName)和描述(Desc)
在/item/TbItem.go中添加
//给修改页面使用
type TbItemDescChild struct
TbItem
CategoryName string
Desc string
在/item/TbItemDao.go中添加
//根据主键查询内容
func selByIdDao(id int) *TbItem
rows,err:= commons.Dql("select * from tb_item where id=?",id)
if err!=nil
fmt.Println(err)
return nil
if rows.Next()
t := new (TbItem)
var s sql.NullString
rows.Scan(&t.Id, &t.Title, &t.SellPoint, &t.Price, &t.Num, &s, &t.Image, &t.Cid, &t.Status, &t.Created, &t.Updated)
t.Barcode = s.String
return t
return nil
//根据主键查询内容
func selByIdDao(id int) *TbItem
rows,err:= commons.Dql("select * from tb_item where id=?",id)
if err!=nil
fmt.Println(err)
return nil
if rows.Next()
t := new (TbItem)
var s sql.NullString
rows.Scan(&t.Id, &t.Title, &t.SellPoint, &t.Price, &t.Num, &s, &t.Image, &t.Cid, &t.Status, &t.Created, &t.Updated)
t.Barcode = s.String
return t
return nil
-
在/item/desc/TbItemDescDao.go中添加
//根据主键查询 func selByIdDao(id int) *TbItemDesc r,err:=commons.Dql("select * from tb_item_desc where item_id=?",id) if err!=nil fmt.Println(err) return nil if r.Next() t := new(TbItemDesc) r.Scan(&t.ItemId,&t.ItemDesc,&t.Created,&t.Updated) return t return nil
//根据主键查询 func selByIdDao(id int) *TbItemDesc r,err:=commons.Dql("select * from tb_item_desc where item_id=?",id) if err!=nil fmt.Println(err) return nil if r.Next() t := new(TbItemDesc) r.Scan(&t.ItemId,&t.ItemDesc,&t.Created,&t.Updated) return t return nil
- 在/item/desc/TbItemDescService.go中添加
func SelByIdService(id int) * TbItemDesc return selByIdDao(id)
在/item/TbItemService.go中添加
//修改页面显示信息 func showItemDescCatService(id int) TbItemDescChild item := selByIdDao(id) var c TbItemDescChild c.Id = item.Id c.Updated = item.Updated c.Created = item.Created c.Barcode = item.Barcode c.Cid = item.Cid c.Title = item.Title c.SellPoint = item.SellPoint c.Price = item.Price c.Image = item.Image c.Status = item.Status c.Num = item.Num //商品类目 c.CategoryName = cat.ShowCatByIdService(c.Cid).Name //商品描述 c.Desc = desc.SelByIdService(c.Id).ItemDesc return c
在/item/TbItemController.go中添加
//显示修改页面信息 func showItemDescCatController(w http.ResponseWriter, r *http.Request) id,_:= strconv.Atoi(r.FormValue("id")) c:=showItemDescCatService(id) b,_:=json.Marshal(c) w.Header().Set(commons.HEADER_CONTENT_TYPE,commons.JSON_HEADER) w.Write(b) func ItemHandler() commons.Router.HandleFunc("/showItem", showItemController) commons.Router.HandleFunc("/item/delete", delByIdsController) commons.Router.HandleFunc("/item/instock", instockController) commons.Router.HandleFunc("/item/offstock", offstockController) commons.Router.HandleFunc("/item/imageupload", imagesUploadController) commons.Router.HandleFunc("/item/add", insertControllew) commons.Router.HandleFunc("/item/showItemById", showItemDescCatController) //商品修改页面信息显示
golang实战项目-b2c电商平台项目(代码片段)
Golang实战项目-B2C电商平台项目(5)实现商品上架本质是修改tb_item表中status=1之前在完成商品删除时已经在TbItemDao.go中编写了修改status值的函数,直接复用即可根据页面中内容,客户端给服务端发起请求后要求服务器端返回数据已... 查看详情
golang实战项目-b2c电商平台项目(代码片段)
Golang实战项目-B2C电商平台项目(4)多表查询正确显示叶子类目查询完商品信息后可以通过商品信息中Cid做为商品类目表的主键值进行查询页面中最终数据的效果和TbItem只差一个属性所以可以通过组合的形式实现typeTbItemChildstruct TbIt... 查看详情
golang实战项目-b2c电商平台项目(代码片段)
Golang实战项目-B2C电商平台项目(6)商品新增中上传图片商品新增中上传图片使用的是KindEditor的多文件上传组件.文件上传为异步上传方式.可以上传多个文件.当文件上传后要求服务器端返回数据格式如下.应该是map转换为json而不应... 查看详情
golang实战项目-b2c电商平台项目(代码片段)
Golang实战项目-B2C电商平台项目(7)商品新增商品新增时需要新增的是两个表的数据tb_item和tb_item_desc表(tb_item_param规格参数暂时不考虑),在本小节中只新增tb_item表中数据,下一小节新增商品描述新增成功后服务端返回EgoResult对应的json... 查看详情
golang实战项目-b2c电商平台项目(代码片段)
Golang实战项目-B2C电商平台项目(8)商品描述新增商品描述表(tb_item_desc)和商品表(tb_item)具有主外键关系,商品的主键也是商品描述的主键,使用工具函数生成的主键也当作商品描述表的主键商品描述中信息来源于页面中KindEditor的富文... 查看详情
golang实战项目-b2c电商平台(代码片段)
Golang实战项目-B2C电商平台(2)实现登录功能用户登录后判断帐号和密码是否正确,其中帐号可以是用户名、电话、邮箱.服务器端判断后返回EgoResult结构体对应的JSON数据,其中Status=200表示成功,成功后页面跳转到/index,Status只要不为... 查看详情
golang项目实战简明指南(代码片段)
原文地址开发环境搭建golang的开发环境搭建比较简单,由于是编译型语言,写好golang源码后,只需要执行gobuild就能将源码编译成对应平台(本文中默认为linux)上的可执行程序。本文不再赘述如何搭建golang开发环境,只说明下需要... 查看详情
golang项目实战简明指南(代码片段)
开发环境搭建golang的开发环境搭建比较简单,由于是编译型语言,写好golang源码后,只需要执行 gobuild 就能将源码编译成对应平台(本文中默认为linux)上的可执行程序。本文不再赘述如何搭建golang开发环境,只说... 查看详情
9-电商项目实战(代码片段)
1-电商项目分析报告;2-电商项目实战。导包及基础设置importreimportosimportglobimportnumpyasnpimportpandasaspdimportmatplotlib.pyplotaspltfrompandasimportSeries,DataFrameimportseabornassnsfromsklearn.linear_modelimportLinearRe 查看详情
reactnative电商项目实战——1.创建项目(代码片段)
ReactNative简称RN是FaceBook发布的跨平台开发框架,它的设计理念是:使用ReactNative开发,既拥有Native的良好人机交互体验,又保留了React开发效率。一、为什么选择ReactNative在ReactNative发布的短短几年之内,已经有... 查看详情
reactnative电商项目实战——开篇(代码片段)
ReactNative简称RN是FaceBook发布的跨平台开发框架,它的设计理念是:使用ReactNative开发,既拥有Native的良好人机交互体验,又保留了React开发效率。RN技术已经非常成熟,我们没什么理由拒绝使用RN搭建一个完整的... 查看详情
[vue项目实战]电商系统项目初始化(代码片段)
电商系统项目概述电商项目基本业务概述电商后台管理系统的功能电商后台管理系统的开发模式(前后端分离)电商后台管理系统的技术选型1.前端项目技术栈2.后端技术栈前端项目初始化123通过`vueui`来初始化项目4.配置element... 查看详情
go实战|电商平台项目结构及配置文件初始化(代码片段)
文章目录1.必备环境与推荐软件1.1必备环境1.2推荐软件2.项目初始化3.配置文件初始化3.1config.ini3.2conf.go3.3main函数1.必备环境与推荐软件1.1必备环境mysqlredisgolang1.2推荐软件golandnavicatrunapi2.项目初始化创建项目创建文件夹项目结构mal... 查看详情
golang入门到项目实战|golang指向数组的指针(代码片段)
定义语法varptr[MAX]*int;表示数据里面的元素的类型是指针类型实例演示packagemainimport"fmt"constMAXint=3funcmain()a:=[]int1,3,5variintvarptr[MAX]*intfmt.Println(ptr)//这个打印出来的是[<nil><nil><nil>]fo 查看详情
java由浅入深开发企业级电商项目大牛实战开发电商后台项目实战视频教程
第1章课程介绍(实战本项目需具备Java,SSM,Linux等基础)本章详细介绍Java服务端课程的内容,然后还介绍下课程安排,最后会讲解一下高大上的架构是如何一步一步从一台服务器演变到高性能、高并发、高可用架构的过程并讲... 查看详情
golang入门到项目实战|golang函数(代码片段)
golang函数简介函数的go语言中的一级公民,我们把所有的功能单元都定义在函数中,可以重复使用。函数包含函数的名称、参数列表和返回值类型,这些构成了函数的签名(signature)。go语言中函数特性go语言... 查看详情
golang入门到项目实战|golang继承(代码片段)
golang本质上没有oop的概念,也没有继承的概念,但是可以通过结构体嵌套实现这个特性。例如packagemainimport"fmt"typeAnimalstructnamestringageintfunc(aAnimal)eat()fmt.Println("eat...")func(aAnimal)sleep()fmt.Println("sleep")typeDogstr... 查看详情
golang入门到项目实战|golang指针(代码片段)
Go语言中的函数传参都是值拷贝,当我们想要修改某个变量的时候,我们可以创建一个指向该变量地址的指针变量。传递数据使用指针,而无需拷贝数据。类型指针不能进行偏移和运算。Go语言中的指针操作非常简单... 查看详情