zhangkunkun há 3 anos atrás
pai
commit
7e65423a65

+ 13 - 0
apis/petsLy/base.go

@@ -0,0 +1,13 @@
+package petsLy
+
+import "github.com/gin-gonic/gin"
+
+func InitPetsRouter(engine *gin.RouterGroup) {
+	v1 := engine.Group("v1")
+	{
+		v1.POST("/pets.ly/create", PetsCreate) //创建宠物信息
+		v1.POST("/pets.ly/upload/create", CreateUpload)
+		v1.POST("/pets.ly/list", PetsList)
+	}
+
+}

+ 126 - 0
apis/petsLy/pets.create.go

@@ -0,0 +1,126 @@
+package petsLy
+
+import (
+	"context"
+	"duoduo/conf"
+	"duoduo/models/mysqlLy"
+	"duoduo/models/petsLy"
+	"duoduo/tools"
+	"duoduo/tools/app"
+	"encoding/json"
+	"fmt"
+	"github.com/gin-gonic/gin"
+	"github.com/qiniu/go-sdk/v7/auth/qbox"
+	"github.com/qiniu/go-sdk/v7/storage"
+	"time"
+)
+
+func PetsCreate(c *gin.Context) {
+	var inData petsLy.PetsCreateRequest
+	var pets mysqlLy.Pets
+	var user mysqlLy.User
+	err := c.ShouldBindJSON(&inData)
+	if err != nil {
+		app.Error(c, 400, err, err.Error())
+		return
+	}
+	confIni, err := conf.ConnIni()
+	if err != nil {
+		app.Error(c, 400, err, err.Error())
+		return
+	}
+	fmt.Println("%+v", inData)
+	//校验
+	user.OpenID = inData.OpenId
+	userInfo, err := user.Get()
+	if err != nil {
+		app.Error(c, 500, err, "用户信息错误")
+		return
+	}
+	var pictures []string
+	for i := 0; i < len(inData.Pictures); i++ {
+		//fmt.Println(inData.Pictures[i])
+		//上传图片
+		timeUnixNano := time.Now().UnixNano() //单位纳秒
+		fileName := fmt.Sprintf("%d.jpg", timeUnixNano)
+
+		//七牛云上传图片
+		bucket := "imgxx"
+		key := "lingyang/" + inData.OpenId + "/" + fileName
+
+		putPolicy := storage.PutPolicy{
+			Scope: bucket,
+		}
+
+		mac := qbox.NewMac(confIni.MustValue("ly-qn", "access_key"), confIni.MustValue("ly-qn", "secret_key"))
+		upToken := putPolicy.UploadToken(mac)
+
+		cfg := storage.Config{}
+		// 空间对应的机房
+		cfg.Zone = &storage.ZoneHuanan
+		// 是否使用https域名
+		cfg.UseHTTPS = false
+		// 上传是否使用CDN上传加速
+		cfg.UseCdnDomains = false
+
+		// 构建表单上传的对象
+		baseUploader := storage.NewBase64Uploader(&cfg)
+		ret := storage.PutRet{}
+		//data, err := base64.RawStdEncoding.DecodeString(inData.Pictures[i])
+		//if err != nil {
+		//	app.Error(c, 500, err, "上传图片失败")
+		//	return
+		//}
+		err = baseUploader.Put(context.Background(), &ret, upToken, key, []byte(inData.Pictures[i]), nil)
+		if err != nil {
+			app.Error(c, 500, err, "上传图片失败")
+			return
+		}
+
+		pictures = append(pictures, "http://lingyang.shisanmiao.com/"+key)
+	}
+
+	pets.UpdateTime = time.Now().Local()
+	pets.CreateTime = time.Now().Local()
+	pets.Name = inData.Name
+	pets.Sex = inData.Sex
+	pets.Status = 1 //待领养
+	pets.UserID = userInfo.ID
+	pets.Amount = inData.Amount
+	pets.AdoptInfo = inData.AdoptInfo
+	pets.Age = inData.Age
+	pets.Area = inData.Area
+	pets.City = inData.City
+	pets.Deposit = inData.Deposit
+
+	if inData.IsFee == 2 {
+		pets.DepositDate, err = tools.GetStringToTime(inData.DepositDate)
+		if err != nil {
+			app.Error(c, 500, err, "")
+			return
+		}
+	}
+
+	pets.IsExpellingParasite = inData.IsExpellingParasite
+	pets.IsFee = inData.IsFee
+	pets.IsImmune = inData.IsImmune
+	pets.IsSterilization = inData.IsSterilization
+	pets.Pet = inData.Pet
+	pets.PetDes = inData.PetDes
+	pets.PetInfo = inData.PetInfo
+	pets.PetStatus = inData.PetStatus
+
+	jsonData, err := json.Marshal(pictures)
+	if err != nil {
+		app.Error(c, 500, err, "")
+		return
+	}
+	pets.Pictures = string(jsonData)
+	pets.Province = inData.Province
+	_, err = pets.Create()
+	if err != nil {
+		app.Error(c, 500, err, "插入数据失败")
+		return
+	}
+	app.OK(c, nil, app.Success)
+}

+ 196 - 0
apis/petsLy/pets.create.upload.go

