Administrator 2 年 前
コミット
578d90229b

+ 128 - 2
data/dao/OrderDao.go

@@ -2,11 +2,15 @@ package dao
 
 import (
 	"demo/configs"
+	"demo/data/dao/manage"
 	"demo/data/domain"
 	"demo/data/domain/vo"
 	"fmt"
+	"strings"
+	"time"
 )
 
+// SelectSkuBySkuId 根据id查询sku
 func SelectSkuBySkuId(skuId int) (domain.GoodsSku, error) {
 	var sku domain.GoodsSku
 	_, err := configs.Engine.Table("goods_sku").Where("id = ?", skuId).Get(&sku)
@@ -16,8 +20,109 @@ func SelectSkuBySkuId(skuId int) (domain.GoodsSku, error) {
 	return sku, nil
 }
 
+// GetSkuBelong 查询sku所属topic,goods,type
+func GetSkuBelong(skuId, couponUserId int64, tp float64) (bool, string, error) {
+	//时间内可用
+	availableTime := false
+	//范围内可用
+	availableField := false
+	//金额条件可用
+	availableMatch := false
+
+	var couponUser domain.GoodsCouponUser
+	_, err := configs.Engine.Table("goods_coupon_user").Where("id = ?", couponUserId).Get(&couponUser)
+	if err != nil {
+		return false, "", err
+	}
+	coupon, err := manage.GetGoodsCouponById(couponUser.CouponId)
+	if err != nil {
+		return false, "", err
+	}
+	//判断是否过期
+	//领取后开始计时
+	if coupon.Validity == "ClaimTiming" {
+		if couponUser.CollectionTime.UnixMilli()+coupon.ValidityPeriod.UnixMilli() < time.Now().UnixMilli() {
+			return false, "优惠券已过期", nil
+		}
+		//固定时间段内可用
+	} else if coupon.Validity == "FixedTime" {
+		if coupon.ValidityPeriod.UnixMilli() < time.Now().UnixMilli() {
+			return false, "优惠券不在可使用时间段内", nil
+		}
+	} else {
+		availableTime = true
+	}
+	if !availableTime {
+		return availableTime, "", nil
+	}
+
+	sku, err := manage.GetGoodsSkuById(skuId)
+	if err != nil {
+		return false, "", err
+	}
+	//goods
+	if coupon.ConditionByGoods != "" {
+		split := strings.Split(coupon.ConditionByGoods, ",")
+		for i := range split {
+			if fmt.Sprint(skuId) == split[i] {
+				availableField = true
+				break
+			}
+		}
+	}
+	m := make(map[string]interface{})
+	_, err = configs.Engine.Select("goods_type.id as tid, goods.id as gid").Table("goods_type").
+		Join("INNER ", "goods", "goods_type.id = goods.type_id").
+		Join("INNER ", "goods_sku", "goods.id = goods_sku.goods_id").
+		Where("goods_sku.id = ?", sku.GoodsId).Get(&m)
+	if err != nil {
+		return false, "type 查询错误", err
+	}
+	//type
+	if !availableField && coupon.ConditionByType != "" && m["tid"] != "" {
+		split := strings.Split(coupon.ConditionByType, ",")
+		for i := range split {
+			if fmt.Sprint(m["tid"]) == split[i] {
+				availableField = true
+				break
+			}
+		}
+	}
+	//topic
+	var topic domain.ShopTopic
+	_, err = configs.Engine.Table("shop_topic").Where("find_in_set(?,type_ids)", m["tid"]).Get(&topic)
+	if err != nil {
+		return false, "topic 查询错误", err
+	}
+	if !availableField && topic.Id != 0 {
+		availableField = true
+	}
+
+	if tp > coupon.CashBackPoint {
+		availableMatch = true
+	}
+	if !availableTime || !availableField || !availableMatch {
+		return false, "不满足条件", nil
+	}
+	return availableTime && availableField && availableMatch, "", nil
+}
+
 // CreateOrder 创建订单
 func CreateOrder(order *domain.GoodsOrder) (*domain.GoodsOrder, error) {
+
+	var couponUser domain.GoodsCouponUser
+	_, err := configs.Engine.Table("goods_coupon_user").Where("id = ?", order.CouponUserId).Get(&couponUser)
+	if err != nil {
+		return order, err
+	}
+	coupon, err := manage.GetGoodsCouponById(couponUser.CouponId)
+	if err != nil {
+		return order, err
+	}
+	order.TotalPrice = order.TotalPrice - coupon.CashBackPrice
+	//优惠券使用
+	configs.Engine.ID(order.CouponUserId).Cols("state").Update(map[string]any{"state": 2})
+	//创建订单
 	id, err := configs.Engine.Table("goods_order").Insert(&order)
 	fmt.Println("is id? ", id)
 	if err != nil {
@@ -28,8 +133,29 @@ func CreateOrder(order *domain.GoodsOrder) (*domain.GoodsOrder, error) {
 }
 
 // OrderPaySuccess 订单支付成功
-func OrderPaySuccess(orderId int64) {
-	configs.Engine.ID(orderId).Cols("state").Update(map[string]any{"state": 1})
+func OrderPaySuccess(orderId int64, userId int64) error {
+	//查询订单
+	order, err := manage.GetGoodsOrderById(orderId)
+	if err != nil {
+		return err
+	}
+	configs.Engine.Table("goods_order").ID(orderId).Cols("state").Update(map[string]any{"state": 1})
+
+	//获取价格
+	var price = order.TotalPrice
+	//给推荐人分成
+	user, err := manage.GetUserById(userId)
+	wallet := domain.UserWallet{UserId: user.InviterBy}
+	list, err := manage.GetUserWalletList(wallet, 0, 1)
+	if err != nil {
+		return err
+	}
+	userWallet, ok := list.List[0].(domain.UserWallet)
+	if ok {
+		userWallet.Balance = userWallet.Balance + (price * 0.1)
+		configs.Engine.Table("user_wallet").ID(userWallet.Id).Cols("balance").Update(map[string]any{"balance": userWallet.Balance})
+	}
+	return nil
 }
 
 // GetOrderByUserId 获取订单集合

+ 1 - 0
data/dao/manage/ArticleDao.go

@@ -24,6 +24,7 @@ func GetArticleListInId(ids []int64) ([]domain.Article, error) {
 	var list []domain.Article
 	for rows.Next() {
 		var u domain.Article
+		rows.Scan(&u)
 		list = append(list, u)
 	}
 	return list, nil

+ 1 - 0
data/dao/manage/ArticleTagDao.go

@@ -24,6 +24,7 @@ func GetArticleTagListInId(ids []int64) ([]domain.ArticleTag, error) {
 	var list []domain.ArticleTag
 	for rows.Next() {
 		var u domain.ArticleTag
+		rows.Scan(&u)
 		list = append(list, u)
 	}
 	return list, nil

+ 1 - 0
data/dao/manage/ArticleTopicDao.go

@@ -24,6 +24,7 @@ func GetArticleTopicListInId(ids []int64) ([]domain.ArticleTopic, error) {
 	var list []domain.ArticleTopic
 	for rows.Next() {
 		var u domain.ArticleTopic
+		rows.Scan(&u)
 		list = append(list, u)
 	}
 	return list, nil

+ 1 - 0
data/dao/manage/AuthorityDao.go

@@ -24,6 +24,7 @@ func GetAuthorityListInId(ids []int64) ([]domain.Authority, error) {
 	var list []domain.Authority
 	for rows.Next() {
 		var u domain.Authority
+		rows.Scan(&u)
 		list = append(list, u)
 	}
 	return list, nil

+ 1 - 0
data/dao/manage/BackAuthorityDao.go

@@ -24,6 +24,7 @@ func GetBackAuthorityListInId(ids []int64) ([]domain.BackAuthority, error) {
 	var list []domain.BackAuthority
 	for rows.Next() {
 		var u domain.BackAuthority
+		rows.Scan(&u)
 		list = append(list, u)
 	}
 	return list, nil

+ 1 - 0
data/dao/manage/BackMenuDao.go

@@ -24,6 +24,7 @@ func GetBackMenuListInId(ids []int64) ([]domain.BackMenu, error) {
 	var list []domain.BackMenu
 	for rows.Next() {
 		var u domain.BackMenu
+		rows.Scan(&u)
 		list = append(list, u)
 	}
 	return list, nil

+ 1 - 0
data/dao/manage/BackRoleAuthorityDao.go

@@ -24,6 +24,7 @@ func GetBackRoleAuthorityListInId(ids []int64) ([]domain.BackRoleAuthority, erro
 	var list []domain.BackRoleAuthority
 	for rows.Next() {
 		var u domain.BackRoleAuthority
+		rows.Scan(&u)
 		list = append(list, u)
 	}
 	return list, nil

+ 1 - 0
data/dao/manage/BackRoleDao.go

@@ -24,6 +24,7 @@ func GetBackRoleListInId(ids []int64) ([]domain.BackRole, error) {
 	var list []domain.BackRole
 	for rows.Next() {
 		var u domain.BackRole
+		rows.Scan(&u)
 		list = append(list, u)
 	}
 	return list, nil

+ 1 - 0
data/dao/manage/BackRoleMenuDao.go

@@ -24,6 +24,7 @@ func GetBackRoleMenuListInId(ids []int64) ([]domain.BackRoleMenu, error) {
 	var list []domain.BackRoleMenu
 	for rows.Next() {
 		var u domain.BackRoleMenu
+		rows.Scan(&u)
 		list = append(list, u)
 	}
 	return list, nil

+ 1 - 0
data/dao/manage/DictDataDao.go

@@ -24,6 +24,7 @@ func GetDictDataListInId(ids []int64) ([]domain.DictData, error) {
 	var list []domain.DictData
 	for rows.Next() {
 		var u domain.DictData
+		rows.Scan(&u)
 		list = append(list, u)
 	}
 	return list, nil

+ 1 - 0
data/dao/manage/DictTypeDao.go

@@ -24,6 +24,7 @@ func GetDictTypeListInId(ids []int64) ([]domain.DictType, error) {
 	var list []domain.DictType
 	for rows.Next() {
 		var u domain.DictType
+		rows.Scan(&u)
 		list = append(list, u)
 	}
 	return list, nil

+ 1 - 0
data/dao/manage/GenTableColumnDao.go

@@ -24,6 +24,7 @@ func GetGenTableColumnListInId(ids []int64) ([]domain.GenTableColumn, error) {
 	var list []domain.GenTableColumn
 	for rows.Next() {
 		var u domain.GenTableColumn
+		rows.Scan(&u)
 		list = append(list, u)
 	}
 	return list, nil

+ 1 - 0
data/dao/manage/GenTableDao.go

@@ -24,6 +24,7 @@ func GetGenTableListInId(ids []int64) ([]domain.GenTable, error) {
 	var list []domain.GenTable
 	for rows.Next() {
 		var u domain.GenTable
+		rows.Scan(&u)
 		list = append(list, u)
 	}
 	return list, nil

+ 1 - 0
data/dao/manage/GoodsCommodityAreaDao.go

@@ -24,6 +24,7 @@ func GetGoodsCommodityAreaListInId(ids []int64) ([]domain.GoodsCommodityArea, er
 	var list []domain.GoodsCommodityArea
 	for rows.Next() {
 		var u domain.GoodsCommodityArea
+		rows.Scan(&u)
 		list = append(list, u)
 	}
 	return list, nil

+ 1 - 0
data/dao/manage/GoodsCouponDao.go

@@ -24,6 +24,7 @@ func GetGoodsCouponListInId(ids []int64) ([]domain.GoodsCoupon, error) {
 	var list []domain.GoodsCoupon
 	for rows.Next() {
 		var u domain.GoodsCoupon
+		rows.Scan(&u)
 		list = append(list, u)
 	}
 	return list, nil

+ 1 - 0
data/dao/manage/GoodsCouponUserDao.go

@@ -24,6 +24,7 @@ func GetGoodsCouponUserListInId(ids []int64) ([]domain.GoodsCouponUser, error) {
 	var list []domain.GoodsCouponUser
 	for rows.Next() {
 		var u domain.GoodsCouponUser
+		rows.Scan(&u)
 		list = append(list, u)
 	}
 	return list, nil

+ 1 - 0
data/dao/manage/GoodsDao.go

@@ -24,6 +24,7 @@ func GetGoodsListInId(ids []int64) ([]domain.Goods, error) {
 	var list []domain.Goods
 	for rows.Next() {
 		var u domain.Goods
+		rows.Scan(&u)
 		list = append(list, u)
 	}
 	return list, nil

+ 1 - 0
data/dao/manage/GoodsIntroductionDao.go

@@ -24,6 +24,7 @@ func GetGoodsIntroductionListInId(ids []int64) ([]domain.GoodsIntroduction, erro
 	var list []domain.GoodsIntroduction
 	for rows.Next() {
 		var u domain.GoodsIntroduction
+		rows.Scan(&u)
 		list = append(list, u)
 	}
 	return list, nil

+ 1 - 0
data/dao/manage/GoodsOrderDao.go

@@ -24,6 +24,7 @@ func GetGoodsOrderListInId(ids []int64) ([]domain.GoodsOrder, error) {
 	var list []domain.GoodsOrder
 	for rows.Next() {
 		var u domain.GoodsOrder
+		rows.Scan(&u)
 		list = append(list, u)
 	}
 	return list, nil

+ 1 - 0
data/dao/manage/GoodsSkuCardDao.go

@@ -24,6 +24,7 @@ func GetGoodsSkuCardListInId(ids []int64) ([]domain.GoodsSkuCard, error) {
 	var list []domain.GoodsSkuCard
 	for rows.Next() {
 		var u domain.GoodsSkuCard
+		rows.Scan(&u)
 		list = append(list, u)
 	}
 	return list, nil

+ 1 - 0
data/dao/manage/GoodsSkuDao.go

@@ -24,6 +24,7 @@ func GetGoodsSkuListInId(ids []int64) ([]domain.GoodsSku, error) {
 	var list []domain.GoodsSku
 	for rows.Next() {
 		var u domain.GoodsSku
+		rows.Scan(&u)
 		list = append(list, u)
 	}
 	return list, nil

+ 1 - 0
data/dao/manage/GoodsTagDao.go

@@ -24,6 +24,7 @@ func GetGoodsTagListInId(ids []int64) ([]domain.GoodsTag, error) {
 	var list []domain.GoodsTag
 	for rows.Next() {
 		var u domain.GoodsTag
+		rows.Scan(&u)
 		list = append(list, u)
 	}
 	return list, nil

+ 1 - 0
data/dao/manage/GoodsTypeDao.go

@@ -24,6 +24,7 @@ func GetGoodsTypeListInId(ids []int64) ([]domain.GoodsType, error) {
 	var list []domain.GoodsType
 	for rows.Next() {
 		var u domain.GoodsType
+		rows.Scan(&u)
 		list = append(list, u)
 	}
 	return list, nil

+ 1 - 0
data/dao/manage/ManageUserDao.go

@@ -24,6 +24,7 @@ func GetManageUserListInId(ids []int64) ([]domain.ManageUser, error) {
 	var list []domain.ManageUser
 	for rows.Next() {
 		var u domain.ManageUser
+		rows.Scan(&u)
 		list = append(list, u)
 	}
 	return list, nil

+ 1 - 0
data/dao/manage/ShopAdviceCarouselDao.go

@@ -24,6 +24,7 @@ func GetShopAdviceCarouselListInId(ids []int64) ([]domain.ShopAdviceCarousel, er
 	var list []domain.ShopAdviceCarousel
 	for rows.Next() {
 		var u domain.ShopAdviceCarousel
+		rows.Scan(&u)
 		list = append(list, u)
 	}
 	return list, nil

+ 1 - 0
data/dao/manage/ShopTopicDao.go

@@ -24,6 +24,7 @@ func GetShopTopicListInId(ids []int64) ([]domain.ShopTopic, error) {
 	var list []domain.ShopTopic
 	for rows.Next() {
 		var u domain.ShopTopic
+		rows.Scan(&u)
 		list = append(list, u)
 	}
 	return list, nil

+ 1 - 0
data/dao/manage/ShopTopicSkuDao.go

@@ -24,6 +24,7 @@ func GetShopTopicSkuListInId(ids []int64) ([]domain.ShopTopicSku, error) {
 	var list []domain.ShopTopicSku
 	for rows.Next() {
 		var u domain.ShopTopicSku
+		rows.Scan(&u)
 		list = append(list, u)
 	}
 	return list, nil

+ 1 - 0
data/dao/manage/UserWalletDao.go

@@ -24,6 +24,7 @@ func GetUserWalletListInId(ids []int64) ([]domain.UserWallet, error) {
 	var list []domain.UserWallet
 	for rows.Next() {
 		var u domain.UserWallet
+		rows.Scan(&u)
 		list = append(list, u)
 	}
 	return list, nil

+ 4 - 2
data/domain/DoMain.go

@@ -280,12 +280,13 @@ type GoodsOrder struct {
 	ContactInformation string    `xorm:"contact_information"  json:"contactInformation"` // 255 0 注释:联系方式
 	CouponUserId       int64     `xorm:"coupon_user_id"  json:"couponUserId"`            // 11 0 注释:使用的优惠券
 	State              string    `xorm:"state"  json:"state"`                            // 10 0 注释:支付状态,0待支付,1待发货,2已发货,3订单完成,4订单异常
+	OtherData          string    `xorm:"other_data"  json:"otherData"`                   // 0 0 注释:其他数据
 	CreateBy           int64     `xorm:"create_by"  json:"createBy"`                     // 255 0 注释:用户id
 	CreateTime         time.Time `xorm:"create_time"  json:"createTime"`                 // 0 0 注释:订单创建时间
 }
 
 func (receiver GoodsOrder) String() string {
-	return fmt.Sprint("GoodsOrder{Id:", receiver.Id, ",OrderName:", receiver.OrderName, ",SkuId:", receiver.SkuId, ",Count:", receiver.Count, ",Price:", receiver.Price, ",TotalPrice:", receiver.TotalPrice, ",ContactInformation:", receiver.ContactInformation, ",CouponUserId:", receiver.CouponUserId, ",State:", receiver.State, ",CreateBy:", receiver.CreateBy, ",CreateTime:", receiver.CreateTime, "}")
+	return fmt.Sprint("GoodsOrder{Id:", receiver.Id, ",OrderName:", receiver.OrderName, ",SkuId:", receiver.SkuId, ",Count:", receiver.Count, ",Price:", receiver.Price, ",TotalPrice:", receiver.TotalPrice, ",ContactInformation:", receiver.ContactInformation, ",CouponUserId:", receiver.CouponUserId, ",State:", receiver.State, ",OtherData:", receiver.OtherData, ",CreateBy:", receiver.CreateBy, ",CreateTime:", receiver.CreateTime, "}")
 }
 
 // GoodsSku 商品规格
@@ -428,11 +429,12 @@ type User struct {
 	Email         string `xorm:"email"  json:"email"`                  // 255 0 注释:邮箱
 	Name          string `xorm:"name"  json:"name"`                    // 255 0 注释:用户名
 	Avatar        string `xorm:"avatar"  json:"avatar"`                // 255 0 注释:头像
+	InviterBy     int64  `xorm:"inviter_by"  json:"inviterBy"`         // 11 0 注释:邀请人
 	RecommendCode string `xorm:"recommend_code"  json:"recommendCode"` // 255 0 注释:推荐码
 }
 
 func (receiver User) String() string {
-	return fmt.Sprint("User{Id:", receiver.Id, ",Username:", receiver.Username, ",Password:", receiver.Password, ",CreationTime:", receiver.CreationTime, ",LoginTime:", receiver.LoginTime, ",Status:", receiver.Status, ",RoleId:", receiver.RoleId, ",Phone:", receiver.Phone, ",Email:", receiver.Email, ",Name:", receiver.Name, ",Avatar:", receiver.Avatar, ",RecommendCode:", receiver.RecommendCode, "}")
+	return fmt.Sprint("User{Id:", receiver.Id, ",Username:", receiver.Username, ",Password:", receiver.Password, ",CreationTime:", receiver.CreationTime, ",LoginTime:", receiver.LoginTime, ",Status:", receiver.Status, ",RoleId:", receiver.RoleId, ",Phone:", receiver.Phone, ",Email:", receiver.Email, ",Name:", receiver.Name, ",Avatar:", receiver.Avatar, ",InviterBy:", receiver.InviterBy, ",RecommendCode:", receiver.RecommendCode, "}")
 }
 
 // UserWallet 用户钱包


ファイルの差分が大きいため隠しています
+ 1 - 1
file/virtual_mall.sql


+ 15 - 2
router/OrderRouter.go

@@ -45,6 +45,19 @@ func CreateOrder(c *gin.Context) {
 	if sku.InventoryNumber < cast.ToInt64(count) {
 		c.JSON(200, CreateResultError(1000, "库存不足"))
 	}
+
+	tp := sku.Price * float64(cast.ToInt(count))
+	//判断是否可以使用优惠券
+	belong, s, err := dao.GetSkuBelong(cast.ToInt64(skuId), cast.ToInt64(couponUserId), tp)
+	if !belong {
+		if s == "" {
+			c.JSON(200, CreateResultError(500, "查询错误"))
+			return
+		} else {
+			c.JSON(200, CreateResultError(500, s))
+			return
+		}
+	}
 	order := &domain.GoodsOrder{}
 	order.SkuId = cast.ToInt64(skuId)
 	order.Count = cast.ToInt64(count)
@@ -73,10 +86,10 @@ func PayBuyTest(c *gin.Context) {
 	}
 	data := share.GetJsonAnyParam(c)
 	orderId, _ := data("orderId")
-	dao.OrderPaySuccess(cast.ToInt64(orderId))
+	dao.OrderPaySuccess(cast.ToInt64(orderId), id)
 }
 
-// 订单列表
+// GetOrderList 获取订单列表
 func GetOrderList(c *gin.Context) {
 	id := GetUserIdByToken(c)
 	if id == 0 {

+ 13 - 8
router/TestRouter.go

@@ -1,7 +1,7 @@
 package router
 
 import (
-	"demo/data/dao/manage"
+	"demo/data/dao"
 	"demo/share"
 	"fmt"
 	"github.com/gin-gonic/gin"
@@ -17,15 +17,20 @@ func TestRouth(engine *gin.RouterGroup) {
 }
 
 func OrderSubmit(c *gin.Context) {
-	param := share.GetJsonAnyParam(c)
-	orderId, _ := param("orderId")
-
-	order, b, err := manage.SetGoodsOrder(map[string]interface{}{"state": 1}, cast.ToInt64(orderId))
-	if err != nil || !b {
-		c.JSON(200, CreateResultError(400, "订单不存在"))
+	id := GetUserIdByToken(c)
+	if id == 0 {
+		return
+	}
+	data := share.GetJsonAnyParam(c)
+	orderId, _ := data("orderId")
+	err := dao.OrderPaySuccess(cast.ToInt64(orderId), id)
+	if err != nil {
+		c.JSON(200, CreateResultError(401, err.Error()))
+		return
 	}
-	c.JSON(200, CreateResultData(order))
+	c.JSON(200, CreateResult())
 }
+
 func DataTest(c *gin.Context) {
 	body := make(map[string]interface{})
 	c.ShouldBindJSON(&body)

この差分においてかなりの量のファイルが変更されているため、一部のファイルを表示していません