You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
214 lines
5.3 KiB
214 lines
5.3 KiB
4 years ago
|
package company
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"recook/internal/define"
|
||
|
"recook/internal/libs/bean"
|
||
|
"recook/internal/service/baseCode"
|
||
|
"recook/internal/v2/model/company"
|
||
|
"recook/internal/v2/model/recook/manage"
|
||
|
"recook/internal/v2/model/recook/user"
|
||
|
"time"
|
||
|
|
||
|
"git.oa00.com/go/mysql"
|
||
|
"github.com/golangkit/formatime"
|
||
|
"gorm.io/gorm"
|
||
|
"gorm.io/gorm/clause"
|
||
|
)
|
||
|
|
||
|
type logic struct {
|
||
|
}
|
||
|
|
||
|
var Logic = &logic{}
|
||
|
|
||
|
type ArgsCompanyList struct {
|
||
|
bean.Page
|
||
|
Name string `json:"name"`
|
||
|
Mobile string `json:"mobile"`
|
||
|
Contract string `json:"contract"`
|
||
|
ApplyUserName string `json:"apply_user_name"`
|
||
|
State int `json:"state"`
|
||
|
Status int `json:"status"`
|
||
|
Start string `json:"start"`
|
||
|
End string `json:"end"`
|
||
|
}
|
||
|
|
||
|
func (o logic) List(args ArgsCompanyList) (res []company.Info, total int64, err error) {
|
||
|
query := mysql.Db.Table((&company.Info{}).TableName())
|
||
|
{
|
||
|
if args.Name != "" {
|
||
|
query = query.Where("company_name like ?", fmt.Sprintf("%%%s%%", args.Name))
|
||
|
}
|
||
|
if args.Mobile != "" {
|
||
|
query = query.Where("mobile=?", args.Mobile)
|
||
|
}
|
||
|
if args.Contract != "" {
|
||
|
query = query.Where("contract_name like ?", fmt.Sprintf("%%%s%%", args.Contract))
|
||
|
}
|
||
|
|
||
|
if args.Start != "" {
|
||
|
query = query.Where("created_at > ?", args.Start)
|
||
|
}
|
||
|
if args.End != "" {
|
||
|
query = query.Where("created_at < ?", args.End)
|
||
|
}
|
||
|
if args.ApplyUserName != "" {
|
||
|
sub := mysql.Db.Table((&manage.RecookManageUserInfoModel{}).TableName()).Select("id").Where("name like ?", fmt.Sprintf("%%%s%%", args.Name))
|
||
|
query = query.Where("apply_user_id in (?)", sub)
|
||
|
}
|
||
|
}
|
||
|
query.Count(&total)
|
||
|
query.Preload(clause.Associations).Preload("Logs.ManageUserInfo").Offset(args.GetStart()).Limit(args.GetLimit()).Find(&res)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
func (o logic) All() (res []string) {
|
||
|
mysql.Db.Table((&company.Info{}).TableName()).Pluck("company_name", &res)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
type CompanySureApply struct {
|
||
|
ID uint `json:""`
|
||
|
UserID uint `json:"-"`
|
||
|
}
|
||
|
|
||
|
func (o logic) Sure(args CompanySureApply) error {
|
||
|
if err := mysql.Db.Transaction(func(tx *gorm.DB) error {
|
||
|
var obj company.Info
|
||
|
if err := tx.First(&obj, "id = ?", args.ID).Error; err != nil {
|
||
|
return err
|
||
|
}
|
||
|
if err := tx.Model(&obj).Updates(company.Info{
|
||
|
State: company.Pass,
|
||
|
ProcessUserID: args.UserID,
|
||
|
ProcessTime: formatime.NewSecondNow(),
|
||
|
}).Error; err != nil {
|
||
|
return err
|
||
|
}
|
||
|
if err := tx.Create(&company.Log{
|
||
|
Text: fmt.Sprintf("审核通过,并创建账号%s", obj.Mobile),
|
||
|
UserID: args.UserID,
|
||
|
CreatedAt: formatime.NewSecondNow(),
|
||
|
CompanyID: args.ID,
|
||
|
}).Error; err != nil {
|
||
|
return err
|
||
|
}
|
||
|
var u1 user.RecookUserInfoModel
|
||
|
if err := tx.First(&u1, "moblie = ?", obj.Mobile).Error; err != nil {
|
||
|
return err
|
||
|
}
|
||
|
if u1.Id > 0 {
|
||
|
return fmt.Errorf("该账号已存在")
|
||
|
} else {
|
||
|
mobile := obj.Mobile
|
||
|
sql := `select max(id)+floor(1+rand()*5) from recook_user_info`
|
||
|
var lastId int64
|
||
|
if err := tx.Raw(sql).Count(&lastId).Error; err != nil {
|
||
|
return err
|
||
|
}
|
||
|
info := user.RecookUserInfoModel{
|
||
|
Id: uint(lastId),
|
||
|
Nickname: "左家右厨" + mobile[7:],
|
||
|
Mobile: mobile,
|
||
|
Birthday: formatime.NewSecondFrom(define.DefaultBirthday),
|
||
|
HeadImgUrl: "",
|
||
|
Phone: mobile,
|
||
|
Identifier: time.Now().Format("060102") + baseCode.Encode(uint64(lastId)),
|
||
|
Level: 10,
|
||
|
ParentID: 0,
|
||
|
RootID: 0,
|
||
|
}
|
||
|
|
||
|
if err := tx.Create(&info).Error; err != nil {
|
||
|
tx.Rollback()
|
||
|
err = fmt.Errorf("创建用户错误101:" + err.Error())
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
// 生成邀请码和推荐码
|
||
|
info.InvitationNo = baseCode.Encode(uint64(info.Id))
|
||
|
if err := tx.Save(&info).Error; err != nil {
|
||
|
err = fmt.Errorf("创建用户错误102:" + err.Error())
|
||
|
return err
|
||
|
}
|
||
|
// 建立钱包
|
||
|
wallet := user.RecookUserWalletModel{
|
||
|
UserId: info.Id,
|
||
|
}
|
||
|
if err := tx.Create(&wallet).Error; err != nil {
|
||
|
tx.Rollback()
|
||
|
err = fmt.Errorf("创建用户错误103:" + err.Error())
|
||
|
return err
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return nil
|
||
|
}); err != nil {
|
||
|
return err
|
||
|
}
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
type CompanyRejectApply struct {
|
||
|
CompanySureApply
|
||
|
Reason string `json:"reason" validate:"required,maxLen=20"`
|
||
|
}
|
||
|
|
||
|
func (o logic) Reject(args CompanyRejectApply) error {
|
||
|
if err := mysql.Db.Transaction(func(tx *gorm.DB) error {
|
||
|
var obj company.Info
|
||
|
if err := tx.First(&obj, "id = ?", args.ID).Error; err != nil {
|
||
|
return err
|
||
|
}
|
||
|
if err := tx.Model(&obj).Updates(company.Info{
|
||
|
State: company.Reject,
|
||
|
ProcessUserID: args.UserID,
|
||
|
ProcessTime: formatime.NewSecondNow(),
|
||
|
}).Error; err != nil {
|
||
|
return err
|
||
|
}
|
||
|
if err := tx.Create(&company.Log{
|
||
|
Text: args.Reason,
|
||
|
UserID: args.UserID,
|
||
|
CreatedAt: formatime.NewSecondNow(),
|
||
|
CompanyID: args.ID,
|
||
|
}).Error; err != nil {
|
||
|
return err
|
||
|
}
|
||
|
return nil
|
||
|
}); err != nil {
|
||
|
return err
|
||
|
}
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
type CompanyInfo struct {
|
||
|
company.Info
|
||
|
UserID uint `json:"user_id"`
|
||
|
}
|
||
|
|
||
|
func (o logic) Apply(args CompanyInfo) error {
|
||
|
args.State = company.Wait
|
||
|
args.CreatedAt = formatime.NewSecondNow()
|
||
|
args.Logs = nil
|
||
|
args.ID = 0
|
||
|
if err := mysql.Db.Transaction(func(tx *gorm.DB) error {
|
||
|
if err := tx.Create(&args).Error; err != nil {
|
||
|
return err
|
||
|
}
|
||
|
if err := tx.Create(&company.Log{
|
||
|
Text: "发起了申请",
|
||
|
UserID: args.UserID,
|
||
|
CreatedAt: formatime.NewSecondNow(),
|
||
|
CompanyID: args.ID,
|
||
|
}).Error; err != nil {
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
return nil
|
||
|
}); err != nil {
|
||
|
return err
|
||
|
}
|
||
|
return nil
|
||
|
}
|