@@ -0,0 +1,196 @@
+package petsLy
+
+import (
+	"context"
+	"duoduo/conf"
+	"duoduo/models/mysqlLy"
+	"duoduo/tools/app"
+	"encoding/json"
+	"fmt"
+	"github.com/gin-gonic/gin"
+	"github.com/qiniu/go-sdk/v7/auth/qbox"
+	"github.com/qiniu/go-sdk/v7/storage"
+	"github.com/shopspring/decimal"
+	"os"
+	"strconv"
+	"time"
+)
+
+func CreateUpload(c *gin.Context) {
+	confIni, err := conf.ConnIni()
+	if err != nil {
+		app.Error(c, 400, err, err.Error())
+		return
+	}
+	form, err := c.MultipartForm()
+	if err != nil {
+		app.Error(c, 400, err, err.Error())
+		return
+	}
+	files := form.File["files"]
+	openId := c.PostForm("open_id")
+	name := c.PostForm("name")
+	pet := c.PostForm("pet")
+	age := c.PostForm("age")
+	sex := c.PostForm("sex")
+	petDes := c.PostForm("pet_des")
+	if openId == "" || name == "" || pet == "" || age == "" || sex == "" || petDes == "" {
+		app.Error(c, 400, err, "必填字段为空值")
+		return
+	}
+
+	petStatus := c.PostForm("pet_status")
+	petStatusN, _ := strconv.Atoi(petStatus)
+	isSterilization := c.PostForm("is_sterilization")
+	isSterilizationN, _ := strconv.Atoi(isSterilization)
+	isExpellingParasite := c.PostForm("is_expelling_parasite")
+	isExpellingParasiteN, _ := strconv.Atoi(isExpellingParasite)
+	isImmune := c.PostForm("is_immune")
+	isImmuneN, _ := strconv.Atoi(isImmune)
+	isFee := c.PostForm("is_fee")
+	isFeeN, _ := strconv.Atoi(isFee)
+	if petStatusN == 0 || isSterilizationN == 0 || isExpellingParasiteN == 0 || isImmuneN == 0 || isFeeN == 0 {
+		app.Error(c, 400, err, "必填状态为空值")
+		return
+	}
+
+	deposit := c.PostForm("deposit")
+	depositDate := c.PostForm("deposit_date")
+	amount := c.PostForm("amount")
+
+	if isFeeN == 2 && (deposit == "" || depositDate == "") {
+		app.Error(c, 400, err, "押金信息未填写")
+		return
+	}
+	if isFeeN == 3 && amount == "" {
+		app.Error(c, 400, err, "金额信息未填写")
+		return
+	}
+
+	province := c.PostForm("province")
+	city := c.PostForm("city")
+	area := c.PostForm("area")
+	petInfo := c.PostForm("pet_info")
+	adoptInfo := c.PostForm("adopt_info")
+	if province == "" || city == "" || area == "" || petInfo == "" || adoptInfo == "" {
+		app.Error(c, 400, err, "必填状态为空值!")
+		return
+	}
+	user := mysqlLy.User{}
+	user.OpenID = openId
+	userInfo, err := user.Get()
+	if err != nil {
+		app.Error(c, 500, err, "用户信息错误")
+		return
+	}
+	var pictures []string
+	for _, file := range files {
+		timeUnixNano := time.Now().UnixNano() //单位纳秒
+		fileName := fmt.Sprintf("%d-%s.jpg", timeUnixNano, openId)
+		err := c.SaveUploadedFile(file, "./"+fileName)
+		if err != nil {
+			app.Error(c, 500, err, "保存图片失败")
+			return
+		}
+		//七牛云上传图片
+
+		//localFile = "/Users/jemy/Documents/github.png"
+		bucket := "imgxx"
+		key := "lingyang/" + openId + "/" + fileName
+
+		putPolicy := storage.PutPolicy{
+			Scope: bucket,
+		}
+
+		mac := qbox.NewMac(confIni.MustValue("ly-qn", "access_key"), confIni.MustValue("ly-qn", "secret_key"))
+		upToken := putPolicy.UploadToken(mac)
+
+		cfg := storage.Config{}
+		// 空间对应的机房
+		cfg.Zone = &storage.ZoneHuanan
+		// 是否使用https域名
+		cfg.UseHTTPS = false
+		// 上传是否使用CDN上传加速
+		cfg.UseCdnDomains = false
+
+		// 构建表单上传的对象
+		formUploader := storage.NewFormUploader(&cfg)
+		ret := storage.PutRet{}
+
+		// 可选配置
+		//putExtra := storage.PutExtra{
+		//	Params: map[string]string{
+		//		"x:name": "github logo",
+		//	},
+		//}
+
+		err = formUploader.PutFile(context.Background(), &ret, upToken, key, "./"+fileName, nil)
+		if err != nil {
+			app.Error(c, 500, err, "上传图片失败")
+			return
+		}
+		fmt.Println(ret.Key, ret.Hash)
+		err = os.Remove("./" + fileName)
+		if err != nil {
+			app.Error(c, 500, err, "删除图片失败")
+			return
+		}
+		pictures = append(pictures, "http://lingyang.shisanmiao.com/"+key)
+	}
+	sqlData := mysqlLy.Pets{}
+	sqlData.Province = province
+	picture, err := json.Marshal(pictures)
+	if err != nil {
+		app.Error(c, 500, err, err.Error())
+		return
+	}
+	sqlData.Pictures = string(picture)
+	sqlData.PetStatus = petStatusN
+	sqlData.PetInfo = petInfo
+	sqlData.PetDes = petDes
+	sqlData.IsSterilization = isSterilizationN
+	sqlData.IsImmune = isImmuneN
+	sqlData.IsFee = isFeeN
+	sqlData.IsExpellingParasite = isExpellingParasiteN
+	sqlData.DepositDate, _ = time.Parse("2006-01-02", depositDate)
+	sqlData.Deposit, _ = decimal.NewFromString(deposit)
+	sqlData.City = city
+	sqlData.Area = area
+	sqlData.Age = age
+	sqlData.AdoptInfo = adoptInfo
+	sqlData.Amount, _ = decimal.NewFromString(amount)
+	sqlData.UserID = userInfo.ID
+	sqlData.Status = 1 //待领养
+	sqlData.Sex = sex
+	sqlData.Name = name
+	sqlData.CreateTime = time.Now().Local()
+	sqlData.UpdateTime = time.Now().Local()
+	_, err = sqlData.Create()
+	if err != nil {
+		app.Error(c, 500, err, "插入数据失败")
+		return
+	}
+	app.OK(c, nil, "成功")
+
+	//OpenId              string          `json:"open_id" binding:"required"`
+	//Name                string          `json:"name" binding:"required"`                  // 昵称
+	//Pet                 string          `json:"pet" binding:"required"`                   // 品种
+	//Age                 string          `json:"age" binding:"required"`                   // 年龄  '0-3个月','3-6个月','6-9个月','小于1岁','小于2岁','小于3岁','大于3岁'
+	//Sex                 string          `json:"sex" binding:"required"`                   // 性别 MM GG
+	//PetStatus           int             `json:"pet_status" binding:"required"`            // 1-流浪 2-家养 3-收养所
+	//PetDes              string          `json:"pet_des" binding:"required"`               // 宠物详细种类
+	//IsSterilization     int             `json:"is_sterilization" binding:"required"`      // 绝育状态:1-是 2-否 3-不确认
+	//IsExpellingParasite int             `json:"is_expelling_parasite" binding:"required"` // 驱虫状态:1-是 2-否 3-不确认
+	//IsImmune            int             `json:"is_immune" binding:"required"`             // 免疫状态:1-是 2-否 3-不确认
+	//IsFee               int             `json:"is_fee" binding:"required"`                // 1-免费 2-押金 3-有偿
+	//Deposit             decimal.Decimal `json:"deposit"`                                  // 押金
+	//DepositDate         time.Time       `json:"deposit_date"`                             // 押金到期时间
+	//Amount              decimal.Decimal `json:"amount" `                                  // 金额
+	//Province            string          `json:"province" binding:"required"`              // 省
+	//City                string          `json:"city" binding:"required"`                  // 市
+	//Area                string          `json:"area" binding:"required"`                  // 区
+	//PetInfo             string          `json:"pet_info" binding:"required"`              // 宠物信息
+	//AdoptInfo           string          `json:"adopt_info" binding:"required"`            // 领养要求
+	//Pictures            string          `json:"pictures"`                                 // 图片url
+
+}

