k.zhang 1 سال پیش
والد
کامیت
9e4103d536
39فایلهای تغییر یافته به همراه1592 افزوده شده و 164 حذف شده
  1. 14 0
      apis/common/code_test.go
  2. 102 0
      apis/common/init.code.go
  3. 25 0
      apis/shanghu/base.go
  4. 1 0
      apis/shanghu/client.trans.go
  5. 1 0
      apis/shanghu/client_card.go
  6. 188 0
      apis/shanghu/merchant.card.go
  7. 127 0
      apis/shanghu/merchant.card.project.go
  8. 1 0
      apis/shanghu/merchant.client.user.go
  9. 141 0
      apis/shanghu/merchant.go
  10. 169 0
      apis/shanghu/merchant.user.go
  11. 52 0
      apis/shanghu/models/card.go
  12. 36 0
      apis/shanghu/models/card.project.go
  13. 1 0
      apis/shanghu/models/client.trans.go
  14. 1 0
      apis/shanghu/models/client.users.go
  15. 44 0
      apis/shanghu/models/merchant.go
  16. 20 0
      apis/shanghu/models/user.go
  17. 7 0
      conf/conf.ini
  18. 8 0
      conf/conf_master.ini
  19. 8 0
      conf/conf_test.ini
  20. 31 0
      database/mysql.go
  21. 2 1
      go.mod
  22. 4 2
      go.sum
  23. 21 0
      models/shanghu/client.account.go
  24. 24 0
      models/shanghu/client.account.log.go
  25. 24 0
      models/shanghu/client.card.go
  26. 21 0
      models/shanghu/client.card.use.log.go
  27. 20 0
      models/shanghu/client.trans.go
  28. 70 0
      models/shanghu/client.user.go
  29. 95 0
      models/shanghu/merchant.go
  30. 100 0
      models/shanghu/merchant_card.go
  31. 80 0
      models/shanghu/merchant_card_project.go
  32. 71 0
      models/shanghu/merchant_user.go
  33. 3 5
      report/report.go
  34. 5 0
      routers/router.go
  35. 27 27
      shisanmiao.com.key
  36. 0 27
      shisanmiao.com.key.bak
  37. 35 35
      shisanmiao.com.pem
  38. 0 63
      shisanmiao.com.pem.bak
  39. 13 4
      tools/string.go

+ 14 - 0
apis/common/code_test.go

@@ -0,0 +1,14 @@
+package common
+
+import (
+	"fmt"
+	"testing"
+)
+
+func TestGetCode(t *testing.T) {
+	res := Example(5, 10)
+	for i := 0; i < len(res); i++ {
+		fmt.Println(i+1, res[i])
+	}
+	fmt.Println(res[0])
+}

+ 102 - 0
apis/common/init.code.go

@@ -0,0 +1,102 @@
+package common
+
+import (
+	"fmt"
+	"math/rand"
+	"sync"
+)
+
+func GetCode() string {
+	res := Example(5, 10)
+	for i := 0; i < len(res); i++ {
+		fmt.Println(i+1, res[i])
+	}
+	return res[0]
+}
+
+func Example(length int, max int) []string {
+	// Seeding with the same value results in the same random sequence each run.
+	// For different numbers, seed with a different value, such as
+	// time.Now().UnixNano(), which yields a constantly-changing number.
+	//rand.Seed(42)
+
+	digitNumber := []string{
+		"1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z",
+	}
+	// 用make创建map
+
+	set := New()
+	for set.Len() < max {
+		ranNumber := ""
+		for j := 1; j < length; j++ {
+			ranNumber += digitNumber[rand.Intn(len(digitNumber))]
+		}
+		if !set.Has(ranNumber) {
+			set.Add(ranNumber)
+		}
+	}
+
+	return set.List()
+
+}
+
+/*
+*
+构造set类型
+*/
+type Set struct {
+	m map[string]bool
+	sync.RWMutex
+}
+
+func New() *Set {
+	return &Set{
+		m: map[string]bool{},
+	}
+}
+
+func (s *Set) Add(item string) {
+	s.Lock()
+	defer s.Unlock()
+	s.m[item] = true
+}
+
+func (s *Set) Remove(item string) {
+	s.Lock()
+	s.Unlock()
+	delete(s.m, item)
+}
+
+func (s *Set) Has(item string) bool {
+	s.RLock()
+	defer s.RUnlock()
+	_, ok := s.m[item]
+	return ok
+}
+
+func (s *Set) Len() int {
+	return len(s.List())
+}
+
+func (s *Set) Clear() {
+	s.Lock()
+	defer s.Unlock()
+	s.m = map[string]bool{}
+}
+
+func (s *Set) IsEmpty() bool {
+	if s.Len() == 0 {
+		return true
+	}
+	return false
+}
+
+func (s *Set) List() []string {
+	s.RLock()
+	defer s.RUnlock()
+	list := []string{}
+	for item := range s.m {
+		list = append(list, item)
+	}
+	return list
+}

+ 25 - 0
apis/shanghu/base.go

@@ -0,0 +1,25 @@
+package shanghu
+
+import "github.com/gin-gonic/gin"
+
+func InitShangHuRouter(engine *gin.RouterGroup) {
+	v1 := engine.Group("v1")
+	{
+		v1.POST("/merchant/user/set", OpenIdSet)                            //获取openid 创建用户
+		v1.POST("/client/user/set", ClientOpenIdSet)                        //获取openid 创建用户
+		v1.POST("/client/user/info", ClientGetUserInfo)                     //client获取用户信息
+		v1.POST("/merchant/user/info", GetUserInfo)                         //获取用户信息
+		v1.POST("/merchant/card/create", CreateMerchantCard)                //创建商户卡
+		v1.POST("/merchant/card/get", GetMerchantCard)                      //获取商户卡信息
+		v1.POST("/merchant/card/list", MerchantCardList)                    //商户卡列表                                               //获取商户卡列表
+		v1.POST("/merchant/card/update", UpdateMerchantCard)                //更新商户卡
+		v1.POST("/merchant/cart/project/create", CreateMerchantCardProject) //创建商户项目
+		v1.POST("/merchant/card/project/get", GetMerchantCardProject)       //获取商户卡项目信息
+		v1.POST("/merchant/card/project/list", MerchantCardProjectList)     //获取商户卡项目列表
+		v1.POST("/merchant/card/project/update", UpdateMerchantCardProject) //更新商户卡项目
+		v1.POST("/merchant/create", CreateMerchant)                         //商户信息
+		v1.POST("/merchant/get", GetMerchant)                               //获取商户信息
+		v1.POST("/merchant/list", MerchantList)                             //获取商户列表
+		v1.POST("/merchant/update", UpdateMerchant)                         //更新商户信息
+	}
+}

+ 1 - 0
apis/shanghu/client.trans.go

@@ -0,0 +1 @@
+package shanghu

+ 1 - 0
apis/shanghu/client_card.go

@@ -0,0 +1 @@
+package shanghu

+ 188 - 0
apis/shanghu/merchant.card.go

@@ -0,0 +1,188 @@
+package shanghu
+
+import (
+	"duoduo/apis/shanghu/models"
+	"duoduo/models/shanghu"
+	"duoduo/tools"
+	"duoduo/tools/app"
+	"encoding/json"
+	"fmt"
+	"github.com/gin-gonic/gin"
+	"strconv"
+	"time"
+)
+
+func CreateMerchantCard(c *gin.Context) {
+	var inData models.CreateMerchantCardRequest
+	var sqlData shanghu.MerchantCard
+
+	err := c.ShouldBindJSON(&inData)
+	if err != nil {
+		app.Error(c, 400, err, err.Error())
+		return
+	}
+	sqlData.CreatedAt = time.Now()
+	sqlData.UpdatedAt = time.Now()
+	jsStr, err := json.Marshal(inData.CardProjectData)
+	if err != nil {
+		app.Error(c, 400, err, "包含项目不能为空")
+		return
+	}
+
+	//"json: cannot unmarshal string into Go struct field CreateMerchantCardRequest.inventory of type int64"
+	//"json: cannot unmarshal bool into Go struct field CreateMerchantCardRequest.merchant_card_time of type string"
+	//"json: cannot unmarshal string into Go struct field CreateMerchantCardRequest.inventory of type int64"
+	sqlData.CardProjectData = string(jsStr)
+	sqlData.CardPrice = inData.CardPrice
+	sqlData.ActivityEndTime, err = tools.TimeToInt64(inData.ActivityEndTime, "2006-01-02")
+	if err != nil {
+		app.Error(c, 400, err, err.Error())
+		return
+	}
+	sqlData.ActivityStartTime, err = tools.TimeToInt64(inData.ActivityStartTime, "2006-01-02")
+	if err != nil {
+		app.Error(c, 400, err, err.Error())
+		return
+	}
+	sqlData.Inventory, err = strconv.ParseInt(inData.Inventory, 10, 64)
+	if err != nil {
+		app.Error(c, 400, err, err.Error())
+		return
+	}
+	sqlData.MerchantCardTime, err = tools.TimeToInt64(inData.MerchantCardTime, "2006-01-02")
+	if err != nil {
+		app.Error(c, 400, err, err.Error())
+		return
+	}
+	sqlData.MerchantOpenID = inData.MerchantOpenID
+	sqlData.Picture = inData.Picture
+	sqlData.QuotaNum, err = strconv.ParseInt(inData.QuotaNum, 10, 64)
+	if err != nil {
+		app.Error(c, 400, err, err.Error())
+		return
+	}
+	sqlData.RebateRate, err = strconv.ParseInt(inData.RebateRate, 10, 64)
+	if err != nil {
+		app.Error(c, 400, err, err.Error())
+		return
+	}
+	sqlData.UseRule = inData.UseRule
+	sqlData.MerchantCardName = inData.MerchantCardName
+
+	_, err = sqlData.Create()
+	if err != nil {
+		app.Error(c, 500, err, err.Error())
+		return
+	}
+
+	app.OK(c, nil, app.Success)
+
+}
+
+func GetMerchantCard(c *gin.Context) {
+	var inData models.GetMerchantCardRequest
+	var outData models.GetMerchantCardReply
+	var sqlData shanghu.MerchantCard
+	var project []int64
+
+	err := c.ShouldBindJSON(&inData)
+	if err != nil {
+		app.Error(c, 400, err, err.Error())
+		return
+	}
+	sqlData.ID = inData.MerchantId
+
+	merchantCard, err := sqlData.GetMerchantCard()
+	if err != nil {
+		app.Error(c, 500, err, err.Error())
+		return
+	}
+	err = json.Unmarshal([]byte(merchantCard.CardProjectData), &project)
+	if err != nil {
+		app.Error(c, 500, err, err.Error())
+		return
+	}
+
+	merchantCard.CardProjectData = ""
+	for i := 0; i < len(project); i++ {
+		var cardProject shanghu.MerchantCardProject
+		cardProject.ID = project[i]
+		projectInfo, err := cardProject.GetMerchantCardProject()
+		if err != nil {
+			app.Error(c, 500, err, err.Error())
+			return
+		}
+		merchantCard.CardProjectData = merchantCard.CardProjectData + projectInfo.ProjectName + "x1 "
+	}
+	outData.CardProjectData = merchantCard.CardProjectData
+	outData.MerchantCardName = merchantCard.MerchantCardName
+	outData.MerchantCardTime = time.Unix(merchantCard.MerchantCardTime, 0).Format("2006-01-02")
+	outData.ActivityEndTime = time.Unix(merchantCard.ActivityEndTime, 0).Format("2006-01-02")
+	outData.ActivityStartTime = time.Unix(merchantCard.ActivityStartTime, 0).Format("2006-01-02")
+	outData.Picture = merchantCard.Picture
+	outData.UseRule = merchantCard.UseRule
+	outData.QuotaNum = merchantCard.QuotaNum
+	outData.Inventory = merchantCard.Inventory
+	outData.RebateRate = merchantCard.RebateRate
+	outData.CardPrice = merchantCard.CardPrice
+
+	app.OK(c, outData, app.Success)
+
+}
+
+func MerchantCardList(c *gin.Context) {
+	var inData models.MerchantCardListRequest
+	var sqlData shanghu.MerchantCard
+
+	err := c.ShouldBindJSON(&inData)
+	if err != nil {
+		app.Error(c, 400, err, err.Error())
+		return
+	}
+
+	var pageSize = 10
+	var pageIndex = 1
+
+	if inData.PageSize != 0 {
+		pageSize = inData.PageSize
+	}
+	if inData.PageIndex != 0 {
+		pageIndex = inData.PageIndex
+	}
+	fmt.Println(inData.OpenId)
+	sqlData.MerchantOpenID = inData.OpenId
+
+	merchantCard, count, err := sqlData.GetOpenIdList(pageSize, pageIndex, inData.TypeList)
+	if err != nil {
+		app.Error(c, 500, err, err.Error())
+		return
+	}
+	app.PageOK(c, merchantCard, count, pageIndex, pageSize, app.Success)
+
+}
+
+func UpdateMerchantCard(c *gin.Context) {
+	var inData models.UpdateMerchantCardRequest
+	var sqlData shanghu.MerchantCard
+
+	err := c.ShouldBindJSON(&inData)
+	if err != nil {
+		app.Error(c, 400, err, err.Error())
+		return
+	}
+
+	sqlData.ID = inData.ID
+	sqlData.QuotaNum = inData.QuotaNum
+	sqlData.UseRule = inData.UseRule
+	sqlData.Picture = inData.Picture
+	sqlData.Inventory = inData.Inventory
+	sqlData.ActivityStartTime = inData.ActivityStartTime
+	sqlData.ActivityEndTime = inData.ActivityEndTime
+	err = sqlData.UpdateMerchantCard()
+	if err != nil {
+		app.Error(c, 400, err, err.Error())
+		return
+	}
+
+	app.OK(c, nil, app.Success)
+}

