Merge pull request 'test' (#26) from test into master

Reviewed-on: https://git.oa00.com/recook/backend_v2/pulls/26
master
杨赟 3 years ago
commit f6150e5159

@ -5,7 +5,6 @@ go 1.16
require (
git.oa00.com/go/alipay v1.0.0
git.oa00.com/go/mysql v1.0.0
git.oa00.com/go/wxpay v1.0.0
github.com/360EntSecGroup-Skylar/excelize/v2 v2.3.0
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751
github.com/alibabacloud-go/opensearch-util v1.0.1

@ -6,10 +6,6 @@ git.oa00.com/go/alipay v1.0.0 h1:/qVT7lKc1FbVnCzpXwsHOZODamsiZzhhCFxjgez1+2o=
git.oa00.com/go/alipay v1.0.0/go.mod h1:GCFXgnZofi69vtV8fMOsHGWZqp958lyXlKfCwvhVBL8=
git.oa00.com/go/mysql v1.0.0 h1:E9H6MF0eYgFovLmVYgyCiwjIestp/wRPWjwKyayg3LI=
git.oa00.com/go/mysql v1.0.0/go.mod h1:pQm9xCn8iFew9egnEPvzAlggGykmAlwV1nqTX5KIXiQ=
git.oa00.com/go/rsa v1.0.0 h1:cscSyfYeNxqUjEt/rUiPjPlqeZW/pdLDqVTrS64llJM=
git.oa00.com/go/rsa v1.0.0/go.mod h1:y4272MGmgvdEGcXIcPRBwteDo/zeqTEtRpqJBpK1Luk=
git.oa00.com/go/wxpay v1.0.0 h1:A/XT7/8fYs1hPujItAh/B2/ymRLkMAh4jzKUIzWQasQ=
git.oa00.com/go/wxpay v1.0.0/go.mod h1:RyvSqgH+If78a7QLe+7r+D3R5F+E/WyNRsCVWQ6hmGM=
github.com/360EntSecGroup-Skylar/excelize/v2 v2.3.0 h1:tDWYNCJrpNnlNg8mVdlzAzPjlPaRbsA/kS8H9LczleQ=
github.com/360EntSecGroup-Skylar/excelize/v2 v2.3.0/go.mod h1:Uwb0d1GgxJieUWZG5WylTrgQ2SrldfjagAxheU8W6MQ=
github.com/Azure/azure-sdk-for-go v32.4.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc=
@ -43,8 +39,6 @@ github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo=
github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI=
github.com/agiledragon/gomonkey v2.0.2+incompatible h1:eXKi9/piiC3cjJD1658mEE2o3NjkJ5vDLgYjCQu0Xlw=
github.com/agiledragon/gomonkey v2.0.2+incompatible/go.mod h1:2NGfXu1a80LLr2cmWXGBDaHEjb1idR6+FVlX5T3D9hw=
github.com/akamai/AkamaiOPEN-edgegrid-golang v0.9.0/go.mod h1:zpDJeKyp9ScW4NNrbdr+Eyxvry3ilGPewKoXw3XGN1k=
github.com/alangpierce/go-forceexport v0.0.0-20160317203124-8f1d6941cd75/go.mod h1:uAXEEpARkRhCZfEvy/y0Jcc888f9tHCc1W7/UeEtreE=
github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7/go.mod h1:6zEj6s6u/ghQa61ZWa/C2Aw3RkjiTBOix7dkqa1VLIs=
@ -589,8 +583,6 @@ github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijb
github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
github.com/urfave/cli/v2 v2.1.1/go.mod h1:SE9GqnLQmjVa0iPEY0f1w3ygNIYcIJ0OKPMoW2caLfQ=
github.com/vultr/govultr v0.1.4/go.mod h1:9H008Uxr/C4vFNGLqKx232C206GL0PBHzOP0809bGNA=
github.com/wechatpay-apiv3/wechatpay-go v0.2.11 h1:KEVmn6VxFeoCdnTno4yLOWMmdG/wS7KWURzeuVXH6RU=
github.com/wechatpay-apiv3/wechatpay-go v0.2.11/go.mod h1:W8ucVAOCKOii933cWROLaDLmRQ2cg/vHHVF4vGAVq9Q=
github.com/wendal/errors v0.0.0-20130201093226-f66c77a7882b/go.mod h1:Q12BUT7DqIlHRmgv3RskH+UCM/4eqVMgI0EMmlSpAXc=
github.com/xanzy/ssh-agent v0.2.1/go.mod h1:mLlQY/MoOhWBj+gOGMQkOeiEvkx+8pJSI+0Bx9h2kr4=
github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU=

@ -58,10 +58,17 @@ func (r *registerUser) UserAdd(c *gin.Context, login *user.Login, info *user.Inf
}
rd := fmt.Sprintf("%06v", rand.New(rand.NewSource(time.Now().UnixNano())).Int31n(1000000))
nickname := "瑞库客" + mobile[7:]
if info != nil && info.Level > 0 {
level = info.Level
parentID = info.ParentID
rootID = info.RootID
nickname = info.Nickname
}
*info = user.Information{
ID: lastId,
AncestorID: 1,
Nickname: "瑞库客" + mobile[7:],
Nickname: nickname,
Mobile: mobile,
Birthday: formatime.NewSecondFrom(define.DefaultBirthday),
HeadImgUrl: define.DefaultHeadImage,

@ -0,0 +1,70 @@
package setting
import (
"github.com/gin-gonic/gin"
"recook/internal/libs/bean"
"recook/internal/v2/lib/back"
"recook/internal/v2/logic/manage/setting"
"recook/tools"
)
type Invite struct {
}
type PageItem struct {
}
// Lists 返回邀请码
func (*Invite) Lists(c *gin.Context) {
args := bean.Page{}
err := tools.Params(&args, c)
if err != nil {
back.Fail(c, err.Error())
return
}
lists, total := setting.InviteLogic.Lists(args)
back.Suc(c, "操作成功", bean.ResultLists{
List: lists,
Total: int(total),
})
}
type arsgInviteCreateInvite struct {
NowTime string
}
// Gen 创建邀请码
func (*Invite) Gen(c *gin.Context) {
args := arsgInviteCreateInvite{}
err := tools.Params(&args, c)
if err != nil {
back.Fail(c, err.Error())
return
}
if err := setting.InviteLogic.Gen(args.NowTime); err != nil {
back.Fail(c, err.Error())
return
}
back.Suc(c, "操作成功", nil)
}
type arsgInviteCancellation struct {
InviteId int64
}
func (*Invite) Cancellation(c *gin.Context) {
args := arsgInviteCancellation{}
err := tools.Params(&args, c)
if err != nil {
back.Fail(c, err.Error())
return
}
if args.InviteId == 0 {
back.Fail(c, "参数错误")
return
}
if err := setting.InviteLogic.Cancellation(args.InviteId); err != nil {
back.Fail(c, err.Error())
return
}
back.Suc(c, "操作成功", nil)
}

@ -0,0 +1,33 @@
package copartner
import (
"github.com/gin-gonic/gin"
"recook/internal/back"
"recook/internal/v2/logic/wxapp/copartner"
"recook/tools"
)
type Company struct {
}
type argsCompanyAdd struct {
InviteNo string `binding:"required" label:"邀请码"` // 邀请码
copartner.CompanyInfo
}
// Add @Title 添加合伙人
func (*Company) Add(c *gin.Context) {
var args argsCompanyAdd
if err := tools.Params(&args, c); err != nil {
back.Fail(c, err.Error())
return
}
if err := copartner.CopartnerLogic.Very(args.InviteNo); err != nil {
back.Fail(c, err.Error())
return
}
if err := copartner.CompanyLogic.Add(args.CompanyInfo); err != nil {
back.Fail(c, err.Error())
} else {
back.Suc(c, "ok", "")
}
}

@ -0,0 +1,28 @@
package copartner
import (
"github.com/gin-gonic/gin"
"recook/internal/v2/lib/back"
"recook/internal/v2/logic/wxapp/copartner"
"recook/tools"
)
type Copartner struct {
}
type argsCopartnerCode struct {
InviteNo string `binding:"required" label:"邀请码"` // 邀请码
}
// Very @Title 验证邀请码
func (*Copartner) Very(c *gin.Context) {
var args argsCopartnerCode
if err := tools.Params(&args, c); err != nil {
back.Fail(c, err.Error())
return
}
if err := copartner.CopartnerLogic.Very(args.InviteNo); err != nil {
back.Fail(c, err.Error())
return
}
back.Suc(c, "ok", "")
}

@ -0,0 +1,52 @@
package copartner
import (
"git.oa00.com/go/mysql"
"github.com/gin-gonic/gin"
"recook/internal/model/user"
service "recook/internal/service/app"
"recook/internal/v2/lib/back"
"recook/internal/v2/logic/wxapp/copartner"
"recook/tools"
)
type Personal struct {
}
type argsPersonalAdd struct {
Phone string `binding:"required,len=11,startswith=1" label:"手机号"`
Nickname string `binding:"required" label:"昵称"`
InviteNo string `binding:"required" label:"邀请码"`
}
// Add @Title 添加合伙人
func (*Personal) Add(c *gin.Context) {
args := argsPersonalAdd{}
err := tools.Params(&args, c)
if err != nil {
back.Fail(c, err.Error())
return
}
if err := copartner.CopartnerLogic.Very(args.InviteNo); err != nil {
back.Fail(c, err.Error())
return
}
information := user.Information{Mobile: args.Phone}
mysql.Db.Where(&information).First(&information)
if information.ID > 0 {
back.Fail(c, "手机号已存在")
return
}
// 从手机注册时用户邀请码默认为id时6的用户邀请码为NXR0L3
// p.InvitationNo = "NXR0L3"
// 根据 不同的码 去调用不同的 下级规则
// 获取用户角色等级
registerUser := service.NewRegisterUser()
// 开始添加用户
information.Nickname = args.Nickname
information.Level = 10
if err := registerUser.UserAdd(c, &user.Login{}, &information, args.Phone); err != nil {
back.Fail(c, "提交失败")
return
}
back.Suc(c, "操作成功", nil)
}

@ -1,8 +1,10 @@
package command
import (
"math/rand"
command2 "recook/internal/v2/model/recook/command"
"recook/tools"
"time"
)
var CommandLogic = &commandLogic{}
@ -10,6 +12,18 @@ var CommandLogic = &commandLogic{}
type commandLogic struct {
}
// Random @Title 生成随机数
func (*commandLogic) Random(length int) string {
var strByte = []byte("QWERTYUIOPLKJHGFDSAZXCVBNMqweasdzxcrtyfghvbnuiojklmop123456789")
strByteLen := len(strByte)
result := ""
r := rand.New(rand.NewSource(time.Now().UnixNano()))
for i := 0; i < length; i++ {
result += string(strByte[r.Intn(strByteLen)])
}
return result
}
// @Style 生成瑞口令
func (*commandLogic) Generate(value string) string {
command := tools.RandStr(12)

@ -0,0 +1,70 @@
package setting
import (
"errors"
"git.oa00.com/go/mysql"
"recook/internal/libs/bean"
"recook/internal/v2/logic/command"
"recook/internal/v2/model"
"time"
)
var InviteLogic = &inviteLogic{}
type inviteLogic struct {
}
type inviteItem struct {
Id uint `json:"id"`
Code string `json:"code"`
CreateTime int64 `json:"create_time"`
EndTime int64 `json:"end_time"`
}
// Lists @Title 返回邀请码列表
func (i *inviteLogic) Lists(page bean.Page) (lists []inviteItem, total int64) {
lists = []inviteItem{}
var inviteCodes []model.TopCode
mysql.Db.Model(&inviteCodes).Count(&total)
if page.HasPage(total) {
mysql.Db.Offset(page.GetStart()).Limit(page.Limit).Find(&inviteCodes)
for _, inviteCode := range inviteCodes {
lists = append(lists, inviteItem{
Id: inviteCode.Id,
Code: inviteCode.Code,
CreateTime: inviteCode.CreatedTime.Unix(),
EndTime: inviteCode.EndTime.Unix(),
})
}
}
return
}
// Gen @Title 创建生成码
func (i *inviteLogic) Gen(nowTime string) error {
random := command.CommandLogic.Random(6)
location, err := time.ParseInLocation("2006-01-02 15:04:05", nowTime, time.Local)
if err != nil {
return errors.New("时间格式错误")
}
inviete := model.TopCode{
Code: random,
CreatedTime: time.Now(),
EndTime: location,
}
if mysql.Db.Create(&inviete).Error != nil {
return errors.New("生成失败")
}
return nil
}
// Cancellation @Title 作废邀请码
func (i *inviteLogic) Cancellation(inviteId int64) error {
inviete := model.TopCode{}
if mysql.Db.Where("id = ?", inviteId).First(&inviete).Error != nil {
return errors.New("邀请码不存在")
}
if mysql.Db.Model(&inviete).Update("end_time", time.Now()).Error != nil {
return errors.New("作废失败")
}
return nil
}

@ -0,0 +1,65 @@
package copartner
import (
"errors"
"fmt"
"git.oa00.com/go/mysql"
"github.com/golangkit/formatime"
"github.com/shopspring/decimal"
"gorm.io/gorm"
"recook/internal/v2/model/company"
"recook/internal/v2/model/recook/user"
)
var CompanyLogic = &companyLogic{}
type companyLogic struct {
}
type CompanyInfo struct {
Phone string `binding:"required,len=11,startswith=1" label:"手机号"` //手机号
NikeName string `binding:"required" label:"昵称"` //昵称
BusinessLicense string `binding:"required" label:"印业执照"` //营业执照
CorporationName string `binding:"required" label:"企业名"` //企业名
TaxBillType string `binding:"required" label:"纳税类型"` //纳税类型
Taxpayer string `binding:"required" label:"纳税识别号"` //纳税识别号
OpeningBank string `binding:"required" label:"开户行"` //开户行
BankAccount string `binding:"required" label:"银行账户"` //银行账户
MakeTax decimal.Decimal `binding:"required" label:"开票税率"` //开票税率
Linkman string `binding:"required" label:"联系人"` //联系人
PEmail string `binding:"required" label:"联系人手机号或者邮箱"` //联系人手机号或者邮箱
}
// Add @Title 添加合伙人
func (c *companyLogic) Add(data CompanyInfo) error {
userInfoModel := user.RecookUserInfoModel{Mobile: data.Phone}
mysql.Db.Where(&userInfoModel).First(&userInfoModel)
if userInfoModel.Id > 0 {
return fmt.Errorf("手机已存在")
}
userInfo := user.RecookUserInfoModel{Nickname: data.NikeName}
mysql.Db.Where(&userInfo).First(&userInfoModel)
if userInfo.Id > 0 {
return fmt.Errorf("昵称已存在")
}
companyInfo := company.Info{
ShopName: data.NikeName,
Mobile: data.Phone,
BusinessPhoto: data.BusinessLicense,
TaxBank: data.OpeningBank,
TaxAccount: data.BankAccount,
Tax: data.MakeTax,
TaxType: data.TaxBillType,
ContractEmail: data.PEmail,
TaxNumber: data.Taxpayer,
ContractName: data.Linkman,
CompanyName: data.CorporationName,
State: company.Wait,
CreatedAt: formatime.NewSecondNow(),
}
return mysql.Db.Transaction(func(tx *gorm.DB) error {
if tx.Create(&companyInfo).Error != nil {
return errors.New("提交失败")
}
return nil
})
}

@ -0,0 +1,25 @@
package copartner
import (
"errors"
"git.oa00.com/go/mysql"
"recook/internal/v2/model"
"time"
)
var CopartnerLogic = &copartnerLogic{}
type copartnerLogic struct {
}
// Very @Title 验证邀请码
func (*copartnerLogic) Very(inviteNo string) error {
topCode := model.TopCode{Code: inviteNo}
if mysql.Db.Where(&topCode).First(&topCode).Error != nil {
return errors.New("邀请码不存在")
}
if topCode.EndTime.Before(time.Now()) {
return errors.New("邀请码过期")
}
return nil
}

@ -0,0 +1,10 @@
package copartner
var PersonalLogic = &personalLogic{}
type personalLogic struct {
}
// Add @Title 添加合伙人-个人
func (*personalLogic) Add(phone, nickname string) {
}

@ -0,0 +1,16 @@
package model
import "time"
// 邀请人的历史记录
type InviteCode struct {
ID int64 `gorm:"column:id" json:"id"`
InviterUserID uint `gorm:"inviter_user_id" json:"inviterUserId"`
InviterCode string `gorm:"column:inviter_code" json:"userId"`
ExpiredAt time.Time `gorm:"column:expired_at" json:"expiredAt"`
CreatedAt time.Time `gorm:"column:created_at" json:"createdAt"`
}
func (r *InviteCode) TableName() string {
return "recook_invite_code"
}

@ -0,0 +1,17 @@
package model
import (
"time"
)
type TopCode struct {
Id uint `gorm:"column:id;primary_key" json:"id"`
Code string `gorm:"column:code" json:"code"`
CreatedTime time.Time `gorm:"column:created_time" json:"createdTime"`
EndTime time.Time `gorm:"column:end_time" json:"endTime"`
UserId uint `gorm:"column:user_id" json:"userId"`
}
func (r *TopCode) TableName() string {
return "recook_user_top_code"
}

@ -21,6 +21,7 @@ import (
"recook/internal/v2/controller/manage/message"
operationController2 "recook/internal/v2/controller/manage/operationController"
"recook/internal/v2/controller/manage/order"
"recook/internal/v2/controller/manage/setting"
"recook/internal/v2/controller/manage/special_sale"
"recook/internal/v2/controller/manage/upgrade"
"recook/internal/v2/controller/manage/user"
@ -500,6 +501,16 @@ func routerManage(manageRouter *gin.RouterGroup) {
operationRouter.POST("ce_se/rate", operationController.CeSeRate) //测试
}
// 配置
settingRouter := manageRouter.Group("setting", authorize)
{
inviteController := setting.Invite{}
{
settingRouter.POST("invite/list", inviteController.Lists) // 获取邀请码
settingRouter.POST("invite/gen", inviteController.Gen) // 生成邀请码
settingRouter.POST("invite/Cancellation", inviteController.Cancellation) // 作废邀请码
}
}
//活动位模块
{
activeBitRouter := manageRouter.Group("active_bit", authorize)
@ -782,7 +793,7 @@ func routerManage(manageRouter *gin.RouterGroup) {
companyRouter.POST("all", proxy.All)
companyRouter.POST("sure", proxy.Sure)
companyRouter.POST("reject", proxy.Reject)
companyRouter.POST("apply", proxy.Apply)
companyRouter.POST("apply", proxy.Apply) // 创建合伙人
}
}
}

@ -16,4 +16,6 @@ func Router(router *gin.RouterGroup) {
// app端路由
routerApp(router.Group("app"))
// app端路由
routerWxapp(router.Group("wxapp"))
}

@ -0,0 +1,28 @@
package router
import (
"github.com/gin-gonic/gin"
"recook/internal/v2/controller/wxapp/copartner"
"recook/internal/v2/router/middleware"
)
// @Style recook总后台
func routerWxapp(wxappRouter *gin.RouterGroup) {
authorize := middleware.AppAuthorize()
copartnerRouter := wxappRouter.Group("copartner", authorize)
{
copartnerController := copartner.Copartner{}
{
copartnerRouter.POST("copartner/very", copartnerController.Very) //wxapp添加合伙人-公司
}
companyController := copartner.Company{}
{
copartnerRouter.POST("company/add", companyController.Add) //wxapp添加合伙人-公司
}
personalController := copartner.Personal{}
{
copartnerRouter.POST("personal/add", personalController.Add) // wxapp添加合伙人-个人
}
}
}
Loading…
Cancel
Save