+ 38 - 0
apis/petsLy/pets.list.go

@@ -0,0 +1,38 @@
+package petsLy
+
+import (
+	"duoduo/models/mysqlLy"
+	"duoduo/models/petsLy"
+	"duoduo/tools/app"
+	"github.com/gin-gonic/gin"
+)
+
+func PetsList(c *gin.Context) {
+	var inData petsLy.PetsListRequest
+	var pets mysqlLy.Pets
+
+	var pageSize = 10
+	var pageIndex = 1
+
+	err := c.ShouldBindJSON(&inData)
+	if err != nil {
+		app.Error(c, 400, err, err.Error())
+		return
+	}
+
+	if inData.PageSize != 0 {
+		pageSize = inData.PageSize
+	}
+	if inData.PageIndex != 0 {
+		pageIndex = inData.PageIndex
+	}
+
+	pets.OpenId = inData.OpenId
+	petsList, petsCount, err := pets.GetPetsList(pageSize, pageIndex)
+	if err != nil {
+		app.Error(c, 500, err, "")
+		return
+	}
+	app.PageOK(c, petsList, petsCount, pageIndex, pageSize, "成功")
+
+}

+ 10 - 0
apis/qiniu/base.go

@@ -0,0 +1,10 @@
+package qiniu
+
+import "github.com/gin-gonic/gin"
+
+func InitQiNiuRouter(engine *gin.RouterGroup) {
+	v1 := engine.Group("v1")
+	{
+		v1.POST("/qi.niu.ly/client/voucher", ClientVoucher) //七牛云客户端
+	}
+}

+ 27 - 0
apis/qiniu/client.voucher.go

@@ -0,0 +1,27 @@
+package qiniu
+
+import (
+	"duoduo/conf"
+	"duoduo/tools/app"
+	"github.com/gin-gonic/gin"
+	"github.com/qiniu/go-sdk/v7/auth/qbox"
+	"github.com/qiniu/go-sdk/v7/storage"
+)
+
+func ClientVoucher(c *gin.Context) {
+
+	confIni, err := conf.ConnIni()
+	if err != nil {
+		app.Error(c, 400, err, err.Error())
+		return
+	}
+
+	bucket := confIni.MustValue("ly-qn", "bucket")
+	putPolicy := storage.PutPolicy{
+		Scope: bucket,
+	}
+	mac := qbox.NewMac(confIni.MustValue("ly-qn", "access_key"), confIni.MustValue("ly-qn", "secret_key"))
+	upToken := putPolicy.UploadToken(mac)
+
+	app.OK(c, upToken, app.Success)
+}