+ 127 - 0
apis/shanghu/merchant.card.project.go

@@ -0,0 +1,127 @@
+package shanghu
+
+import (
+	"duoduo/apis/shanghu/models"
+	"duoduo/models/shanghu"
+	"duoduo/tools/app"
+	"github.com/gin-gonic/gin"
+	"time"
+)
+
+func CreateMerchantCardProject(c *gin.Context) {
+	var inData models.CreateMerchantCardProjectRequest
+	var sqlData shanghu.MerchantCardProject
+
+	err := c.ShouldBindJSON(&inData)
+	if err != nil {
+		app.Error(c, 400, err, err.Error())
+		return
+	}
+	sqlData.CreatedAt = time.Now()
+	sqlData.UpdatedAt = time.Now()
+	sqlData.ProjectName = inData.ProjectName
+	sqlData.ProjectUnit = inData.ProjectUnit
+	sqlData.ProjectUnitPrice = inData.ProjectUnitPrice
+	sqlData.ProjectUrl = inData.ProjectUrl
+	sqlData.MerchantOpenID = inData.MerchantOpenID
+	sqlData.UpdatedAt = time.Now()
+	sqlData.CreatedAt = time.Now()
+
+	_, err = sqlData.Create()
+	if err != nil {
+		app.Error(c, 500, err, err.Error())
+		return
+	}
+
+	app.OK(c, nil, app.Success)
+
+}
+
+func GetMerchantCardProject(c *gin.Context) {
+	var inData models.GetMerchantCardProjectRequest
+	var sqlData shanghu.MerchantCardProject
+
+	err := c.ShouldBindJSON(&inData)
+	if err != nil {
+		app.Error(c, 400, err, err.Error())
+		return
+	}
+	sqlData.ID = inData.MerchantCardProjectId
+
+	merchantCardProject, err := sqlData.GetMerchantCardProject()
+	if err != nil {
+		app.Error(c, 500, err, err.Error())
+		return
+	}
+
+	app.OK(c, merchantCardProject, app.Success)
+
+}
+
+func MerchantCardProjectList(c *gin.Context) {
+	var inData models.MerchantCardProjectListRequest
+	var sqlData shanghu.MerchantCardProject
+	var outData []models.MerchantCardProjectListReply
+
+	err := c.ShouldBindJSON(&inData)
+	if err != nil {
+		app.Error(c, 400, err, err.Error())
+		return
+	}
+
+	var pageSize = 10
+	var pageIndex = 1
+
+	if inData.PageSize != 0 {
+		pageSize = inData.PageSize
+	}
+	if inData.PageIndex != 0 {
+		pageIndex = inData.PageIndex
+	}
+	sqlData.MerchantOpenID = inData.OpenId
+
+	merchantCard, count, err := sqlData.GetOpenIdList(pageSize, pageIndex)
+	if err != nil {
+		app.Error(c, 500, err, err.Error())
+		return
+	}
+
+	for _, v := range merchantCard {
+		var reply models.MerchantCardProjectListReply
+		reply.MerchantOpenID = v.MerchantOpenID
+		reply.ProjectUnitPrice = v.ProjectUnitPrice
+		reply.ProjectUnit = v.ProjectUnit
+		reply.ProjectName = v.ProjectName
+		reply.Filled = false
+		reply.ID = v.ID
+		outData = append(outData, reply)
+	}
+
+	app.PageOK(c, outData, count, pageIndex, pageSize, app.Success)
+
+}
+
+func UpdateMerchantCardProject(c *gin.Context) {
+	var inData models.UpdateMerchantCardProjectRequest
+	var sqlData shanghu.MerchantCardProject
+
+	err := c.ShouldBindJSON(&inData)
+	if err != nil {
+		app.Error(c, 400, err, err.Error())
+		return
+	}
+
+	sqlData.ID = inData.ID
+	sqlData.ProjectUrl = inData.ProjectUrl
+	sqlData.ProjectUnitPrice = inData.ProjectUnitPrice
+	sqlData.ProjectUnit = inData.ProjectUnit
+	sqlData.ProjectName = inData.ProjectName
+	sqlData.UpdatedAt = time.Now()
+	err = sqlData.UpdateMerchantCardProject()
+	if err != nil {
+		app.Error(c, 400, err, err.Error())
+		return
+	}
+
+	app.OK(c, nil, app.Success)
+}

+ 1 - 0
apis/shanghu/merchant.client.user.go

@@ -0,0 +1 @@
+package shanghu

+ 141 - 0
apis/shanghu/merchant.go

@@ -0,0 +1,141 @@
+package shanghu
+
+import (
+	"duoduo/apis/shanghu/models"
+	"duoduo/models/shanghu"
+	"duoduo/tools/app"
+	"github.com/gin-gonic/gin"
+	"time"
+)
+
+func CreateMerchant(c *gin.Context) {
+	var inData models.CreateMerchantRequest
+	var sqlData shanghu.Merchant
+
+	err := c.ShouldBindJSON(&inData)
+	if err != nil {
+		app.Error(c, 400, err, err.Error())
+		return
+	}
+	sqlData.OpenId = inData.OpenId
+
+	merchant, err := sqlData.GetMerchant()
+	if err != nil && err.Error() != "record not found" {
+		app.Error(c, 500, err, err.Error())
+		return
+	}
+
+	if merchant.ID > 0 {
+		app.OK(c, nil, app.Success)
+		return
+	}
+
+	sqlData.CreatedAt = time.Now()
+	sqlData.UpdatedAt = time.Now()
+	sqlData.MerchantName = inData.MerchantName
+	sqlData.Area = inData.Area
+	sqlData.Address = inData.Address
+	sqlData.BusinessHours = inData.BusinessHours
+	sqlData.BusinessLicenseUrl = inData.BusinessLicenseUrl
+	sqlData.Consumption = inData.Consumption
+	sqlData.Contacts = inData.Contacts
+	sqlData.DoorHeaderUrl = inData.DoorHeaderUrl
+	sqlData.Industry = inData.Industry
+	sqlData.IndustryCategory = inData.IndustryCategory
+	sqlData.Iphone = inData.Iphone
+	sqlData.NumberPlate = inData.NumberPlate
+	sqlData.OpenId = inData.OpenId
+
+	_, err = sqlData.Create()
+	if err != nil {
+		app.Error(c, 500, err, err.Error())
+		return
+	}
+
+	app.OK(c, nil, app.Success)
+
+}
+
+func GetMerchant(c *gin.Context) {
+	var inData models.GetMerchantRequest
+	var sqlData shanghu.Merchant
+
+	err := c.ShouldBindJSON(&inData)
+	if err != nil {
+		app.Error(c, 400, err, err.Error())
+		return
+	}
+	sqlData.OpenId = inData.OpenId
+
+	merchant, err := sqlData.GetMerchant()
+	if err != nil {
+		app.Error(c, 500, err, err.Error())
+		return
+	}
+
+	app.OK(c, merchant, app.Success)
+
+}
+
+func MerchantList(c *gin.Context) {
+	var inData models.MerchantListRequest
+	var sqlData shanghu.Merchant
+
+	err := c.ShouldBindJSON(&inData)
+	if err != nil {
+		app.Error(c, 400, err, err.Error())
+		return
+	}
+
+	var pageSize = 10
+	var pageIndex = 1
+
+	if inData.PageSize != 0 {
+		pageSize = inData.PageSize
+	}
+	if inData.PageIndex != 0 {
+		pageIndex = inData.PageIndex
+	}
+	sqlData.NumberPlate = inData.OpenId
+
+	merchant, count, err := sqlData.GetOpenIdList(pageSize, pageIndex)
+	if err != nil {
+		app.Error(c, 500, err, err.Error())
+		return
+	}
+	app.PageOK(c, merchant, count, pageIndex, pageSize, app.Success)
+
+}
+
+func UpdateMerchant(c *gin.Context) {
+	var inData models.UpdateMerchantRequest
+	var sqlData shanghu.Merchant
+
+	err := c.ShouldBindJSON(&inData)
+	if err != nil {
+		app.Error(c, 400, err, err.Error())
+		return
+	}
+
+	sqlData.ID = inData.ID
+	sqlData.MerchantName = inData.MerchantName
+	sqlData.Area = inData.Area
+	sqlData.Address = inData.Address
+	sqlData.BusinessHours = inData.BusinessHours
+	sqlData.BusinessLicenseUrl = inData.BusinessLicenseUrl
+	sqlData.Consumption = inData.Consumption
+	sqlData.Contacts = inData.Contacts
+	sqlData.DoorHeaderUrl = inData.DoorHeaderUrl
+	sqlData.Industry = inData.Industry
+	sqlData.IndustryCategory = inData.IndustryCategory
+	sqlData.Iphone = inData.Iphone
+	sqlData.NumberPlate = inData.NumberPlate
+
+	err = sqlData.UpdateMerchant()
+	if err != nil {
+		app.Error(c, 400, err, err.Error())
+		return
+	}
+
+	app.OK(c, nil, app.Success)
+}

+ 169 - 0
apis/shanghu/merchant.user.go

