feat:优化项目信息
This commit is contained in:
46
app/api/website/controller/payment/activity.go
Normal file
46
app/api/website/controller/payment/activity.go
Normal file
@ -0,0 +1,46 @@
|
||||
package payment
|
||||
|
||||
import (
|
||||
"SciencesServer/app/api/website/model"
|
||||
model2 "SciencesServer/app/common/model"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
type Activity struct {
|
||||
uid, activityID uint64
|
||||
identity int
|
||||
}
|
||||
|
||||
type ActivityCallback func(uid, activityID uint64, identity int) *Activity
|
||||
|
||||
func (c *Activity) grant(tx *gorm.DB) error {
|
||||
var count int64
|
||||
|
||||
mActivityJoin := model.NewActivityJoin()
|
||||
|
||||
err := model2.Count(mActivityJoin.ActivityJoin, &count, model2.NewWhere("uid", c.uid),
|
||||
model2.NewWhere("activity_id", c.activityID),
|
||||
model2.NewWhere("identity", c.identity),
|
||||
model2.NewWhere("status", model2.ActivityJoinStatusForSuccess))
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
} else if count > 0 {
|
||||
return nil
|
||||
}
|
||||
mActivityJoin.UID = c.uid
|
||||
mActivityJoin.ActivityID = c.activityID
|
||||
mActivityJoin.Identity = c.identity
|
||||
mActivityJoin.Status = model2.ActivityJoinStatusForSuccess
|
||||
return model2.Create(mActivityJoin.ActivityJoin, tx)
|
||||
}
|
||||
|
||||
func NewActivity() ActivityCallback {
|
||||
return func(uid, activityID uint64, identity int) *Activity {
|
||||
return &Activity{
|
||||
uid: uid,
|
||||
activityID: activityID,
|
||||
identity: identity,
|
||||
}
|
||||
}
|
||||
}
|
115
app/api/website/controller/payment/instance.go
Normal file
115
app/api/website/controller/payment/instance.go
Normal file
@ -0,0 +1,115 @@
|
||||
package payment
|
||||
|
||||
import (
|
||||
"SciencesServer/app/api/website/model"
|
||||
model2 "SciencesServer/app/common/model"
|
||||
"SciencesServer/app/session"
|
||||
"SciencesServer/serve/orm"
|
||||
"errors"
|
||||
"gorm.io/gorm"
|
||||
"time"
|
||||
)
|
||||
|
||||
// Instance 支付管理
|
||||
type Instance struct {
|
||||
*session.Enterprise
|
||||
}
|
||||
|
||||
type IInstance interface {
|
||||
grant(tx *gorm.DB) error
|
||||
}
|
||||
|
||||
type InstanceHandle func(session *session.Enterprise) *Instance
|
||||
|
||||
type InstanceGrant struct {
|
||||
tx *gorm.DB
|
||||
uid uint64
|
||||
params *model2.OrderInstanceParams
|
||||
}
|
||||
|
||||
// handle 发放操作
|
||||
func (c *InstanceGrant) handle() error {
|
||||
var _handle IInstance
|
||||
|
||||
if c.params.Kind == model2.OrderInstanceParamsKindForActivity {
|
||||
data := c.params.Data.(*model2.OrderInstanceParamsForActivity)
|
||||
_handle = NewActivity()(c.uid, data.ID, data.Identity)
|
||||
} else if c.params.Kind == model2.OrderInstanceParamsKindForVIP {
|
||||
data := c.params.Data.(*model2.OrderInstanceParamsForVip)
|
||||
_handle = NewVip()(c.uid, data.ID, data.EffectTime)
|
||||
}
|
||||
if _handle != nil {
|
||||
return _handle.grant(c.tx)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Launch 支付发起
|
||||
func (c *Instance) Launch(id uint64) (interface{}, error) {
|
||||
mOrderInstance := model.NewOrderInstance()
|
||||
mOrderInstance.ID = id
|
||||
|
||||
isExist, err := model2.FirstField(mOrderInstance.OrderInstance, []string{"id", "order_no", "amount", "status"})
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else if !isExist {
|
||||
return nil, errors.New("操作错误,订单信息不存在或已被删除")
|
||||
} else if mOrderInstance.Status != model2.OrderInstanceStatusForInit {
|
||||
return nil, errors.New("操作错误,当前订单状态不允许支付")
|
||||
}
|
||||
// 保存日志
|
||||
mOrderLog := model.NewOrderLog()
|
||||
mOrderLog.UID = c.UID
|
||||
mOrderLog.OrderID = id
|
||||
|
||||
if err = model2.Create(mOrderLog.OrderLog); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
// 返回第三方支付接口参数
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
// Callback 支付回调
|
||||
func (c *Instance) Callback(orderNo string) error {
|
||||
mOrderInstance := model.NewOrderInstance()
|
||||
isExist, err := model2.FirstField(mOrderInstance.OrderInstance, []string{"id", "uid", "amount", "params", "status"},
|
||||
model2.NewWhere("order_no", orderNo))
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
} else if !isExist {
|
||||
return errors.New("订单信息不存在或已被删除")
|
||||
} else if mOrderInstance.OrderInstance.Status != model2.OrderInstanceStatusForInit {
|
||||
// 状态异常
|
||||
return errors.New("状态异常,不允许支付")
|
||||
}
|
||||
now := time.Now()
|
||||
|
||||
// 更改订单状态为已支付
|
||||
if err = model2.Updates(mOrderInstance.OrderInstance, map[string]interface{}{
|
||||
"status": model2.OrderInstanceStatusForPaid, "updated_at": now,
|
||||
}); err != nil {
|
||||
return nil
|
||||
}
|
||||
return orm.GetDB().Transaction(func(tx *gorm.DB) error {
|
||||
// 发放操作
|
||||
if err = (&InstanceGrant{
|
||||
tx: tx, uid: mOrderInstance.UID, params: mOrderInstance.GetParamsAttribute(),
|
||||
}).handle(); err != nil {
|
||||
return err
|
||||
}
|
||||
if err = model2.Updates(mOrderInstance.OrderInstance, map[string]interface{}{
|
||||
"status": model2.OrderInstanceStatusForComplete, "updated_at": now,
|
||||
}, tx); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
})
|
||||
}
|
||||
|
||||
func NewInstance() InstanceHandle {
|
||||
return func(session *session.Enterprise) *Instance {
|
||||
return &Instance{session}
|
||||
}
|
||||
}
|
49
app/api/website/controller/payment/vip.go
Normal file
49
app/api/website/controller/payment/vip.go
Normal file
@ -0,0 +1,49 @@
|
||||
package payment
|
||||
|
||||
import (
|
||||
"SciencesServer/app/api/website/model"
|
||||
model2 "SciencesServer/app/common/model"
|
||||
"gorm.io/gorm"
|
||||
"time"
|
||||
)
|
||||
|
||||
// Vip 会员信息
|
||||
type Vip struct {
|
||||
uid, vipID uint64
|
||||
effectTime int
|
||||
}
|
||||
|
||||
type VipCallback func(uid, vipID uint64, effectTime int) *Vip
|
||||
|
||||
func (c *Vip) grant(tx *gorm.DB) error {
|
||||
mUserInstance := model.NewUserInstance()
|
||||
|
||||
isExist, err := model2.FirstField(mUserInstance.UserInstance, []string{"id", "vip", "vip_deadline"},
|
||||
model2.NewWhere("uuid", c.uid))
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
} else if isExist {
|
||||
if mUserInstance.VipStatus() {
|
||||
mUserInstance.Vip = c.vipID
|
||||
mUserInstance.VipDeadline = mUserInstance.VipDeadline.AddDate(0, c.effectTime, 0)
|
||||
} else {
|
||||
mUserInstance.Vip = c.vipID
|
||||
mUserInstance.VipDeadline = time.Now().AddDate(0, c.effectTime, 0)
|
||||
}
|
||||
if err = model2.Updates(mUserInstance.UserInstance, map[string]interface{}{
|
||||
"vip": mUserInstance.Vip, "vip_deadline": mUserInstance.VipDeadline, "updated_at": time.Now(),
|
||||
}, tx); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func NewVip() VipCallback {
|
||||
return func(uid, vipID uint64, effectTime int) *Vip {
|
||||
return &Vip{
|
||||
uid: uid, vipID: vipID, effectTime: effectTime,
|
||||
}
|
||||
}
|
||||
}
|
@ -13,9 +13,12 @@ type (
|
||||
AchievementInfo struct {
|
||||
ID string `json:"id"`
|
||||
*model.TechnologyAchievementInfo
|
||||
Customers []string `json:"customers"`
|
||||
Industrys []string `json:"industrys"`
|
||||
Keywords []string `json:"keywords"`
|
||||
ModeTitle string `json:"mode_title"`
|
||||
MaturityTitle string `json:"maturity_title"`
|
||||
CooperationModeTitle string `json:"cooperation_mode_title"`
|
||||
Customers []string `json:"customers"`
|
||||
Industrys []string `json:"industrys"`
|
||||
Keywords []string `json:"keywords"`
|
||||
}
|
||||
)
|
||||
|
||||
@ -63,7 +66,9 @@ func achievementSearch(page, pageSize int, keyword, industry string, params map[
|
||||
list = append(list, &AchievementInfo{
|
||||
ID: v.GetEncodeID(), TechnologyAchievementInfo: v,
|
||||
Customers: v.GetCustomerAttribute(),
|
||||
Industrys: _industrys, Keywords: v.GetKeywordAttribute(),
|
||||
ModeTitle: v.GetModeTitle(), MaturityTitle: config.GetTechnologyMaturityTitle(v.Maturity),
|
||||
CooperationModeTitle: config.GetTechnologyCooperationModeTitle(v.CooperationMode),
|
||||
Industrys: _industrys, Keywords: v.GetKeywordAttribute(),
|
||||
})
|
||||
}
|
||||
return &controller.ReturnPages{Data: list, Count: count}, nil
|
||||
|
@ -67,6 +67,9 @@ func (c *SolutionCase) Instance(mode int) ([]*SolutionCaseInfo, error) {
|
||||
Image: (&model2.Image{Image: v.DetailImage}).Analysis(config.SystemConfig[config.SysImageDomain]),
|
||||
Description: v.DetailDescription,
|
||||
}
|
||||
if v.DetailID <= 0 {
|
||||
continue
|
||||
}
|
||||
for _, val := range ret {
|
||||
if v.ID == val.MarkID {
|
||||
val.Children = append(val.Children, detail)
|
||||
|
@ -24,6 +24,8 @@ func (c *Banner) Instance(key string) (*BannerInfo, error) {
|
||||
"key": key, "local": key,
|
||||
}); err != nil {
|
||||
return nil, err
|
||||
} else if mSysBanner.ID <= 0 {
|
||||
return nil, nil
|
||||
}
|
||||
return &BannerInfo{
|
||||
ID: mSysBanner.GetEncodeID(),
|
||||
|
@ -21,16 +21,19 @@ type AchievementHandle func(session *session.Enterprise) *Achievement
|
||||
type (
|
||||
// AchievementInfo 技术成果信息
|
||||
AchievementInfo struct {
|
||||
ID string `json:"id"`
|
||||
Title string `json:"title"`
|
||||
Image string `json:"image"`
|
||||
Industrys []string `json:"industrys"`
|
||||
Customers []string `json:"customers"`
|
||||
Maturity config2.TechnologyMaturity `json:"maturity"`
|
||||
CooperationMode config2.TechnologyCooperationMode `json:"cooperation_mode"`
|
||||
Keywords []string `json:"keywords"`
|
||||
VisitCount int `json:"visit_count"`
|
||||
CollectCount int `json:"collect_count"`
|
||||
ID string `json:"id"`
|
||||
Title string `json:"title"`
|
||||
ModeTitle string `json:"mode_title"`
|
||||
Image string `json:"image"`
|
||||
Industrys []string `json:"industrys"`
|
||||
Customers []string `json:"customers"`
|
||||
Maturity config2.TechnologyMaturity `json:"maturity"`
|
||||
MaturityTitle string `json:"maturity_title"`
|
||||
CooperationMode config2.TechnologyCooperationMode `json:"cooperation_mode"`
|
||||
CooperationModeTitle string `json:"cooperation_mode_title"`
|
||||
Keywords []string `json:"keywords"`
|
||||
VisitCount int `json:"visit_count"`
|
||||
CollectCount int `json:"collect_count"`
|
||||
}
|
||||
// AchievementDetailInfo 技术成果详细信息
|
||||
AchievementDetailInfo struct {
|
||||
@ -63,16 +66,19 @@ func (c *Achievement) Instance(title, industry string, page, pageSize int) (*con
|
||||
|
||||
for _, v := range out {
|
||||
list = append(list, &AchievementInfo{
|
||||
ID: v.GetEncodeID(),
|
||||
Title: v.Title,
|
||||
Image: v.Image.Analysis(config.SystemConfig[config.SysImageDomain]),
|
||||
Industrys: v.GetIndustryAttribute(),
|
||||
Customers: v.GetCustomerAttribute(),
|
||||
Maturity: v.Maturity,
|
||||
CooperationMode: v.CooperationMode,
|
||||
Keywords: v.GetKeywordAttribute(),
|
||||
VisitCount: v.VisitCount,
|
||||
CollectCount: v.CollectCount,
|
||||
ID: v.GetEncodeID(),
|
||||
Title: v.Title,
|
||||
ModeTitle: v.GetModeTitle(),
|
||||
Image: v.Image.Analysis(config.SystemConfig[config.SysImageDomain]),
|
||||
Industrys: v.GetIndustryAttribute(),
|
||||
Customers: v.GetCustomerAttribute(),
|
||||
Maturity: v.Maturity,
|
||||
MaturityTitle: config2.GetTechnologyMaturityTitle(v.Maturity),
|
||||
CooperationMode: v.CooperationMode,
|
||||
CooperationModeTitle: config2.GetTechnologyCooperationModeTitle(v.CooperationMode),
|
||||
Keywords: v.GetKeywordAttribute(),
|
||||
VisitCount: v.VisitCount,
|
||||
CollectCount: v.CollectCount,
|
||||
})
|
||||
}
|
||||
return &controller.ReturnPages{Data: list, Count: count}, nil
|
||||
@ -86,7 +92,7 @@ func (c *Achievement) Detail(id uint64) (*AchievementDetailInfo, error) {
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else if out.ID <= 0 {
|
||||
} else if out == nil || out.ID <= 0 {
|
||||
return nil, errors.New("操作错误,成果信息不存在或已被删除")
|
||||
}
|
||||
//var uid uint64 = 0
|
||||
@ -105,16 +111,19 @@ func (c *Achievement) Detail(id uint64) (*AchievementDetailInfo, error) {
|
||||
|
||||
return &AchievementDetailInfo{
|
||||
AchievementInfo: AchievementInfo{
|
||||
ID: out.GetEncodeID(),
|
||||
Title: out.Title,
|
||||
Image: out.Image.Analysis(config.SystemConfig[config.SysImageDomain]),
|
||||
Industrys: out.GetIndustryAttribute(),
|
||||
Customers: out.GetCustomerAttribute(),
|
||||
Maturity: out.Maturity,
|
||||
CooperationMode: out.CooperationMode,
|
||||
Keywords: out.GetKeywordAttribute(),
|
||||
VisitCount: out.VisitCount,
|
||||
CollectCount: out.CollectCount,
|
||||
ID: out.GetEncodeID(),
|
||||
Title: out.Title,
|
||||
ModeTitle: out.GetModeTitle(),
|
||||
Image: out.Image.Analysis(config.SystemConfig[config.SysImageDomain]),
|
||||
Industrys: out.GetIndustryAttribute(),
|
||||
Customers: out.GetCustomerAttribute(),
|
||||
Maturity: out.Maturity,
|
||||
MaturityTitle: config2.GetTechnologyMaturityTitle(out.Maturity),
|
||||
CooperationMode: out.CooperationMode,
|
||||
CooperationModeTitle: config2.GetTechnologyCooperationModeTitle(out.CooperationMode),
|
||||
Keywords: out.GetKeywordAttribute(),
|
||||
VisitCount: out.VisitCount,
|
||||
CollectCount: out.CollectCount,
|
||||
},
|
||||
Introduce: out.Introduce,
|
||||
}, nil
|
||||
|
Reference in New Issue
Block a user