+ 10 - 0
apis/userLy/base.go

@@ -0,0 +1,10 @@
+package userLy
+
+import "github.com/gin-gonic/gin"
+
+func InitUserRouter(engine *gin.RouterGroup) {
+	v1 := engine.Group("v1")
+	{
+		v1.POST("/user.ly/open.id/set", OpenIdSet) //设置openId
+	}
+}

+ 60 - 0
apis/userLy/user.open.id.set.go

@@ -0,0 +1,60 @@
+package userLy
+
+import (
+	"duoduo/apis/pdd"
+	"duoduo/conf"
+	"duoduo/models/mysqlLy"
+	"duoduo/models/user"
+	"duoduo/tools"
+	"duoduo/tools/app"
+	"fmt"
+	"github.com/gin-gonic/gin"
+	"time"
+)
+
+func OpenIdSet(c *gin.Context) {
+	var inData user.OpenIdSetRequest
+	var outData user.OpenIdSetResponse
+	var sql mysqlLy.User
+
+	err := c.ShouldBindJSON(&inData)
+	if err != nil {
+		app.Error(c, 400, err, err.Error())
+		return
+	}
+
+	confIni, err := conf.ConnIni()
+	if err != nil {
+		app.Error(c, 400, err, err.Error())
+		return
+	}
+
+	url := fmt.Sprintf("https://api.weixin.qq.com/sns/jscode2session?appid=%s&secret=%s&js_code=%s&grant_type=authorization_code", confIni.MustValue("ly-wx", "app_id"), confIni.MustValue("ly-wx", "secret"), inData.Code)
+	val, err := pdd.DuoDuoGet(url)
+	if err != nil {
+		app.Error(c, 500, err, err.Error())
+		return
+	}
+
+	err = tools.JsonUnmarshal(val, &outData)
+	if err != nil {
+		app.Error(c, 500, err, err.Error())
+		return
+	}
+	if outData.Errcode != 0 {
+		app.Error(c, outData.Errcode, err, outData.Errmsg)
+		return
+	}
+	//创建用户
+	sql.OpenID = outData.OpenId
+	sql.CreateTime = time.Now().Local()
+	sql.UpdateTime = time.Now().Local()
+
+	_, err = sql.Create()
+	if err != nil {
+		app.Error(c, 500, err, "创建失败")
+		return
+	}
+
+	app.OK(c, outData, app.Success)
+}

+ 15 - 1
conf/conf.ini

@@ -12,4 +12,18 @@ mysql_username = gogs
 app_id = wxc5b88e9d942121cc
 secret = 66d4694c94371186f5f15abbd76a89c6
 [forward]
-url = http://127.0.0.1:8082
+url = http://127.0.0.1:8082
+
+[ly-mysql]
+mysql_host = 49.234.19.130
+mysql_name = lingyang-test
+mysql_password = Zhangkun0212a@
+mysql_port = 3306
+mysql_username = gogs
+[ly-wx]
+app_id = wx51d03546ee79e65c
+secret = b363527ba6d3ef9d50fd0be5a732d328
+[ly-qn]
+access_key = V58vae8L7hdbbFbug_j13GiVh0-H6mUD7dxeDA4h
+secret_key = tmKwxDv-wHjRLUBw2mT4C6J4u1gejLQOY0JyDJ7q
+bucket = imgxx

+ 15 - 1
conf/conf_master.ini

@@ -12,4 +12,18 @@ mysql_username = gogs
 app_id = wxc5b88e9d942121cc
 secret = 66d4694c94371186f5f15abbd76a89c6
 [forward]
-url = http://127.0.0.1:8082
+url = http://127.0.0.1:8082
+
+[ly-mysql]
+mysql_host = 49.234.19.130
+mysql_name = lingyang-test
+mysql_password = Zhangkun0212a@
+mysql_port = 3306
+mysql_username = gogs
+[ly-wx]
+app_id = wx51d03546ee79e65c
+secret = b363527ba6d3ef9d50fd0be5a732d328
+[ly-qn]
+access_key = V58vae8L7hdbbFbug_j13GiVh0-H6mUD7dxeDA4h
+secret_key = tmKwxDv-wHjRLUBw2mT4C6J4u1gejLQOY0JyDJ7q
+bucket = imgxx

+ 15 - 1
conf/conf_test.ini

@@ -12,4 +12,18 @@ mysql_username = gogs
 app_id = wxc5b88e9d942121cc
 secret = 66d4694c94371186f5f15abbd76a89c6
 [forward]
-url = http://127.0.0.1:8082
+url = http://127.0.0.1:8082
+
+[ly-mysql]
+mysql_host = 49.234.19.130
+mysql_name = lingyang-test
+mysql_password = Zhangkun0212a@
+mysql_port = 3306
+mysql_username = gogs
+[ly-wx]
+app_id = wx51d03546ee79e65c
+secret = b363527ba6d3ef9d50fd0be5a732d328
+[ly-qn]
+access_key = V58vae8L7hdbbFbug_j13GiVh0-H6mUD7dxeDA4h
+secret_key = tmKwxDv-wHjRLUBw2mT4C6J4u1gejLQOY0JyDJ7q
+bucket = imgxx