@@ -0,0 +1,169 @@
+package shanghu
+
+import (
+	"duoduo/apis/common"
+	"duoduo/apis/pdd"
+	"duoduo/apis/shanghu/models"
+	"duoduo/models/shanghu"
+	"duoduo/tools"
+	"duoduo/tools/app"
+	"fmt"
+	"github.com/gin-gonic/gin"
+	"time"
+)
+
+// 注册用户
+func OpenIdSet(c *gin.Context) {
+	var inData models.OpenIdSetRequest
+	var outData models.OpenIdSetResponse
+	var sqlData shanghu.MerchantUser
+	//var sql1 bizhi.User
+
+	err := c.ShouldBindJSON(&inData)
+	if err != nil {
+		app.Error(c, 400, err, err.Error())
+		return
+	}
+
+	url := fmt.Sprintf("https://api.weixin.qq.com/sns/jscode2session?appid=wxef36f8713d6469b5&secret=43ddd9b4d34c40e2cc4f15d531e28d8e&js_code=%s&grant_type=authorization_code", 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
+	}
+	//查询数据
+	sqlData.OpenID = outData.OpenId
+	num := sqlData.GetNum()
+	if num == 0 {
+		//创建用户
+		sqlData.CreatedAt = time.Now()
+		sqlData.UpdatedAt = time.Now()
+		//校验唯一性
+		for _, v := range common.Example(5, 10) {
+			sqlData.Code = v
+			if sqlData.GetCodeNum() <= 0 {
+				break
+			}
+		}
+
+		_, err = sqlData.Create()
+		if err != nil {
+			app.Error(c, 500, err, err.Error())
+			return
+		}
+	}
+
+	app.OK(c, outData, app.Success)
+
+}
+
+// 注册用户
+func ClientOpenIdSet(c *gin.Context) {
+	var inData models.OpenIdSetRequest
+	var outData models.OpenIdSetResponse
+	var sqlData shanghu.MerchantClientUser
+
+	err := c.ShouldBindJSON(&inData)
+	if err != nil {
+		app.Error(c, 400, err, err.Error())
+		return
+	}
+
+	fmt.Println(inData)
+	url := fmt.Sprintf("https://api.weixin.qq.com/sns/jscode2session?appid=wx25357518f710b8ce&secret=83c7dca801a6c93fbfac3c91f57a4eb2&js_code=%s&grant_type=authorization_code", 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
+	}
+	//查询数据
+	sqlData.ClientOpenID = outData.OpenId
+	num := sqlData.GetNum()
+	if num == 0 {
+		//创建用户
+		sqlData.CreatedAt = time.Now()
+		sqlData.UpdatedAt = time.Now()
+		//校验唯一性
+		for _, v := range common.Example(5, 10) {
+			sqlData.Code = v
+			if sqlData.GetCodeNum() <= 0 {
+				break
+			}
+		}
+
+		_, err = sqlData.Create()
+		if err != nil {
+			app.Error(c, 500, err, err.Error())
+			return
+		}
+	}
+
+	app.OK(c, outData, app.Success)
+
+}
+
+func GetUserInfo(c *gin.Context) {
+	var inData models.GetUserInfoRequest
+	var sqlData shanghu.MerchantUser
+
+	err := c.ShouldBindJSON(&inData)
+	if err != nil {
+		app.Error(c, 400, err, err.Error())
+		return
+	}
+
+	//查询数据
+	sqlData.OpenID = inData.OpenId
+	userInfo, err := sqlData.GetUserInfo()
+	if err != nil {
+		app.Error(c, 500, err, err.Error())
+		return
+	}
+
+	app.OK(c, userInfo, app.Success)
+
+}
+
+func ClientGetUserInfo(c *gin.Context) {
+	var inData models.GetUserInfoRequest
+	var sqlData shanghu.MerchantClientUser
+
+	err := c.ShouldBindJSON(&inData)
+	if err != nil {
+		app.Error(c, 400, err, err.Error())
+		return
+	}
+
+	//查询数据
+	sqlData.ClientOpenID = inData.OpenId
+	userInfo, err := sqlData.GetUserInfo()
+	if err != nil {
+		app.Error(c, 500, err, err.Error())
+		return
+	}
+
+	app.OK(c, userInfo, app.Success)
+
+}

+ 52 - 0
apis/shanghu/models/card.go

@@ -0,0 +1,52 @@
+package models
+
+type CreateMerchantCardRequest struct {
+	MerchantCardName  string  `json:"merchant_card_name"`  // 商户卡名称
+	MerchantOpenID    string  `json:"open_id"`             // openid
+	CardProjectData   []int64 `json:"card_project_data"`   // 项目
+	CardPrice         string  `json:"card_price"`          // 单价
+	ActivityEndTime   string  `json:"activity_end_time"`   // 活动结束时间
+	ActivityStartTime string  `json:"activity_start_time"` // 活动开始时间
+	MerchantCardTime  string  `json:"merchant_card_time"`  // 商户卡有效期
+	Inventory         string  `json:"inventory"`           // 库存数量
+	QuotaNum          string  `json:"quota_num"`           // 限购数量
+	UseRule           string  `json:"use_rule"`            // 使用规则
+	Picture           string  `json:"picture"`             // 图片
+	RebateRate        string  `json:"rebate_rate"`         // 佣金比例
+}
+
+type GetMerchantCardRequest struct {
+	MerchantId int64 `json:"merchant_card_id"` //商户卡id
+}
+
+type GetMerchantCardReply struct {
+	MerchantCardName  string `json:"merchant_card_name"`  // 商户卡名称
+	MerchantOpenID    string `json:"merchant_open_id"`    // openid
+	CardProjectData   string `json:"card_project_data"`   // 项目
+	CardPrice         string `json:"card_price"`          // 单价
+	ActivityEndTime   string `json:"activity_end_time"`   // 活动结束时间
+	ActivityStartTime string `json:"activity_start_time"` // 活动开始时间
+	MerchantCardTime  string `json:"merchant_card_time"`  // 商户卡有效期
+	Inventory         int64  `json:"inventory"`           // 库存数量
+	QuotaNum          int64  `json:"quota_num"`           // 限购数量
+	UseRule           string `json:"use_rule"`            // 使用规则
+	Picture           string `json:"picture"`             // 图片
+	RebateRate        int64  `json:"rebate_rate"`
+}
+
+type MerchantCardListRequest struct {
+	OpenId    string `json:"open_id"`
+	PageSize  int    `json:"page_size"`
+	PageIndex int    `json:"page_index"`
+	TypeList  int    `json:"type_list"` //1-未开始 2-进行中 3-已结束
+}
+
+type UpdateMerchantCardRequest struct {
+	ID                int64  `json:"id"`
+	ActivityEndTime   int64  `json:"activity_end_time"`   // 活动结束时间
+	ActivityStartTime int64  `json:"activity_start_time"` // 活动开始时间
+	Inventory         int64  `json:"inventory"`           // 库存数量
+	QuotaNum          int64  `json:"quota_num"`           // 限购数量
+	UseRule           string `json:"use_rule"`            // 使用规则
+	Picture           string `json:"picture"`             // 图片
+}

+ 36 - 0
apis/shanghu/models/card.project.go

@@ -0,0 +1,36 @@
+package models
+
+type CreateMerchantCardProjectRequest struct {
+	MerchantOpenID   string `json:"merchant_open_id"`   // open_id
+	ProjectUnitPrice string `json:"project_unit_price"` // 单价
+	ProjectUnit      string `json:"project_unit"`       // 产品单位
+	ProjectUrl       string `json:"project_url"`        // 图片
+	ProjectName      string `json:"project_name"`
+}
+
+type GetMerchantCardProjectRequest struct {
+	MerchantCardProjectId int64 `json:"merchant_card_project_id"` //商户卡项目id
+}
+
+type MerchantCardProjectListRequest struct {
+	OpenId    string `json:"open_id"`
+	PageSize  int    `json:"page_size"`
+	PageIndex int    `json:"page_index"`
+}
+type MerchantCardProjectListReply struct {
+	ID               int64  `json:"id"`
+	Filled           bool   `json:"filled"`
+	MerchantOpenID   string `json:"merchant_open_id"`   // open_id
+	ProjectUnitPrice string `json:"project_unit_price"` // 单价
+	ProjectUnit      string `json:"project_unit"`       // 产品单位
+	ProjectUrl       string `json:"project_url"`        // 图片
+	ProjectName      string `json:"project_name"`
+}
+
+type UpdateMerchantCardProjectRequest struct {
+	ID               int64  `json:"id"`
+	ProjectUnitPrice string `json:"project_unit_price"` // 单价
+	ProjectUnit      string `json:"project_unit"`       // 产品单位
+	ProjectUrl       string `json:"project_url"`        // 图片
+	ProjectName      string `json:"project_name"`
+}

+ 1 - 0
apis/shanghu/models/client.trans.go

@@ -0,0 +1 @@
+package models

+ 1 - 0
apis/shanghu/models/client.users.go

@@ -0,0 +1 @@
+package models

+ 44 - 0
apis/shanghu/models/merchant.go

@@ -0,0 +1,44 @@
+package models
+
+type CreateMerchantRequest struct {
+	OpenId             string `json:"open_id"`              //open_id
+	MerchantName       string `json:"merchant_name"`        // 店铺名称
+	Industry           string `json:"industry"`             // 行业
+	IndustryCategory   string `json:"industry_category"`    // 行业分类
+	Contacts           string `json:"contacts"`             // 联系人
+	BusinessHours      string `json:"business_hours"`       // 营业时间
+	Consumption        string `json:"consumption"`          // 人均消费
+	Iphone             string `json:"iphone"`               // 手机号
+	Area               string `json:"area"`                 // 地区
+	Address            string `json:"address"`              // 地址
+	NumberPlate        string `json:"number_plate"`         // 门牌号
+	BusinessLicenseUrl string `json:"business_license_url"` // 营业执照 url
+	DoorHeaderUrl      string `json:"door_header_url"`      // 门头照 url
+
+}
+
+type GetMerchantRequest struct {
+	OpenId string `json:"open_id"` //openid
+}
+
+type MerchantListRequest struct {
+	OpenId    string `json:"open_id"`
+	PageSize  int    `json:"page_size"`
+	PageIndex int    `json:"page_index"`
+}
+
+type UpdateMerchantRequest struct {
+	ID                 int64  `json:"id"`
+	MerchantName       string `json:"merchant_name"`        // 店铺名称
+	Industry           string `json:"industry"`             // 行业
+	IndustryCategory   string `json:"industry_category"`    // 行业分类
+	Contacts           string `json:"contacts"`             // 联系人
+	BusinessHours      string `json:"business_hours"`       // 营业时间
+	Consumption        string `json:"consumption"`          // 人均消费
+	Iphone             string `json:"iphone"`               // 手机号
+	Area               string `json:"area"`                 // 地区
+	Address            string `json:"address"`              // 地址
+	NumberPlate        string `json:"number_plate"`         // 门牌号
+	BusinessLicenseUrl string `json:"business_license_url"` // 营业执照 url
+	DoorHeaderUrl      string `json:"door_header_url"`      // 门头照 url
+}

+ 20 - 0
apis/shanghu/models/user.go

@@ -0,0 +1,20 @@
+package models
+
+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"`
+}
+
+type GetUserInfoRequest struct {
+	OpenId string `json:"open_id"`
+}
+
+type GetUserInfoResponse struct {
+	OpenId string `json:"open_id"`
+}

+ 7 - 0
conf/conf.ini

@@ -34,4 +34,11 @@ mysql_host = 49.234.19.130
 mysql_name = bizhi_test
 mysql_password = Zhangkun0212a@
 mysql_port = 3306
+mysql_username = gogs
+
+[sh-mysql]
+mysql_host = 49.234.19.130
+mysql_name = lianmengka_test
+mysql_password = Zhangkun0212a@
+mysql_port = 3306
 mysql_username = gogs

+ 8 - 0
conf/conf_master.ini

@@ -33,4 +33,12 @@ mysql_host = 49.234.19.130
 mysql_name = bizhi
 mysql_password = Zhangkun0212a@
 mysql_port = 3306
+mysql_username = gogs
+
+
+[sh-mysql]
+mysql_host = 49.234.19.130
+mysql_name = lianmengka
+mysql_password = Zhangkun0212a@
+mysql_port = 3306
 mysql_username = gogs

+ 8 - 0
conf/conf_test.ini

@@ -33,4 +33,12 @@ mysql_host = 49.234.19.130
 mysql_name = bizhi_test
 mysql_password = Zhangkun0212a@
 mysql_port = 3306
+mysql_username = gogs
+
+
+[sh-mysql]
+mysql_host = 49.234.19.130
+mysql_name = lianmengka_test
+mysql_password = Zhangkun0212a@
+mysql_port = 3306
 mysql_username = gogs

+ 31 - 0
database/mysql.go