+ 28 - 1
database/mysql.go

@@ -11,6 +11,7 @@ import (
 )
 
 var Eloquent *gorm.DB
+var LyMysql *gorm.DB
 
 var (
 	Host     string
@@ -56,7 +57,33 @@ func Setup() {
 	}
 
 	Eloquent.LogMode(true)
-	//McNew()
+
+	//加载领养数据库链接
+	Host = confIni.MustValue("ly-mysql", "mysql_host")
+	Port = confIni.MustInt("ly-mysql", "mysql_port")
+	Name = confIni.MustValue("ly-mysql", "mysql_name")
+	Username = confIni.MustValue("ly-mysql", "mysql_username")
+	Password = confIni.MustValue("ly-mysql", "mysql_password")
+	conn = GetMysqlConnect()
+
+	log.Println(conn)
+
+	//var db Database
+
+	db = new(Mysql)
+	LyMysql, err = db.Open("mysql", conn)
+
+	if err != nil {
+		log.Fatalf("mysql connect error %v", err)
+	} else {
+		log.Printf("mysql connect success!")
+	}
+
+	if LyMysql.Error != nil {
+		log.Fatalf("database error %v", Eloquent.Error)
+	}
+
+	LyMysql.LogMode(true)
 
 }
 

+ 4 - 5
go.mod

@@ -7,7 +7,7 @@ require (
 	github.com/asmcos/requests v0.0.0-20210319030608-c839e8ae4946 // indirect
 	github.com/dgrijalva/jwt-go v3.2.0+incompatible // indirect
 	github.com/gin-gonic/gin v1.7.1 // indirect
-	github.com/go-playground/validator/v10 v10.5.0 // indirect
+	github.com/go-playground/validator/v10 v10.8.0 // indirect
 	github.com/go-sql-driver/mysql v1.6.0 // indirect
 	github.com/golang/protobuf v1.5.2 // indirect
 	github.com/jinzhu/gorm v1.9.16 // indirect
@@ -16,14 +16,13 @@ require (
 	github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
 	github.com/modern-go/reflect2 v1.0.1 // indirect
 	github.com/olivere/elastic/v7 v7.0.4 // indirect
+	github.com/qiniu/go-sdk/v7 v7.11.1 // indirect
 	github.com/robfig/cron v1.2.0 // indirect
 	github.com/shopspring/decimal v1.2.0 // indirect
 	github.com/sirupsen/logrus v1.4.2 // indirect
 	github.com/ugorji/go v1.2.5 // indirect
-	github.com/unrolled/secure v1.0.9 // indirect
-	golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b // indirect
-	golang.org/x/sys v0.0.0-20210426230700-d19ff857e887 // indirect
-	golang.org/x/text v0.3.6 // indirect
+	github.com/unrolled/secure v1.10.0 // indirect
+	golang.org/x/sync v0.0.0-20210220032951-036812b2e83c // indirect
 	gopkg.in/sohlich/elogrus.v7 v7.0.0 // indirect
 	gopkg.in/yaml.v2 v2.4.0 // indirect
 )

+ 37 - 0
go.sum

@@ -15,6 +15,7 @@ github.com/asmcos/requests v0.0.0-20210319030608-c839e8ae4946/go.mod h1:2W5PB6UT
 github.com/aws/aws-sdk-go v1.19.6/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo=
 github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
 github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
+github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/denisenkom/go-mssqldb v0.0.0-20191124224453-732737034ffd/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU=
@@ -35,11 +36,17 @@ github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9
 github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
 github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q=
 github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8=
+github.com/go-playground/locales v0.14.0 h1:u50s323jtVGugKlcYeyzC0etD1HifMjqmJqb8WugfUU=
+github.com/go-playground/locales v0.14.0/go.mod h1:sawfccIbzZTqEDETgFXqTho0QybSa7l++s0DH+LDiLs=
 github.com/go-playground/universal-translator v0.17.0 h1:icxd5fm+REJzpZx7ZfpaD876Lmtgy7VtROAbHHXk8no=
 github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA=
+github.com/go-playground/universal-translator v0.18.0 h1:82dyy6p4OuJq4/CByFNOn/jYrnRPArHwAcmLoJZxyho=
+github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA=
 github.com/go-playground/validator/v10 v10.4.1/go.mod h1:nlOn6nFhuKACm19sB/8EGNn9GlaMV7XkbRSipzJ0Ii4=
 github.com/go-playground/validator/v10 v10.5.0 h1:X9rflw/KmpACwT8zdrm1upefpvdy6ur8d1kWyq6sg3E=
 github.com/go-playground/validator/v10 v10.5.0/go.mod h1:xm76BBt941f7yWdGnI2DVPFFg1UK3YY04qifoXU3lOk=
+github.com/go-playground/validator/v10 v10.8.0 h1:1kAa0fCrnpv+QYdkdcRzrRM7AyYs5o8+jZdJCz9xj6k=
+github.com/go-playground/validator/v10 v10.8.0/go.mod h1:9JhgTzTaE31GZDpH/HSvHiRJrJ3iKAgqqH0Bl/Ocjdk=
 github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
 github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE=
 github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
@@ -78,6 +85,12 @@ github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+o
 github.com/konsorten/go-windows-terminal-sequences v1.0.1 h1:mweAR1A6xJ3oS2pRaGiHgQ4OO8tzTaLawm8vnODuwDk=
 github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
 github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
+github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
+github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
+github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk=
+github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
+github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
+github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
 github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII=
 github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w=
 github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY=
@@ -104,6 +117,7 @@ github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1Cpa
 github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
 github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw=
 github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
+github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA=
 github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
 github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I=
 github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
@@ -115,9 +129,15 @@ github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:
 github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
 github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
 github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
+github.com/qiniu/dyn v1.3.0/go.mod h1:E8oERcm8TtwJiZvkQPbcAh0RL8jO1G0VXJMW3FAWdkk=
+github.com/qiniu/go-sdk/v7 v7.11.1 h1:/LZ9rvFS4p6SnszhGv11FNB1+n4OZvBCwFg7opH5Ovs=
+github.com/qiniu/go-sdk/v7 v7.11.1/go.mod h1:btsaOc8CA3hdVloULfFdDgDc+g4f3TDZEFsDY0BLE+w=
+github.com/qiniu/x v1.10.5/go.mod h1:03Ni9tj+N2h2aKnAz+6N0Xfl8FwMEDRC2PAlxekASDs=
 github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
 github.com/robfig/cron v1.2.0 h1:ZjScXvvxeQ63Dbyxy76Fj3AT3Ut0aKsyd2/tl3DTMuQ=
 github.com/robfig/cron v1.2.0/go.mod h1:JGuDeoQd7Z6yL4zQhZ3OPEVHB7fL6Ka6skscFHfmt2k=
+github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
+github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE=
 github.com/shopspring/decimal v1.2.0 h1:abSATXmQEYyShuxI4/vyW3tV1MrKAJzCZ/0zLUXYbsQ=
 github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o=
 github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
@@ -138,6 +158,8 @@ github.com/ugorji/go/codec v1.2.5 h1:8WobZKAk18Msm2CothY2jnztY56YVY8kF1oQrj21iis
 github.com/ugorji/go/codec v1.2.5/go.mod h1:QPxoTbPKSEAlAHPYt02++xp/en9B/wUdwFCz+hj5caA=
 github.com/unrolled/secure v1.0.9 h1:BWRuEb1vDrBFFDdbCnKkof3gZ35I/bnHGyt0LB0TNyQ=
 github.com/unrolled/secure v1.0.9/go.mod h1:fO+mEan+FLB0CdEnHf6Q4ZZVNqG+5fuLFnP8p0BXDPI=
+github.com/unrolled/secure v1.10.0 h1:TBNP42z2AB+2pW9PR6vdbqhlQuv1iTeSVzK1qHjOBzA=
+github.com/unrolled/secure v1.10.0/go.mod h1:BmF5hyM6tXczk3MpQkFf1hpKSRqCyhqcbiQtiAF7+40=
 github.com/urfave/negroni v1.0.0/go.mod h1:Meg73S6kFm/4PpbYdq35yYWoCZ9mS/YSx+lKnmiohz4=
 go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk=
 golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
@@ -147,6 +169,9 @@ golang.org/x/crypto v0.0.0-20191205180655-e7c4368fe9dd/go.mod h1:LzIPMQfyMNhhGPh
 golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b h1:7mWr3k41Qtv8XlltBkDkl8LoP3mpSgBW8BUoxtEdbXg=
 golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
+golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
+golang.org/x/crypto v0.0.0-20210921155107-089bfa567519 h1:7I4JAnoQBe7ZtJcBaYHi5UtiO8tQHbUSXxL+pnGRANg=
+golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
 golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
 golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
 golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
@@ -170,6 +195,9 @@ golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJ
 golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20210220032951-036812b2e83c h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ=
+golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@@ -183,12 +211,18 @@ golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7w
 golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20210426230700-d19ff857e887 h1:dXfMednGJh/SUUFjTLsWJz3P+TQt9qnR11GgeI3vWKs=
 golang.org/x/sys v0.0.0-20210426230700-d19ff857e887/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20211020174200-9d6173849985 h1:LOlKVhfDyahgmqa97awczplwkjzNaELFg3zRIJ13RYo=
+golang.org/x/sys v0.0.0-20211020174200-9d6173849985/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
 golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
 golang.org/x/text v0.3.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M=
 golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk=
+golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
 golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
@@ -208,6 +242,8 @@ google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQ
 gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
+gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
 gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
 gopkg.in/sohlich/elogrus.v7 v7.0.0 h1:w4pw1DTXK/bqliKbcJk7hSXKrMM/jPdvpaROC9WSK+8=
 gopkg.in/sohlich/elogrus.v7 v7.0.0/go.mod h1:nGmb0kLyAPGwIHLpHNlMlz0l0OfSaFatKgfpuO/+fnY=
@@ -218,5 +254,6 @@ gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
 gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
 gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
 gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
 honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
 honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=

+ 68 - 0
models/mysqlLy/pets.go

@@ -0,0 +1,68 @@
+package mysqlLy
+
+import (
+	orm "duoduo/database"
+	"github.com/shopspring/decimal"
+	"time"
+)
+
+type Pets struct {
+	ID                  int64           `gorm:"column:id;type:bigint(20);primary_key;AUTO_INCREMENT" json:"id"`
+	UserID              int64           `gorm:"column:user_id;type:bigint(20)" json:"user_id"`
+	Name                string          `gorm:"column:name;type:varchar(64)" json:"name"`                                  // 昵称
+	Pet                 string          `gorm:"column:pet;type:varchar(64)" json:"pet"`                                    // 品种
+	Age                 string          `gorm:"column:age;type:varchar(16)" json:"age"`                                    // 年龄  '0-3个月','3-6个月','6-9个月','小于1岁','小于2岁','小于3岁','大于3岁'
+	Sex                 string          `gorm:"column:sex;type:varchar(4)" json:"sex"`                                     // 性别 MM GG
+	PetStatus           int             `gorm:"column:pet_status;type:tinyint(4)" json:"pet_status"`                       // 1-流浪 2-家养 3-收养所
+	PetDes              string          `gorm:"column:pet_des;type:varchar(16)" json:"pet_des"`                            // 宠物详细种类
+	IsSterilization     int             `gorm:"column:is_sterilization;type:tinyint(4)" json:"is_sterilization"`           // 绝育状态:1-是 2-否 3-不确认
+	IsExpellingParasite int             `gorm:"column:is_expelling_parasite;type:tinyint(4)" json:"is_expelling_parasite"` // 驱虫状态:1-是 2-否 3-不确认
+	IsImmune            int             `gorm:"column:is_immune;type:tinyint(4)" json:"is_immune"`                         // 免疫状态:1-是 2-否 3-不确认
+	IsFee               int             `gorm:"column:is_fee;type:tinyint(4)" json:"is_fee"`                               // 1-免费 2-押金 3-有偿
+	Deposit             decimal.Decimal `gorm:"column:deposit;type:decimal(10,2)" json:"deposit"`                          // 押金
+	DepositDate         time.Time       `gorm:"column:deposit_date;type:date;default:null" json:"deposit_date"`            // 押金到期时间
+	Amount              decimal.Decimal `gorm:"column:amount;type:decimal(10,2)" json:"amount"`                            // 金额
+	Province            string          `gorm:"column:province;type:varchar(16)" json:"province"`                          // 省
+	City                string          `gorm:"column:city;type:varchar(16)" json:"city"`                                  // 市
+	Area                string          `gorm:"column:area;type:varchar(16)" json:"area"`                                  // 区
+	PetInfo             string          `gorm:"column:pet_info;type:text" json:"pet_info"`                                 // 宠物信息
+	AdoptInfo           string          `gorm:"column:adopt_info;type:text" json:"adopt_info"`                             // 领养要求
+	Pictures            string          `gorm:"column:pictures;type:json" json:"pictures"`                                 // 图片url
+	Status              int             `gorm:"column:status;type:tinyint(4)" json:"status"`                               // 状态 1-待领养 2-已领养
+	CreateTime          time.Time       `gorm:"column:create_time;type:datetime" json:"create_time"`                       // 创建时间
+	UpdateTime          time.Time       `gorm:"column:update_time;type:datetime" json:"update_time"`                       // 更新时间
+	OpenId              string          `gorm:"column:open_id;type:varchar(255)" json:"open_id"`                           //openid
+}
+
+func (m *Pets) TableName() string {
+	return "pets"
+}
+
+func (m *Pets) Create() (Pets, error) {
+	var doc Pets
+	result := orm.LyMysql.Table(m.TableName()).Create(&m)
+	if result.Error != nil {
+		err := result.Error
+		return doc, err
+	}
+	doc = *m
+	return doc, nil
+}
+
+//list 接口使用
+func (m *Pets) GetPetsList(pageSize int, pageIndex int) ([]Pets, int, error) {
+	var doc []Pets
+
+	table := orm.LyMysql.Table(m.TableName())
+
+	if m.OpenId != "" {
+		table = table.Where("open_id = ?  ", m.OpenId)
+	}
+
+	var count int
+	if err := table.Order("id desc").Offset((pageIndex - 1) * pageSize).Limit(pageSize).Find(&doc).Error; err != nil {
+		return nil, 0, err
+	}
+	table.Count(&count)
+	return doc, count, nil
+}

+ 51 - 0
models/mysqlLy/user.go

@@ -0,0 +1,51 @@
+package mysqlLy
+
+import (
+	orm "duoduo/database"
+	"time"
+)
+
+type User struct {
+	ID         int64     `gorm:"column:id;type:bigint(20);primary_key;AUTO_INCREMENT" json:"id"`
+	OpenID     string    `gorm:"column:open_id;type:varchar(255)" json:"open_id"`       // open_id 唯一索引
+	Phone      string    `gorm:"column:phone;type:varchar(24)" json:"phone"`            // 手机号
+	NickName   string    `gorm:"column:nick_name;type:varchar(255)" json:"nick_name"`   // 微信用户名
+	AvatarUrl  string    `gorm:"column:avatar_url;type:varchar(255)" json:"avatar_url"` // 头像url
+	Mechanism  string    `gorm:"column:mechanism;type:varchar(255)" json:"mechanism"`   // 机构
+	WxCode     string    `gorm:"column:wx_code;type:varchar(255)" json:"wx_code"`       // 微信号
+	CreateTime time.Time `gorm:"column:create_time;type:datetime" json:"create_time"`   // 创建时间
+	UpdateTime time.Time `gorm:"column:update_time;type:datetime" json:"update_time"`   // 更新时间
+}
+
+func (m *User) TableName() string {
+	return "user"
+}
+
+func (m *User) Create() (User, error) {
+	var doc User
+	result := orm.LyMysql.Where(User{OpenID: m.OpenID}).FirstOrCreate(&m)
+	if result.Error != nil {
+		err := result.Error
+		return doc, err
+	}
+	doc = *m
+	return doc, nil
+}
+
+func (m *User) GetNum() int {
+	var count int
+	count = 0
+	tableCount := orm.LyMysql.Table(m.TableName()).Where("open_id = ? ", m.OpenID)
+	tableCount.Count(&count)
+	return count
+}
+
+func (m *User) Get() (User, error) {
+	var doc User
+	err := orm.LyMysql.Where("open_id = ? ", m.OpenID).Table(m.TableName()).First(&doc).Error
+	if err != nil {
+		return doc, err
+	}
+	return doc, nil
+
+}

+ 28 - 0
models/petsLy/pets.create.go

@@ -0,0 +1,28 @@
+package petsLy
+
+import (
+	"github.com/shopspring/decimal"
+)
+
+type PetsCreateRequest struct {
+	OpenId              string          `json:"open_id" binding:"required"`
+	Name                string          `json:"name" binding:"required"`                  // 昵称
+	Pet                 string          `json:"pet" binding:"required"`                   // 品种
+	Age                 string          `json:"age" binding:"required"`                   // 年龄  '0-3个月','3-6个月','6-9个月','小于1岁','小于2岁','小于3岁','大于3岁'
+	Sex                 string          `json:"sex" binding:"required"`                   // 性别 MM GG
+	PetStatus           int             `json:"pet_status" binding:"required"`            // 1-流浪 2-家养 3-收养所
+	PetDes              string          `json:"pet_des" binding:"required"`               // 宠物详细种类
+	IsSterilization     int             `json:"is_sterilization" binding:"required"`      // 绝育状态:1-是 2-否 3-不确认
+	IsExpellingParasite int             `json:"is_expelling_parasite" binding:"required"` // 驱虫状态:1-是 2-否 3-不确认
+	IsImmune            int             `json:"is_immune" binding:"required"`             // 免疫状态:1-是 2-否 3-不确认
+	IsFee               int             `json:"is_fee" binding:"required"`                // 1-免费 2-押金 3-有偿
+	Deposit             decimal.Decimal `json:"deposit"`                                  // 押金
+	DepositDate         string          `json:"deposit_date"`                             // 押金到期时间
+	Amount              decimal.Decimal `json:"amount" `                                  // 金额
+	Province            string          `json:"province" binding:"required"`              // 省
+	City                string          `json:"city" binding:"required"`                  // 市
+	Area                string          `json:"area" binding:"required"`                  // 区
+	PetInfo             string          `json:"pet_info" binding:"required"`              // 宠物信息
+	AdoptInfo           string          `json:"adopt_info" binding:"required"`            // 领养要求
+	Pictures            []string        `json:"pictures"`                                 // 图片url
+}

+ 15 - 0
models/petsLy/pets.list.go

@@ -0,0 +1,15 @@
+package petsLy
+
+import (
+	"duoduo/models/mysqlLy"
+)
+
+type PetsListRequest struct {
+	OpenId    string `json:"open_id"`
+	PageSize  int    `json:"pageSize"`
+	PageIndex int    `json:"pageIndex"`
+}
+
+type PetsListResponse struct {
+	Pets []mysqlLy.Pets `json:"pets"`
+}

+ 12 - 0
models/userLy/user.open.id.set.go

@@ -0,0 +1,12 @@
+package userLy
+
+type OpenIdSetRequest struct {
+	Code string `json:"code"` //微信code
+}
+
+type OpenIdSetResponse struct {
+	SessionKey string `json:"session_key,omitempty"`
+	OpenId     string `json:"openid,omitempty"`
+	Errcode    int    `json:"errcode,omitempty"`
+	Errmsg     string `json:"errmsg,omitempty"`
+}

+ 10 - 0
routers/router.go

@@ -3,7 +3,10 @@ package routers
 import (
 	"duoduo/apis/forward"
 	"duoduo/apis/pdd"
+	"duoduo/apis/petsLy"
+	"duoduo/apis/qiniu"
 	"duoduo/apis/user"
+	"duoduo/apis/userLy"
 	"duoduo/conf"
 	"github.com/gin-gonic/gin"
 	"github.com/unrolled/secure"
@@ -25,6 +28,13 @@ func InitRouter() {
 		user.InitUserRouter(r2)
 		forward.InitForwardRouter(r2)
 	}
+
+	ly := r.Group("/")
+	{
+		userLy.InitUserRouter(ly)
+		petsLy.InitPetsRouter(ly)
+		qiniu.InitQiNiuRouter(ly)
+	}
 	if conf.Model == "master" {
 		r.RunTLS(":443", "./shisanmiao.com.pem", "./shisanmiao.com.key")
 	} else {

+ 12 - 0
tools/string.go

@@ -40,6 +40,18 @@ func SubTimeSecond(inDate string) int64 {
 	return now.Unix() - sr
 }
 
+func GetStringToTime(ti string) (time.Time, error) {
+	t := time.Now() //当前时间
+	t.Unix()        //时间戳
+
+	st, err := time.Parse("2006-01-02", ti) //string转time
+	if err != nil {
+		return time.Time{}, err
+	}
+
+	return st, nil
+}
+
 //获取日期
 func GetCurrntDateStr() string {
 	NowTimeZone := time.FixedZone("CST", 8*3600)