@@ -13,6 +13,7 @@ import (
 var Eloquent *gorm.DB
 var LyMysql *gorm.DB
 var BzMysql *gorm.DB
+var ShMysql *gorm.DB
 
 var (
 	Host     string
@@ -116,6 +117,36 @@ func Setup() {
 
 	BzMysql.LogMode(true)
 
+	//加载商户卡数据库链接
+	Host = confIni.MustValue("sh-mysql", "mysql_host")
+	Port = confIni.MustInt("sh-mysql", "mysql_port")
+	Name = confIni.MustValue("sh-mysql", "mysql_name")
+	Username = confIni.MustValue("sh-mysql", "mysql_username")
+	Password = confIni.MustValue("sh-mysql", "mysql_password")
+	conn = GetMysqlConnect()
+
+	log.Println(conn)
+
+	//var db Database
+
+	db = new(Mysql)
+	ShMysql, err = db.Open("mysql", conn)
+
+	if err != nil {
+		log.Fatalf("mysql connect error %v", err)
+	} else {
+		log.Printf("mysql connect success!")
+	}
+
+	if ShMysql.Error != nil {
+		log.Fatalf("database error %v", Eloquent.Error)
+	}
+	//sqlSh := ShMysql.DB()
+	//sqlSh.SetMaxOpenConns(100) //设置数据库连接池最大连接数
+	//sqlSh.SetMaxIdleConns(20)
+
+	ShMysql.LogMode(true)
+
 }
 
 func GetMysqlConnect() string {

+ 2 - 1
go.mod

@@ -33,7 +33,7 @@ require (
 	github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
 	github.com/modern-go/reflect2 v1.0.2 // indirect
 	github.com/pelletier/go-toml/v2 v2.0.5 // indirect
-	github.com/pkg/errors v0.8.1 // indirect
+	github.com/pkg/errors v0.9.1 // indirect
 	github.com/smartystreets/goconvey v1.7.2 // indirect
 	github.com/ugorji/go/codec v1.2.7 // indirect
 	golang.org/x/crypto v0.0.0-20220919173607-35f4265a4bc0 // indirect
@@ -41,6 +41,7 @@ require (
 	golang.org/x/sync v0.0.0-20210220032951-036812b2e83c // indirect
 	golang.org/x/sys v0.0.0-20220919091848-fb04ddd9f9c8 // indirect
 	golang.org/x/text v0.3.7 // indirect
+	golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect
 	google.golang.org/protobuf v1.28.1 // indirect
 	gopkg.in/yaml.v2 v2.4.0 // indirect
 )

+ 4 - 2
go.sum

@@ -129,8 +129,9 @@ github.com/pelletier/go-toml/v2 v2.0.5/go.mod h1:OMHamSCAODeSsVrwwvcJOaoN0LIUIaF
 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=
+github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
+github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
 github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
 github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
@@ -245,8 +246,9 @@ golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGm
 golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
 golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
 golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
-golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
+golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk=
 google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
 google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=

+ 21 - 0
models/shanghu/client.account.go

@@ -0,0 +1,21 @@
+package shanghu
+
+import (
+	"time"
+)
+
+type MerchantClientAccount struct {
+	ID           int       `gorm:"column:id;type:int(11);primary_key;AUTO_INCREMENT" json:"id"` // 主键
+	ClientOpenID int       `gorm:"column:client_open_id;type:int(11)" json:"client_open_id"`
+	ReviewAmount string    `gorm:"column:review_amount;type:decimal(10,2)" json:"review_amount"` // 审核金额
+	Amount       string    `gorm:"column:amount;type:decimal(10,2)" json:"amount"`               // 可提现金额
+	CreateBy     int64     `gorm:"column:create_by;type:bigint(20)" json:"create_by"`            // 创建者
+	UpdateBy     int64     `gorm:"column:update_by;type:bigint(20)" json:"update_by"`            // 更新者
+	CreatedAt    time.Time `gorm:"column:created_at;type:datetime(3)" json:"created_at"`         // 创建时间
+	UpdatedAt    time.Time `gorm:"column:updated_at;type:datetime(3)" json:"updated_at"`         // 最后更新时间
+	DeletedAt    time.Time `gorm:"column:deleted_at;type:datetime(3)" json:"deleted_at"`         // 删除时间
+}
+
+func (m *MerchantClientAccount) TableName() string {
+	return "merchant_client_account"
+}

+ 24 - 0
models/shanghu/client.account.log.go

@@ -0,0 +1,24 @@
+package shanghu
+
+import (
+	"time"
+)
+
+type MerchantClientAccountLog struct {
+	ID                int64     `gorm:"column:id;type:bigint(20);primary_key;AUTO_INCREMENT" json:"id"`           // 主键
+	ReviewAmountAfter string    `gorm:"column:review_amount_after;type:decimal(10,2)" json:"review_amount_after"` // 审核资金交易后
+	ReviewAmountPre   string    `gorm:"column:review_amount_pre;type:decimal(10,2)" json:"review_amount_pre"`     // 审核资金交易前
+	AmountPre         string    `gorm:"column:amount_pre;type:decimal(10,2)" json:"amount_pre"`                   // 交易前
+	AmountAfter       string    `gorm:"column:amount_after;type:decimal(10,2)" json:"amount_after"`               // 交易后
+	TransType         int       `gorm:"column:trans_type;type:int(11)" json:"trans_type"`                         // 交易类型  1-买卡入账 2-提现
+	MerchantCardID    int64     `gorm:"column:merchant_card_id;type:bigint(20)" json:"merchant_card_id"`          // 商户卡id
+	CreateBy          int64     `gorm:"column:create_by;type:bigint(20)" json:"create_by"`                        // 创建者
+	UpdateBy          int64     `gorm:"column:update_by;type:bigint(20)" json:"update_by"`                        // 更新者
+	CreatedAt         time.Time `gorm:"column:created_at;type:datetime(3)" json:"created_at"`                     // 创建时间
+	UpdatedAt         time.Time `gorm:"column:updated_at;type:datetime(3)" json:"updated_at"`                     // 最后更新时间
+	DeletedAt         time.Time `gorm:"column:deleted_at;type:datetime(3)" json:"deleted_at"`                     // 删除时间
+}
+
+func (m *MerchantClientAccountLog) TableName() string {
+	return "merchant_client_account_log"
+}

+ 24 - 0
models/shanghu/client.card.go

@@ -0,0 +1,24 @@
+package shanghu
+
+import (
+	"time"
+)
+
+// 用户买卡信息,用于判断用户买卡的上级分销人员,如果没有分销人员默认平台
+type MerchantClientCard struct {
+	ID               int64     `gorm:"column:id;type:bigint(20);primary_key;AUTO_INCREMENT" json:"id"`       // 主键
+	MerchantCardID   int64     `gorm:"column:merchant_card_id;type:bigint(20)" json:"merchant_card_id"`      // 商户卡id
+	NumberUse        int       `gorm:"column:number_use;type:int(11)" json:"number_use"`                     // 使用次数
+	ClientInviteCode string    `gorm:"column:client_Invite_code;type:varchar(10)" json:"client_Invite_code"` // 买卡人邀请码,没邀请码默认使用官方的
+	MerchantCardTime int64     `gorm:"column:merchant_card_time;type:bigint(20)" json:"merchant_card_time"`  // 商户卡有效期
+	OpenID           string    `gorm:"column:open_id;type:varchar(255);NOT NULL" json:"open_id"`             // openid
+	CreateBy         int64     `gorm:"column:create_by;type:bigint(20)" json:"create_by"`                    // 创建者
+	UpdateBy         int64     `gorm:"column:update_by;type:bigint(20)" json:"update_by"`                    // 更新者
+	CreatedAt        time.Time `gorm:"column:created_at;type:datetime(3)" json:"created_at"`                 // 创建时间
+	UpdatedAt        time.Time `gorm:"column:updated_at;type:datetime(3)" json:"updated_at"`                 // 最后更新时间
+	DeletedAt        time.Time `gorm:"column:deleted_at;type:datetime(3)" json:"deleted_at"`                 // 删除时间
+}
+
+func (m *MerchantClientCard) TableName() string {
+	return "merchant_client_card"
+}

+ 21 - 0
models/shanghu/client.card.use.log.go

@@ -0,0 +1,21 @@
+package shanghu
+
+import (
+	"time"
+)
+
+type MerchantClientCardUseLog struct {
+	ID             int64     `gorm:"column:id;type:bigint(20);primary_key;AUTO_INCREMENT" json:"id"`
+	MerchantCardID int64     `gorm:"column:merchant_card_id;type:bigint(20)" json:"merchant_card_id"` // 商户卡id
+	MerchantOpenID int64     `gorm:"column:merchant_open_id;type:bigint(20)" json:"merchant_open_id"` // 核销人
+	ClinetOpenID   string    `gorm:"column:clinet_open_id;type:varchar(255)" json:"clinet_open_id"`   // Openid
+	CreateBy       int64     `gorm:"column:create_by;type:bigint(20)" json:"create_by"`               // 创建者
+	UpdateBy       int64     `gorm:"column:update_by;type:bigint(20)" json:"update_by"`               // 更新者
+	CreatedAt      time.Time `gorm:"column:created_at;type:datetime(3)" json:"created_at"`            // 创建时间
+	UpdatedAt      time.Time `gorm:"column:updated_at;type:datetime(3)" json:"updated_at"`            // 最后更新时间
+	DeletedAt      time.Time `gorm:"column:deleted_at;type:datetime(3)" json:"deleted_at"`            // 删除时间
+}
+
+func (m *MerchantClientCardUseLog) TableName() string {
+	return "merchant_client_card_use_log"
+}

+ 20 - 0
models/shanghu/client.trans.go

@@ -0,0 +1,20 @@
+package shanghu
+
+import (
+	"time"
+)
+
+// 客户端交易记录
+type MerchantClientTrans struct {
+	ID             int       `gorm:"column:id;type:int(11);primary_key;AUTO_INCREMENT" json:"id"`     // 主键
+	Type           int       `gorm:"column:type;type:int(11)" json:"type"`                            // 1-收款
+	MerchantCardID int64     `gorm:"column:merchant_card_id;type:bigint(20)" json:"merchant_card_id"` // 商户卡id
+	Amount         string    `gorm:"column:amount;type:decimal(10,2)" json:"amount"`                  // 交易金额
+	TransID        string    `gorm:"column:trans_id;type:varchar(255)" json:"trans_id"`               // 交易id
+	ClientOpenID   string    `gorm:"column:client_open_id;type:varchar(255)" json:"client_open_id"`   // openid
+	CreateBy       int64     `gorm:"column:create_by;type:bigint(20)" json:"create_by"`               // 创建者
+	UpdateBy       int64     `gorm:"column:update_by;type:bigint(20)" json:"update_by"`               // 更新者
+	CreatedAt      time.Time `gorm:"column:created_at;type:datetime(3)" json:"created_at"`            // 创建时间
+	UpdatedAt      time.Time `gorm:"column:updated_at;type:datetime(3)" json:"updated_at"`            // 最后更新时间
+	DeletedAt      time.Time `gorm:"column:deleted_at;type:datetime(3)" json:"deleted_at"`            // 删除时间
+}

+ 70 - 0
models/shanghu/client.user.go

@@ -0,0 +1,70 @@
+package shanghu
+
+import (
+	orm "duoduo/database"
+	"time"
+)
+
+type MerchantClientUser struct {
+	ID           int64     `gorm:"column:id;type:bigint(20);primary_key;AUTO_INCREMENT" json:"id"` // 主键
+	Code         string    `gorm:"column:code;type:varchar(255)" json:"code"`
+	ClientOpenID string    `gorm:"column:client_open_id;type:varchar(255)" json:"client_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
+	Admin        int       `gorm:"column:admin;type:int(11)" json:"admin"`                            // 1-管理员
+	CreateBy     int64     `gorm:"column:create_by;type:bigint(20)" json:"create_by"`                 // 创建者
+	UpdateBy     int64     `gorm:"column:update_by;type:bigint(20)" json:"update_by"`                 // 更新者
+	CreatedAt    time.Time `gorm:"column:created_at;type:datetime(3)" json:"created_at"`              // 创建时间
+	UpdatedAt    time.Time `gorm:"column:updated_at;type:datetime(3)" json:"updated_at"`              // 最后更新时间
+	DeletedAt    time.Time `gorm:"column:deleted_at;type:datetime(3);default:null" json:"deleted_at"` // 删除时间
+}
+
+func (m *MerchantClientUser) TableName() string {
+	return "merchant_client_user"
+}
+
+func (m *MerchantClientUser) GetNum() int {
+	var count int
+
+	tableCount := orm.ShMysql.Table(m.TableName()).Where("client_open_id = ? ", m.ClientOpenID)
+	tableCount.Count(&count)
+	return count
+
+}
+
+func (m *MerchantClientUser) GetCodeNum() int {
+	var count int
+
+	tableCount := orm.ShMysql.Table(m.TableName()).Where("code = ? ", m.Code)
+	tableCount.Count(&count)
+	return count
+
+}
+
+func (m *MerchantClientUser) GetUserInfo() (MerchantClientUser, error) {
+	var doc MerchantClientUser
+
+	table := orm.ShMysql.Table(m.TableName())
+	table = table.Where("client_open_id = ?  ", m.ClientOpenID)
+
+	if err := table.Select("*").First(&doc).Error; err != nil {
+		return doc, err
+	}
+
+	return doc, nil
+
+}
+
+func (u *MerchantClientUser) Create() (MerchantClientUser, error) {
+	var doc MerchantClientUser
+	var err error
+
+	doc = *u
+	err = orm.ShMysql.Table(u.TableName()).Create(&doc).Error
+	if err != nil {
+		return doc, err
+	}
+
+	return doc, nil
+}

+ 95 - 0
models/shanghu/merchant.go

@@ -0,0 +1,95 @@
+package shanghu
+
+import (
+	orm "duoduo/database"
+	"time"
+)
+
+type Merchant 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
+	MerchantName       string    `gorm:"column:merchant_name;type:varchar(255)" json:"merchant_name"`               // 店铺名称
+	Industry           string    `gorm:"column:industry;type:varchar(50)" json:"industry"`                          // 行业
+	IndustryCategory   string    `gorm:"column:industry_category;type:varchar(50)" json:"industry_category"`        // 行业分类
+	Contacts           string    `gorm:"column:contacts;type:varchar(50)" json:"contacts"`                          // 联系人
+	BusinessHours      string    `gorm:"column:business_hours;type:varchar(100)" json:"business_hours"`             // 营业时间
+	Consumption        string    `gorm:"column:consumption;type:varchar(50)" json:"consumption"`                    // 人均消费
+	Iphone             string    `gorm:"column:iphone;type:varchar(20)" json:"iphone"`                              // 手机号
+	Area               string    `gorm:"column:area;type:varchar(50)" json:"area"`                                  // 地区
+	Address            string    `gorm:"column:address;type:varchar(100)" json:"address"`                           // 地址
+	NumberPlate        string    `gorm:"column:number_plate;type:varchar(50)" json:"number_plate"`                  // 门牌号
+	BusinessLicenseUrl string    `gorm:"column:business_license_url;type:varchar(255)" json:"business_license_url"` // 营业执照 url
+	DoorHeaderUrl      string    `gorm:"column:door_header_url;type:varchar(255)" json:"door_header_url"`           // 门头照 url
+	CreateBy           int64     `gorm:"column:create_by;type:bigint(20)" json:"create_by"`                         // 创建者
+	UpdateBy           int64     `gorm:"column:update_by;type:bigint(20)" json:"update_by"`                         // 更新者
+	CreatedAt          time.Time `gorm:"column:created_at;type:datetime(3)" json:"created_at"`                      // 创建时间
+	UpdatedAt          time.Time `gorm:"column:updated_at;type:datetime(3)" json:"updated_at"`                      // 最后更新时间
+	DeletedAt          time.Time `gorm:"column:deleted_at;type:datetime(3);default:null" json:"deleted_at"`         // 删除时间
+}
+
+func (m *Merchant) TableName() string {
+	return "merchant"
+}
+
+func (u *Merchant) Create() (Merchant, error) {
+	var doc Merchant
+	var err error
+
+	doc = *u
+	err = orm.ShMysql.Table(u.TableName()).Create(&doc).Error
+	if err != nil {
+		return doc, err
+	}
+
+	return doc, nil
+}
+
+func (m *Merchant) GetMerchant() (Merchant, error) {
+	var doc Merchant
+
+	table := orm.ShMysql.Table(m.TableName())
+	table = table.Where("open_id = ?  ", m.OpenId)
+
+	if err := table.Select("*").First(&doc).Error; err != nil {
+		return doc, err
+	}
+
+	return doc, nil
+}
+
+// list 接口使用
+func (m *Merchant) GetOpenIdList(pageSize int, pageIndex int) ([]Merchant, int, error) {
+	var doc []Merchant
+
+	table := orm.ShMysql.Table(m.TableName())
+
+	table = table.Where("open_id = ?  ", m.OpenId)
+	var count int
+	if err := table.Select("*").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
+}
+
+func (m *Merchant) UpdateMerchant() error {
+
+	if err := orm.ShMysql.Table(m.TableName()).Model(&m).Where("id = ? ", m.ID).Updates(
+		map[string]interface{}{
+			"merchant_name":        m.MerchantName,
+			"industry":             m.Industry,
+			"industry_category":    m.IndustryCategory,
+			"contacts":             m.Contacts,
+			"business_hours":       m.BusinessHours,
+			"consumption":          m.Consumption,
+			"iphone":               m.Iphone,
+			"area":                 m.Area,
+			"address":              m.Address,
+			"number_plate":         m.NumberPlate,
+			"business_license_url": m.BusinessLicenseUrl,
+			"door_header_url":      m.DoorHeaderUrl}).Error; err != nil {
+		return err
+	}
+
+	return nil
+}

+ 100 - 0
models/shanghu/merchant_card.go

@@ -0,0 +1,100 @@
+package shanghu
+
+import (
+	orm "duoduo/database"
+	"duoduo/tools"
+	"time"
+)
+
+type MerchantCard struct {
+	ID                int64     `gorm:"column:id;type:bigint(20);primary_key;AUTO_INCREMENT" json:"id"`
+	MerchantCardName  string    `gorm:"column:merchant_card_name;type:varchar(255)" json:"merchant_card_name"`      // 商户卡名称
+	MerchantOpenID    string    `gorm:"column:merchant_open_id;type:varchar(255);NOT NULL" json:"merchant_open_id"` // openid
+	CardProjectData   string    `gorm:"column:card_project_data;type:json" json:"card_project_data"`                // 项目
+	CardPrice         string    `gorm:"column:card_price;type:decimal(10,2)" json:"card_price"`                     // 单价
+	ActivityEndTime   int64     `gorm:"column:activity_end_time;type:bigint(20)" json:"activity_end_time"`          // 活动结束时间
+	ActivityStartTime int64     `gorm:"column:activity_start_time;type:bigint(20)" json:"activity_start_time"`      // 活动开始时间
+	MerchantCardTime  int64     `gorm:"column:merchant_card_time;type:bigint(20)" json:"merchant_card_time"`        // 商户卡有效期
+	Inventory         int64     `gorm:"column:inventory;type:bigint(20)" json:"inventory"`                          // 库存数量
+	QuotaNum          int64     `gorm:"column:quota_num;type:int(11)" json:"quota_num"`                             // 限购数量
+	UseRule           string    `gorm:"column:use_rule;type:varchar(255)" json:"use_rule"`                          // 使用规则
+	Picture           string    `gorm:"column:picture;type:varchar(255)" json:"picture"`                            // 图片
+	RebateRate        int64     `gorm:"column:rebate_rate;type:int(11)" json:"rebate_rate"`                         // 佣金比例
+	CreateBy          int64     `gorm:"column:create_by;type:bigint(20)" json:"create_by"`                          // 创建者
+	UpdateBy          int64     `gorm:"column:update_by;type:bigint(20)" json:"update_by"`                          // 更新者
+	CreatedAt         time.Time `gorm:"column:created_at;type:datetime(3)" json:"created_at"`                       // 创建时间
+	UpdatedAt         time.Time `gorm:"column:updated_at;type:datetime(3)" json:"updated_at"`                       // 最后更新时间
+	DeletedAt         time.Time `gorm:"column:deleted_at;type:datetime(3);default:null" json:"deleted_at"`          // 删除时间
+}
+
+func (m *MerchantCard) TableName() string {
+	return "merchant_card"
+}
+
+func (u *MerchantCard) Create() (MerchantCard, error) {
+	var doc MerchantCard
+	var err error
+
+	doc = *u
+	err = orm.ShMysql.Table(u.TableName()).Create(&doc).Error
+	if err != nil {
+		return doc, err
+	}
+
+	return doc, nil
+}
+
+func (m *MerchantCard) GetMerchantCard() (MerchantCard, error) {
+	var doc MerchantCard
+
+	table := orm.ShMysql.Table(m.TableName())
+	table = table.Where("id = ?  ", m.ID)
+
+	if err := table.Select("*").First(&doc).Error; err != nil {
+		return doc, err
+	}
+
+	return doc, nil
+
+}
+
+// list 接口使用
+func (m *MerchantCard) GetOpenIdList(pageSize int, pageIndex int, listType int) ([]MerchantCard, int, error) {
+	var doc []MerchantCard
+	timeNow := time.Now().Unix()
+
+	table := orm.ShMysql.Table(m.TableName())
+	if listType == 1 { //待开始
+		table = table.Where("activity_start_time > ?", timeNow)
+	} else if listType == 2 { //进行中
+		table = table.Where("activity_start_time < ? and activity_end_time > ?", timeNow, timeNow)
+	} else if listType == 3 { //已结束
+		table = table.Where("activity_end_time < ?", timeNow)
+	}
+	//if m.ActivityStartTime != 0
+
+	table = table.Where("merchant_open_id = ?  ", m.MerchantOpenID)
+	var count int
+	if err := table.Select("*").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
+}
+
+func (m *MerchantCard) UpdateMerchantCard() error {
+
+	if err := orm.ShMysql.Table(m.TableName()).Model(&m).Where("id = ? ", m.ID).Updates(
+		map[string]interface{}{
+			"project_name":        m.ActivityEndTime,
+			"activity_start_time": m.ActivityStartTime,
+			"inventory":           m.Inventory,
+			"quota_num":           m.QuotaNum,
+			"use_rule":            m.UseRule,
+			"picture":             m.Picture,
+			"update_time":         tools.GetCurrntTimeStr()}).Error; err != nil {
+		return err
+	}
+
+	return nil
+}

+ 80 - 0
models/shanghu/merchant_card_project.go

@@ -0,0 +1,80 @@
+package shanghu
+
+import (
+	orm "duoduo/database"
+	"time"
+)
+
+type MerchantCardProject struct {
+	ID               int64     `gorm:"column:id;type:bigint(20);primary_key;AUTO_INCREMENT" json:"id"`
+	MerchantOpenID   string    `gorm:"column:merchant_open_id;type:varchar(255);NOT NULL" json:"merchant_open_id"` // open_id
+	ProjectUnitPrice string    `gorm:"column:project_unit_price;type:decimal(10,2)" json:"project_unit_price"`     // 单价
+	ProjectUnit      string    `gorm:"column:project_unit;type:varchar(255)" json:"project_unit"`                  // 产品单位
+	ProjectUrl       string    `gorm:"column:project_url;type:varchar(255)" json:"project_url"`                    // 图片
+	ProjectName      string    `gorm:"column:project_name;type:varchar(100)" json:"project_name"`                  // 产品名
+	CreateBy         int64     `gorm:"column:create_by;type:bigint(20)" json:"create_by"`                          // 创建者
+	UpdateBy         int64     `gorm:"column:update_by;type:bigint(20)" json:"update_by"`                          // 更新者
+	CreatedAt        time.Time `gorm:"column:created_at;type:datetime(3)" json:"created_at"`                       // 创建时间
+	UpdatedAt        time.Time `gorm:"column:updated_at;type:datetime(3)" json:"updated_at"`                       // 最后更新时间
+	DeletedAt        time.Time `gorm:"column:deleted_at;type:datetime(3);default:null" json:"deleted_at"`          // 删除时间
+}
+
+func (m *MerchantCardProject) TableName() string {
+	return "merchant_card_project"
+}
+
+func (u *MerchantCardProject) Create() (MerchantCardProject, error) {
+	var doc MerchantCardProject
+	var err error
+
+	doc = *u
+	err = orm.ShMysql.Table(u.TableName()).Create(&doc).Error
+	if err != nil {
+		return doc, err
+	}
+
+	return doc, nil
+}
+
+func (m *MerchantCardProject) GetMerchantCardProject() (MerchantCardProject, error) {
+	var doc MerchantCardProject
+
+	table := orm.ShMysql.Table(m.TableName())
+	table = table.Where("id = ?  ", m.ID)
+
+	if err := table.Select("*").First(&doc).Error; err != nil {
+		return doc, err
+	}
+
+	return doc, nil
+}
+
+// list 接口使用
+func (m *MerchantCardProject) GetOpenIdList(pageSize int, pageIndex int) ([]MerchantCardProject, int, error) {
+	var doc []MerchantCardProject
+
+	table := orm.ShMysql.Table(m.TableName())
+
+	table = table.Where("merchant_open_id = ?  ", m.MerchantOpenID)
+	var count int
+	if err := table.Select("*").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
+}
+
+func (m *MerchantCardProject) UpdateMerchantCardProject() error {
+
+	if err := orm.ShMysql.Table(m.TableName()).Model(&m).Where("id = ? ", m.ID).Updates(
+		map[string]interface{}{
+			"project_name":       m.ProjectName,
+			"project_url":        m.ProjectUrl,
+			"project_unit":       m.ProjectUnit,
+			"project_unit_price": m.ProjectUnitPrice,
+			"update_time":        time.Now()}).Error; err != nil {
+		return err
+	}
+
+	return nil
+}

+ 71 - 0
models/shanghu/merchant_user.go

@@ -0,0 +1,71 @@
+package shanghu
+
+import (
+	orm "duoduo/database"
+	"time"
+)
+
+// 商户账号
+type MerchantUser struct {
+	ID        int64     `gorm:"column:id;type:bigint(20);primary_key;AUTO_INCREMENT" json:"id"` // 主键
+	Code      string    `gorm:"column:code;type:varchar(255)" json:"code"`
+	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
+	Admin     int       `gorm:"column:admin;type:int(11)" json:"admin"`                            // 1-管理员
+	CreateBy  int64     `gorm:"column:create_by;type:bigint(20)" json:"create_by"`                 // 创建者
+	UpdateBy  int64     `gorm:"column:update_by;type:bigint(20)" json:"update_by"`                 // 更新者
+	CreatedAt time.Time `gorm:"column:created_at;type:datetime(3)" json:"created_at"`              // 创建时间
+	UpdatedAt time.Time `gorm:"column:updated_at;type:datetime(3)" json:"updated_at"`              // 最后更新时间
+	DeletedAt time.Time `gorm:"column:deleted_at;type:datetime(3);default:null" json:"deleted_at"` // 删除时间
+}
+
+func (m *MerchantUser) TableName() string {
+	return "merchant_user"
+}
+
+func (m *MerchantUser) GetNum() int {
+	var count int
+
+	tableCount := orm.ShMysql.Table(m.TableName()).Where("open_id = ? ", m.OpenID)
+	tableCount.Count(&count)
+	return count
+
+}
+
+func (m *MerchantUser) GetCodeNum() int {
+	var count int
+
+	tableCount := orm.ShMysql.Table(m.TableName()).Where("code = ? ", m.Code)
+	tableCount.Count(&count)
+	return count
+
+}
+
+func (m *MerchantUser) GetUserInfo() (MerchantUser, error) {
+	var doc MerchantUser
+
+	table := orm.ShMysql.Table(m.TableName())
+	table = table.Where("open_id = ?  ", m.OpenID)
+
+	if err := table.Select("*").First(&doc).Error; err != nil {
+		return doc, err
+	}
+
+	return doc, nil
+
+}
+
+func (u *MerchantUser) Create() (MerchantUser, error) {
+	var doc MerchantUser
+	var err error
+
+	doc = *u
+	err = orm.ShMysql.Table(u.TableName()).Create(&doc).Error
+	if err != nil {
+		return doc, err
+	}
+
+	return doc, nil
+}

+ 3 - 5
report/report.go

@@ -1,7 +1,5 @@
 package report
 
-import "github.com/robfig/cron"
-
 const (
 	cronSettDateCutoff = "0 0 1 * * *"    //每天凌晨1:00:00
 	cronRunStart       = "0 0 17 * * *"   //凌晨一点
@@ -9,7 +7,7 @@ const (
 )
 
 func SysCronStart() {
-	c := cron.New()
-	c.AddFunc(cronMinuteStart, OrderList) //每分钟同步一下订单
-	c.Start()
+	//c := cron.New()
+	//c.AddFunc(cronMinuteStart, OrderList) //每分钟同步一下订单
+	//c.Start()
 }

+ 5 - 0
routers/router.go

@@ -6,6 +6,7 @@ import (
 	"duoduo/apis/pdd"
 	"duoduo/apis/petsLy"
 	"duoduo/apis/qiniu"
+	"duoduo/apis/shanghu"
 	"duoduo/apis/user"
 	"duoduo/apis/userLy"
 	"duoduo/conf"
@@ -41,6 +42,10 @@ func InitRouter() {
 	{
 		bizhi.InitBiZhiRouter(bz)
 	}
+	sh := r.Group("/")
+	{
+		shanghu.InitShangHuRouter(sh)
+	}
 
 	if conf.Model == "master" {
 		r.RunTLS(":443", "./shisanmiao.com.pem", "./shisanmiao.com.key")

+ 27 - 27
shisanmiao.com.key

@@ -1,27 +1,27 @@
------BEGIN RSA PRIVATE KEY-----
-MIIEowIBAAKCAQEAqxx9kIMjJeu0if8NhCdhsdyRLVCy16+TKyZHD7SBX6hL67Va
-cYDjoGCVR3tNYcmpCANIoxVhZcqXaa2icd9+CIrMPSjNzMlWsWJRRWatgHLNOAqP
-VIsevnT2yCuAKW1gVLo4wjkTGCg2ZctVAyMzJiyUTKoTLlb1IZNyMMFcqY9By/Da
-3QMryt+15oUBYjmtZtp5H5k6mretIxX4V4BMsCi+zSsJQbQ7+UW15UA/y12Rm6CY
-/CQGZC/+nYkSTVFgm4Q4WEK4TVijX6WWtcrsH5lpAEDaDWYUCHlO2mwxY18wt9Wb
-1oDIYyiGNiii4bTOs3L8h0M32wWFlIGbNDmyGQIDAQABAoIBAEZIeo7sPnip+0sf
-V0bsAiXTalJJrlwHgxSbMV8TDnzjHOQhZpfukBDk+wwUanF7KpHe/2v1MT9lWpIO
-vwW0/gi2MjQA2Z9/J7vOnYE7LpLvFLorJDpetm8WjfMkYw0hHwtOPlgQp3YptkZT
-oYSbZbwNXZCr3xsOnrt+282I7u25+7ZPEJ+t0ic9INNaoZFAP86hiRikNgj9vfNP
-UUYzGAsk2R/4gc5e2Q7QpYFYCOaOInKNFQj4Y0FaSGW0LBmB2Kg09LFKVsoKdRFc
-EWAvlh/Uh8Ym8jpLKEqLT/7fddYBX6DsHVciqFO20I36WWBQZKqFSciGd7CS06kr
-t7Hc420CgYEA7iZHjmTSoygswu5WdJpvqW1KQDlHjE4slscXQ+Klvr7TU4MhtKiN
-uF89lHOLMUk7gw/+V6fnQfHVjJ2n9tnJZKIvzX2bp0KD4RbRJwFrhYn8l5zfBuxJ
-s9sCE75ckbShuRY1QiNw+4fTb374lMESw9Xvnkr/GSmUaMYDkmh0/E8CgYEAt+/Z
-3fJSiwp/hLJAGL2KAMpGvbIgDRo1fQAbTjMskQWNkEtcoXp0llISgzUJqjg6+4dF
-75l5ynzuzcpQQxoBI+fuHBIiOt+Mdnjwj1n6+NgtKiXuXC0Dgs5vm7XmcEydIwIq
-OVqBJ7itMkl9myBIhl9kTjZ7S4EAoDm5PrZTyRcCgYB/VSZTY2Mga52rSEYfqGdl
-vpLBzh6MTUwX/jFZUbjvSRazA10lPC4yU3IYisL0wkQ4qneCpLrIjqZwvecN3JqK
-3REUHUH5Z14eHtYLtf2odAQDiJPTHsm1ibcNmW3jViJWVSJ6z3pcct5BMjF1T9pZ
-rWymRVEqQgohDybfxEwwjwKBgQCn4KLhfnS18Iv4adQ0gHG/TN8J7dRxAPXGs904
-H17SsdXF1/KgcyqLtDavSC4dDRtQTOOYzmQpWqN+ceOVitt1kQ5y0l4pi7UgwDsX
-K1Hz4yI9sMb/nBnzPkUBQiEjZ9mXhTdSh3cP8O8q0YZxmiJ3egMLm5AmloQiuOyI
-/1IzWwKBgHo4CzmXUKeIJnCRMM2Mny5mkYqPqMRL1T//jWbV6DoaTQkQL3cimKvE
-SpQAJqCJ+24CyGKwH4JqV+i6dSHhz+2zajRQ6vNJarsiHdxCoyJXA/VHnS5JcB7f
-BrFdzluU7KwhgQjRgaQTCGSR6ULlEgoOjbHihg44jvUJ+X3JcM2+
------END RSA PRIVATE KEY-----
+-----BEGIN RSA PRIVATE KEY-----
+MIIEowIBAAKCAQEAuArZd6FKGXLv/SAyvr3to/dU5nk+J3WN/1ZfwF+b1Dpwpk7M
+63KJD/A43v4cmZgQrM8MEdj9vsHj+3prTrTilDkPsUwWd72c6hkSlroNb6PoStzj
+JWqk1jpSi6PriyASUXJt/YZO6ZVpkQpc+yPPFhDctRRTB0YbuMVQ7Jru/F01GlHU
+FWKbbmoePIVJxhaV3xYzPKV9fms/y8c1SaibmCyvO5WtdDgZhyS6YcMbuhu5oziz
+5tXSDrVnTeTOe8Ya1zD0peuBEzwo/vjdHWsyASXTI2GsRWnnxPE2Xae4u0iX+4GZ
+gDCfvMOFR1Umi+riea1fVygEkrESStPiAMWh/wIDAQABAoIBAAlB3nNyhPgnvGOW
+mYbXpdrwB3C6W4J/mr9juFhEVuHDeMQcxZj4P2WyVyH8VTLyn7AZkAlbyVOtjAqr
+uzcPyS/ceOoZoi2ut3RdA37aZ++cJoSRfMl2hkkSUPGeMqxiVhmLsHWmqlR8g/1c
+MJYfVHzPJ1LibVS51Y4jOrFUD75Y2gKW/MsJW5v9AYzLnB8eN0S5nA0ECH9irClU
+bO7Zc/Bz4cjiZKcHpQ+v4xuaafawgw8AOEo9BtH1iA06WWvjP/GASaQJ1ivUi6jX
+hW8I0v2CQcNLknmOt2BhoDzkowAWVHaf4J/Q+Qapb38TA0AadOX/icfYGzirv28X
+ieH/Vs0CgYEA5YioJ2G1Le/XnJbHa6/72o5yew8Hrw4zR3qqr/wFvuGtJsfK3IYP
+jDJyfXNhWA/Cp/rJ6GtFTkDRtuUuvdvVAcDR2X8JUQBap2b4OKQvW36pNf7rfpkd
+a0VOfvHbZtv3TlLnejZOhNrIovsOCeb9Mx+lwUnXYJnbq6U0hIhUdF0CgYEAzUNi
+Mwxt0HtNO3+tQVDTmw15h5fiklZYY3wgk83R3JqOHUNvrnTBdC7DpjyBGBxQKGko
+m6/1iyTgxq1Ajn18s5uJiQNHcA0UGe3M+nnB37mkx+OhQfh3b7da6YxE2n6RlbB/
+J9DiY5lfZm637IaqH0yjfpIegdHaA3N/D7FtCgsCgYBbvLeALePsvSwOcJC5cHeX
+TVFh74rhoypJijRH69EcDjRXCIkChC4YmVz62K9yM7JX0rr5wk3LzcpDb+uzg/Xp
+Inh8lfJSRnL07wmMEcq/parZYs4aJfYFFokd4WoP/SAlVKshRC0zmgGQagidWo2d
+7isgSnPjLvsF6hxIT/h5HQKBgHCFXdGKILDGxuG07e7+NeGrk1FnS4bY2n8+zkT3
+8PEzsHAORaymyF2+PPZl+IaVDsP4UZB29u2d+7Ity1PRKojy3IRFTeX45WoJV/J+
+yG6yP8hr2jxlzmNpaebZQ+1asMgUBsB224Op0gg+7Yg1khCyXHXH9/1GYnK934tk
+wdddAoGBAIowfdsMAO6ztRZpZ5UKbr14kFiH0QH04oWTKsvHLtKkypoMM8P/fojA
+ikghDK4hdlIIsABgKBMwyV+IMwR/f8RFuIJo92Y9RXuq2oXKHTrIMvh1LgDkxein
+nksbLUlz+A2OqbX/vufKUh71tD13P8PF+sGZvJYFtskLY0c2eU2u
+-----END RSA PRIVATE KEY-----

+ 0 - 27
shisanmiao.com.key.bak

@@ -1,27 +0,0 @@
------BEGIN RSA PRIVATE KEY-----
-MIIEpAIBAAKCAQEAuqUgV0VmDKb9HxS7I4GjiAae+PGae0XASIEges63/KsE0jnl
-QooUc4sXr3kPuUrsQ1hD/gQoDqshy3qSqzz0IA0s2j1rAGuM3SOm1tmGvjhlmMMZ
-+Uj9MrRA59zAOgDqhmjAYwamKv/eQHkgwDwgWk1K5HKsDtp5G5izrdURdlhvdUe+
-QKxuBqSayEPfe5mzfn5+MdxkNraGJu+finqwLmm0jT+Znn/8ObWnvPbv5f03YW83
-6VMzbv4EfiC5/xr8u6a4svdiFp93CKLB2BQef7OB1BgPu/JhDyJbhgBpamS7OzrA
-BI8jkd+2WzVHido25GVVra05jx3j3874juWecQIDAQABAoIBAAClOciHeUf9q1Yo
-TZHcvManhDT26+p1diniBW1bSeRWKI78C4SIgvPX1SoCjIj+3vSIKXsHQ2aylYw1
-NSzhqfPy67bo+7XdiVgJ66WmTKqbehF2SkCUDakXWbqbhzAkKOt0UQb+osQ3DIsT
-SCdWBeQeDI5f7aOjAoRziZqGKDhtKhk0WNJYF8pqcmoAUWKVmRIQaHatep/Hq0Sz
-vIXwHdAy2bdUKFfbFxAEHEpm5nXMvRE43VIc4MUgMv6mfvpe8LBgDCaREN0NOKYI
-Cylzr/UGXPMnMTCyjC/azAjAVIVFyl51B8LXiA7p47Os8KFh1Qs08uK/8Cam/F+M
-JZEEwkECgYEA4ylSE/M5urZ3Qzuh1T+BipvmoFMDnF1vK7/JogqsTrH4+/jRE3TQ
-EE+BKiseC15PL9OCqdro4udI3Dnlr0L6QMaY6zuIh2elDVnQ5w93DMEB3MeqmuD5
-sVo7dtUAiD+zkw0Xw84t6zTblLsBB+gTu26tQXjlCl2p51tQ+lgOVCECgYEA0lcI
-+v7lEDbqdof+X6GjWftT6sOo2sJ/EtFTxIn0yVZpwdaEEzV7fIcG0W4McjZnuD44
-wXrGgss8t3l5cxe4LUTZPwFs9NB9FNEygEco9mTzeUHskw5iA0SF3yFEeq3M0Fre
-0f769g9p8vSfyBfc4Dv5xlIRlJ2ZzMDne9a9AFECgYEApLYxbYXPNjNYBsgWcCm8
-JGUmtNl8pMSa9335FiXnCqjBgPLJpvHsa+c6IPlir5uSj3suIzs34k8R5Z2VjZ9j
-FdTqzKY+OPBOHYAimWf9SqIoV43vhp3ab16d/2wzFpgZ/WZg9PlrEkEhdpaiCLme
-lSmLNw4SBZIkwDzWWq++tAECgYEAj379C271iphMYEzqxwcYz/xcBZ8yBPwHgSj5
-gu2y5+BiCfF07T3hXtUnW50+NHTVUaZxRd2iq/xHEcx3hIM8DPYZV5h7YpERpDAL
-yePCGEZKrADDipeXWi9XPSAO/bqwLbywoobXYyKk3zDwCKvu7bM89YVrpP3XvQ4l
-XiDjk+ECgYBeCMSS4qVjb/sToblWxUQulmQm1QuAjR5vE44qNwD3YsF8jUkrm4LZ
-4UNxIYQgNDixeSL6npA8q1LNgZsDcbpwKFYV/zhHRI4njqXQfIchffyujR9t+ZBK
-Jb3DUouD2Dz10dy2lIDHc7kcpwGOT2G3+kF/IWu3KVfXrCx/8Cqv9g==
------END RSA PRIVATE KEY-----

+ 35 - 35
shisanmiao.com.pem

@@ -1,39 +1,39 @@
 -----BEGIN CERTIFICATE-----
-MIIGejCCBOKgAwIBAgIQZGRTFp1aFFmZnO5GYE+kRzANBgkqhkiG9w0BAQwFADBZ
-MQswCQYDVQQGEwJDTjElMCMGA1UEChMcVHJ1c3RBc2lhIFRlY2hub2xvZ2llcywg
-SW5jLjEjMCEGA1UEAxMaVHJ1c3RBc2lhIFJTQSBEViBUTFMgQ0EgRzIwHhcNMjIw
-NjIwMDAwMDAwWhcNMjMwNjIwMjM1OTU5WjAZMRcwFQYDVQQDEw5zaGlzYW5taWFv
-LmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKscfZCDIyXrtIn/
-DYQnYbHckS1QstevkysmRw+0gV+oS+u1WnGA46BglUd7TWHJqQgDSKMVYWXKl2mt
-onHffgiKzD0ozczJVrFiUUVmrYByzTgKj1SLHr509sgrgCltYFS6OMI5ExgoNmXL
-VQMjMyYslEyqEy5W9SGTcjDBXKmPQcvw2t0DK8rfteaFAWI5rWbaeR+ZOpq3rSMV
-+FeATLAovs0rCUG0O/lFteVAP8tdkZugmPwkBmQv/p2JEk1RYJuEOFhCuE1Yo1+l
-lrXK7B+ZaQBA2g1mFAh5TtpsMWNfMLfVm9aAyGMohjYoouG0zrNy/IdDN9sFhZSB
-mzQ5shkCAwEAAaOCAvwwggL4MB8GA1UdIwQYMBaAFF86fBEQfgxncWHci6O1AANn
-9VccMB0GA1UdDgQWBBRBAZoae/NT/ixDYeMqy1f6zYXWqzAOBgNVHQ8BAf8EBAMC
-BaAwDAYDVR0TAQH/BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIw
-SQYDVR0gBEIwQDA0BgsrBgEEAbIxAQICMTAlMCMGCCsGAQUFBwIBFhdodHRwczov
-L3NlY3RpZ28uY29tL0NQUzAIBgZngQwBAgEwfQYIKwYBBQUHAQEEcTBvMEIGCCsG
-AQUFBzAChjZodHRwOi8vY3J0LnRydXN0LXByb3ZpZGVyLmNuL1RydXN0QXNpYVJT
-QURWVExTQ0FHMi5jcnQwKQYIKwYBBQUHMAGGHWh0dHA6Ly9vY3NwLnRydXN0LXBy
-b3ZpZGVyLmNuMC0GA1UdEQQmMCSCDnNoaXNhbm1pYW8uY29tghJ3d3cuc2hpc2Fu
-bWlhby5jb20wggF+BgorBgEEAdZ5AgQCBIIBbgSCAWoBaAB1AK33vvp8/xDIi509
-nB4+GGq0Zyldz7EMJMqFhjTr3IKKAAABgX/6Oa4AAAQDAEYwRAIgKUA8RQkLqH02
-5yVY5b1tEtnWLug23FN5pz1E0zJE5n0CIBjRtXy2i/YgoAFt0EwXWnmS+7vQqJUv
-pypNvP7jTmdIAHYAejKMVNi3LbYg6jjgUh7phBZwMhOFTTvSK8E6V6NS61IAAAGB
-f/o5bwAABAMARzBFAiADno8MdLb/y4KqdL0q5kVx5aE1M6r8pcxdZ/lhAij3cwIh
-AJ5hkC9yhr8MHMyc4+UPPA6dXkT1SYnpLZKG5cnqetOGAHcA6D7Q2j71BjUy51co
-vIlryQPTy9ERa+zraeF3fW0GvW4AAAGBf/o5RQAABAMASDBGAiEA5YsWhrIMnVX8
-jZAaQfg/17v6JoqhBLjGxmlImI+jBosCIQDH1qA3jL8vuXPdEeu4sPU0SCx2AbqA
-ViFPT+COlBVEfDANBgkqhkiG9w0BAQwFAAOCAYEAK+IUO72XyA1kSRE+5MklJtL2
-wI3EuqLwQ+1oM/GG+17YGJ7k0paraR5LrilVUyg9B+MyXkGEKG3KBUJ6NSGGT2L9
-4DVeuWtDoBYAtEbDQI2CHCCse1ueuEe2lY/TKmZ2qQe/pzqVjlbRBOyFF5nzQtgQ
-s1SvceQpKYsAPnYaDp71mxMSMCfATKPluSszsSKveYX8NGNP6SbXhwH2a8dWIFGW
-ALCvdINY9fpsOHmTn4zMl7ZXORFrNjhnGGNMn8qSh8pmr+JkO6gLBkRWORZ+YSol
-6obwm+dSdBixDQuVtAHgWTTi/LDMTeU4+xn6loLsTG05AzB6yx/N7My6cq4av42L
-ECLxVZ3qOMXT/mBw1fSqZ08uU1BDpf2vfXWLl5O0JldbyTkG0bLGSnq/Ag7TXTZw
-MaW+xtg7J+aY/hGI6JjvUtF8z97xBcFW51ZxOzKSlvWrpnxjdjZwXktvCksujffm
-MzhYQq2Blom7aRXf0zq7z0HPC33FODGdwFdbF9L9
+MIIGfTCCBOWgAwIBAgIRAKwFvwzKyaS8J+5ON77AppwwDQYJKoZIhvcNAQEMBQAw
+WTELMAkGA1UEBhMCQ04xJTAjBgNVBAoTHFRydXN0QXNpYSBUZWNobm9sb2dpZXMs
+IEluYy4xIzAhBgNVBAMTGlRydXN0QXNpYSBSU0EgRFYgVExTIENBIEcyMB4XDTIz
+MTEwMjAwMDAwMFoXDTI0MTEwMTIzNTk1OVowHTEbMBkGA1UEAxMSd3d3LnNoaXNh
+bm1pYW8uY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuArZd6FK
+GXLv/SAyvr3to/dU5nk+J3WN/1ZfwF+b1Dpwpk7M63KJD/A43v4cmZgQrM8MEdj9
+vsHj+3prTrTilDkPsUwWd72c6hkSlroNb6PoStzjJWqk1jpSi6PriyASUXJt/YZO
+6ZVpkQpc+yPPFhDctRRTB0YbuMVQ7Jru/F01GlHUFWKbbmoePIVJxhaV3xYzPKV9
+fms/y8c1SaibmCyvO5WtdDgZhyS6YcMbuhu5oziz5tXSDrVnTeTOe8Ya1zD0peuB
+Ezwo/vjdHWsyASXTI2GsRWnnxPE2Xae4u0iX+4GZgDCfvMOFR1Umi+riea1fVygE
+krESStPiAMWh/wIDAQABo4IC+jCCAvYwHwYDVR0jBBgwFoAUXzp8ERB+DGdxYdyL
+o7UAA2f1VxwwHQYDVR0OBBYEFPloSnpkW1TP42yrxQc3ePUExi8hMA4GA1UdDwEB
+/wQEAwIFoDAMBgNVHRMBAf8EAjAAMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEF
+BQcDAjBJBgNVHSAEQjBAMDQGCysGAQQBsjEBAgIxMCUwIwYIKwYBBQUHAgEWF2h0
+dHBzOi8vc2VjdGlnby5jb20vQ1BTMAgGBmeBDAECATB9BggrBgEFBQcBAQRxMG8w
+QgYIKwYBBQUHMAKGNmh0dHA6Ly9jcnQudHJ1c3QtcHJvdmlkZXIuY24vVHJ1c3RB
+c2lhUlNBRFZUTFNDQUcyLmNydDApBggrBgEFBQcwAYYdaHR0cDovL29jc3AudHJ1
+c3QtcHJvdmlkZXIuY24wLQYDVR0RBCYwJIISd3d3LnNoaXNhbm1pYW8uY29tgg5z
+aGlzYW5taWFvLmNvbTCCAXwGCisGAQQB1nkCBAIEggFsBIIBaAFmAHYAdv+IPwq2
++5VRwmHM9Ye6NLSkzbsp3GhCCp/mZ0xaOnQAAAGLjazZSwAABAMARzBFAiAqkhSx
+qQfly3FHlcC0BKbXFdG349jmWVueaSzySDEgQQIhAOGWZWR4oFaOL97anN14Yvoe
+ZRj93SZp3ex/33UarBAUAHUA2ra/az+1tiKfm8K7XGvocJFxbLtRhIU0vaQ9MEjX
++6sAAAGLjazZnAAABAMARjBEAiArbYJxI4JFKMHkoaSg63VQ82IEUIPngXDWmO2D
+/528NgIgDQBOB3VfMv2MP1HPIxR7XrFjgbsGwU4UsTlMvjrn+9EAdQDuzdBk1dsa
+zsVct520zROiModGfLzs3sNRSFlGcR+1mwAAAYuNrNl/AAAEAwBGMEQCIH23pgjI
+p7Eiy03B67jDcNyuj2p1eNNM1r0BZr1vmcMJAiA1BbSxQVtlqeb6pFWS3RAFIqOx
+keKWV9t+rFJzHYhZYzANBgkqhkiG9w0BAQwFAAOCAYEAIgyJGebFniGdvI3nt6uu
+t6vUqWVYSszY5XcovGoh2PB2ndREEOAeHJo3xdHSIQg/Z2k/13QHM+jaq1Hl0Trs
+KGSD3ZJS8fXJJg5DPC6AiIi6Bz7Y5s8/JwuiHEc4oCKMwTbkWZP/3cHnEwyducN6
+rBPANvh0QYu1ETWnSJw4cXetzCJXxMluBQK4HIX69CCHUPUM7VwX53cArFnNytAp
+k4ia4ddOUbCkWY0Uten2WX3HHLvEUSFDwnp6O8Jy5JD/fSDw8P0KyFsw9ngK2HLo
+F77HZBRUyyitRd2YVCF7xi0kUBusocbk3t6PgtfDNGC+EBDNi7RQGXwzljR4iyFE
+OaZowPS0OZkDD9yEuD28JfzvjlpTUI2Yg/dCf+BWH5qzfSbZ0EaQNXj4ZW2y6gz/
+vL9V4ioX2LMHz9ETalimZ9w5k7gt+yWCAr1EskYTg98nT6lpg2k4QIau0N2m/AXY
+Y/zAAmzBpctJl4AgQtM7I09T2OH7hFWvlfvxHnDjpYDV
 -----END CERTIFICATE-----
 -----BEGIN CERTIFICATE-----
 MIIFBzCCA++gAwIBAgIRALIM7VUuMaC/NDp1KHQ76aswDQYJKoZIhvcNAQELBQAw

+ 0 - 63
shisanmiao.com.pem.bak

@@ -1,63 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIGGzCCBQOgAwIBAgIQBZEc+bPcm9TUAGu4bAnwKDANBgkqhkiG9w0BAQsFADBy
-MQswCQYDVQQGEwJDTjElMCMGA1UEChMcVHJ1c3RBc2lhIFRlY2hub2xvZ2llcywg
-SW5jLjEdMBsGA1UECxMURG9tYWluIFZhbGlkYXRlZCBTU0wxHTAbBgNVBAMTFFRy
-dXN0QXNpYSBUTFMgUlNBIENBMB4XDTIxMDYyMTAwMDAwMFoXDTIyMDYyMDIzNTk1
-OVowGTEXMBUGA1UEAxMOc2hpc2FubWlhby5jb20wggEiMA0GCSqGSIb3DQEBAQUA
-A4IBDwAwggEKAoIBAQC6pSBXRWYMpv0fFLsjgaOIBp748Zp7RcBIgSB6zrf8qwTS
-OeVCihRzixeveQ+5SuxDWEP+BCgOqyHLepKrPPQgDSzaPWsAa4zdI6bW2Ya+OGWY
-wxn5SP0ytEDn3MA6AOqGaMBjBqYq/95AeSDAPCBaTUrkcqwO2nkbmLOt1RF2WG91
-R75ArG4GpJrIQ997mbN+fn4x3GQ2toYm75+KerAuabSNP5mef/w5tae89u/l/Tdh
-bzfpUzNu/gR+ILn/Gvy7priy92IWn3cIosHYFB5/s4HUGA+78mEPIluGAGlqZLs7
-OsAEjyOR37ZbNUeJ2jbkZVWtrTmPHePfzviO5Z5xAgMBAAGjggMEMIIDADAfBgNV
-HSMEGDAWgBR/05nzoEcOMQBWViKOt8ye3coBijAdBgNVHQ4EFgQUMRfYrvOaMLe0
-y8etLbKEihwX8iwwLQYDVR0RBCYwJIIOc2hpc2FubWlhby5jb22CEnd3dy5zaGlz
-YW5taWFvLmNvbTAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEG
-CCsGAQUFBwMCMD4GA1UdIAQ3MDUwMwYGZ4EMAQIBMCkwJwYIKwYBBQUHAgEWG2h0
-dHA6Ly93d3cuZGlnaWNlcnQuY29tL0NQUzCBkgYIKwYBBQUHAQEEgYUwgYIwNAYI
-KwYBBQUHMAGGKGh0dHA6Ly9zdGF0dXNlLmRpZ2l0YWxjZXJ0dmFsaWRhdGlvbi5j
-b20wSgYIKwYBBQUHMAKGPmh0dHA6Ly9jYWNlcnRzLmRpZ2l0YWxjZXJ0dmFsaWRh
-dGlvbi5jb20vVHJ1c3RBc2lhVExTUlNBQ0EuY3J0MAkGA1UdEwQCMAAwggF+Bgor
-BgEEAdZ5AgQCBIIBbgSCAWoBaAB3ACl5vvCeOTkh8FZzn2Old+W+V32cYAr4+U1d
-JlwlXceEAAABeiw+LAoAAAQDAEgwRgIhALVkXNWTFw8WR/UFYd1E06LY2iGdH8+3
-IeL0FTNEDwBiAiEA5vTXjSR8nauzGonCz12aYY8DFBdbtTi2jDW2mb/IKc8AdgAi
-RUUHWVUkVpY/oS/x922G4CMmY63AS39dxoNcbuIPAgAAAXosPivJAAAEAwBHMEUC
-IQDYw2rwNLgFulzjT49wgnJzRfZ+jcXxWB/foEbhtBpjMwIgOqhahXCz4p8Wyq63
-59h+7DClZvsIMG/HPsVuLusdFdEAdQBRo7D1/QF5nFZtuDd4jwykeswbJ8v3nohC
-mg3+1IsF5QAAAXosPiwLAAAEAwBGMEQCIBjhaRFCji1Vul9IDB+dkxA/CQcaS5TE
-jLNkmYJsrIWCAiArCpNJ7VIuv0JcID9lPKBNsMeNdOb1l4hjFBhMptSkOTANBgkq
-hkiG9w0BAQsFAAOCAQEAQtrN4B1NQp+4IMmC977b404G5JIN+jMim9pfBocUSwro
-7h8hc7ugYNspsQIFzqbZLtdOEHC07dSA0J/BSYynEz09BpeKCDm4rT+a0SYNgzyw
-buOnDsVRI9UqhxP4L9ZKvSvf2+pSCvqTuRy7J4h5C1aVZqgxof+lTf++aA6ttkTv
-lyniHMfP8XNwXoLdRQWCB4DMk32RkV8RnnfjG7o4XZdTfEEzndrkzLQiz7lkOQR2
-F5EKdZomFum1CHt9vNa+hYRvO/gXLbdM2IQv3Rh+NeJ2pVSxiX+k6J5iCzeALy5J
-BCQf6wBMPZzCuRDeCIy8jjt+fMfM70kHPLYcpmT8JQ==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIErjCCA5agAwIBAgIQBYAmfwbylVM0jhwYWl7uLjANBgkqhkiG9w0BAQsFADBh
-MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
-d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD
-QTAeFw0xNzEyMDgxMjI4MjZaFw0yNzEyMDgxMjI4MjZaMHIxCzAJBgNVBAYTAkNO
-MSUwIwYDVQQKExxUcnVzdEFzaWEgVGVjaG5vbG9naWVzLCBJbmMuMR0wGwYDVQQL
-ExREb21haW4gVmFsaWRhdGVkIFNTTDEdMBsGA1UEAxMUVHJ1c3RBc2lhIFRMUyBS
-U0EgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCgWa9X+ph+wAm8
-Yh1Fk1MjKbQ5QwBOOKVaZR/OfCh+F6f93u7vZHGcUU/lvVGgUQnbzJhR1UV2epJa
-e+m7cxnXIKdD0/VS9btAgwJszGFvwoqXeaCqFoP71wPmXjjUwLT70+qvX4hdyYfO
-JcjeTz5QKtg8zQwxaK9x4JT9CoOmoVdVhEBAiD3DwR5fFgOHDwwGxdJWVBvktnoA
-zjdTLXDdbSVC5jZ0u8oq9BiTDv7jAlsB5F8aZgvSZDOQeFrwaOTbKWSEInEhnchK
-ZTD1dz6aBlk1xGEI5PZWAnVAba/ofH33ktymaTDsE6xRDnW97pDkimCRak6CEbfe
-3dXw6OV5AgMBAAGjggFPMIIBSzAdBgNVHQ4EFgQUf9OZ86BHDjEAVlYijrfMnt3K
-AYowHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUwDgYDVR0PAQH/BAQD
-AgGGMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjASBgNVHRMBAf8ECDAG
-AQH/AgEAMDQGCCsGAQUFBwEBBCgwJjAkBggrBgEFBQcwAYYYaHR0cDovL29jc3Au
-ZGlnaWNlcnQuY29tMEIGA1UdHwQ7MDkwN6A1oDOGMWh0dHA6Ly9jcmwzLmRpZ2lj
-ZXJ0LmNvbS9EaWdpQ2VydEdsb2JhbFJvb3RDQS5jcmwwTAYDVR0gBEUwQzA3Bglg
-hkgBhv1sAQIwKjAoBggrBgEFBQcCARYcaHR0cHM6Ly93d3cuZGlnaWNlcnQuY29t
-L0NQUzAIBgZngQwBAgEwDQYJKoZIhvcNAQELBQADggEBAK3dVOj5dlv4MzK2i233
-lDYvyJ3slFY2X2HKTYGte8nbK6i5/fsDImMYihAkp6VaNY/en8WZ5qcrQPVLuJrJ
-DSXT04NnMeZOQDUoj/NHAmdfCBB/h1bZ5OGK6Sf1h5Yx/5wR4f3TUoPgGlnU7EuP
-ISLNdMRiDrXntcImDAiRvkh5GJuH4YCVE6XEntqaNIgGkRwxKSgnU3Id3iuFbW9F
-UQ9Qqtb1GX91AJ7i4153TikGgYCdwYkBURD8gSVe8OAco6IfZOYt/TEwii1Ivi1C
-qnuUlWpsF1LdQNIdfbW3TSe0BhQa7ifbVIfvPWHYOu3rkg1ZeMo6XRU9B4n5VyJY
-RmE=
------END CERTIFICATE-----

+ 13 - 4
tools/string.go

@@ -52,7 +52,7 @@ func GetStringToTime(ti string) (time.Time, error) {
 	return st, nil
 }
 
-//获取日期
+// 获取日期
 func GetCurrntDateStr() string {
 	NowTimeZone := time.FixedZone("CST", 8*3600)
 	return time.Now().In(NowTimeZone).Format("2006-01-02")
@@ -72,7 +72,7 @@ func GetPayRemainingTime(inDate string) int64 {
 	return 900 - (now.Unix() - sr)
 }
 
-//输入日期减去当前日期
+// 输入日期减去当前日期
 func InDateSubNow(inDate string) int64 {
 	NowTimeZone := time.FixedZone("CST", 8*3600)
 	timeLayout := "2006-01-02 15:04:05" //转化所需模板
@@ -85,7 +85,7 @@ func InDateSubNow(inDate string) int64 {
 	return sr - now.Unix()
 }
 
-//输入日期相减得出天数
+// 输入日期相减得出天数
 func DateSubDate(startDate string, endDate string) (float64, error) {
 	timeLayout := "2006-01-02" //转化所需模板
 	start, err := time.ParseInLocation(timeLayout, startDate, time.Local)
@@ -109,8 +109,17 @@ func TimeToStr(tm int64) string {
 	return timeStr
 
 }
+func TimeToInt64(tm, timeLayout string) (int64, error) {
+	//fmt.Println("inDate = ", inDate)
+	stamp, err := time.ParseInLocation(timeLayout, tm, time.Local)
+	if err != nil {
+		return 0, err
+	}
+	sr := stamp.Unix()
+	return sr, nil
+}
 
-//加天数
+// 加天数
 func DateAdd(startDate string, num time.Duration) (string, error) {
 	timeLayout := "2006-01-02" //转化所需模板
 	start, err := time.ParseInLocation(timeLayout, startDate, time.Local)