feat:完善入驻信息管理

This commit is contained in:
henry
2021-12-06 14:55:41 +08:00
parent 911fcf9b1c
commit 162537e52d
18 changed files with 406 additions and 90 deletions

View File

@ -10,12 +10,12 @@ type Config struct{}
func (a *Config) Identity(c *gin.Context) {
data := config.NewConfig().Identity()
api.APISuccess(data)
api.APISuccess(data)(c)
}
func (a *Config) Transaction(c *gin.Context) {
data := config.NewConfig().Transaction()
api.APISuccess(data)
api.APISuccess(data)(c)
}
func (a *Config) Industry(c *gin.Context) {

View File

@ -32,7 +32,8 @@ func (c *settledForm) bind() *settled.BasicParams {
// Index 入驻信息
func (*Settled) Index(c *gin.Context) {
settled.NewInstance()(api.GetSession()(c).(*session.Enterprise), api.GetLocal()(c).(string)).Index()
data, err := settled.NewInstance()(api.GetSession()(c).(*session.Enterprise), api.GetLocal()(c).(string)).Index()
api.APIResponse(err, data)(c)
}
// Company 公司入驻信息
@ -106,6 +107,17 @@ func (*Settled) Agent(c *gin.Context) {
api.APIFailure(err.(error))(c)
return
}
credentialImages := make([]string, 0)
for _, image := range form.CredentialImages {
credentialImages = append(credentialImages, (&api.ImageForm{Image: image}).FilterImageURL())
}
form.CredentialImages = credentialImages
form.IDImage.Front = (&api.ImageForm{Image: form.IDImage.Front}).FilterImageURL()
form.IDImage.Behind = (&api.ImageForm{Image: form.IDImage.Behind}).FilterImageURL()
form.IDImage.Hold = (&api.ImageForm{Image: form.IDImage.Hold}).FilterImageURL()
err := settled.NewAgent()(api.GetSession()(c).(*session.Enterprise), api.GetLocal()(c).(string)).
Launch(form.settledForm.bind(), &form.IdentityForAgent)
api.APIResponse(err)(c)

View File

@ -53,6 +53,11 @@ func (c *Agent) Launch(params *BasicParams, other *config.IdentityForAgent) erro
mManageAgent.Name = params.Name
mManageAgent.Mobile = params.Mobile
mManageAgent.IDCard = other.IDCard
mManageAgent.SetIDImageAttribute(&model2.ManageAgentIDImage{
Front: other.IDImage.Front,
Behind: other.IDImage.Behind,
Hold: other.IDImage.Hold,
})
mManageAgent.SetIndustryAttribute(params.Industrys)
mManageAgent.SetKeywordAttribute(params.Keywords)
mManageAgent.WorkExperience = other.WorkExperience

View File

@ -1,7 +1,13 @@
package settled
import "SciencesServer/app/session"
import (
"SciencesServer/app/api/enterprise/model"
"SciencesServer/app/basic/config"
model2 "SciencesServer/app/common/model"
"SciencesServer/app/session"
)
// Instance 首页信息
type Instance struct {
*session.Enterprise
local string
@ -9,8 +15,77 @@ type Instance struct {
type InstanceHandle func(session *session.Enterprise, local string) *Instance
func (c *Instance) Index() {
type InstanceInfo struct {
Identity int `json:"identity"` // 所有身份
ExamineIdentity map[int]model2.ExamineStatusKind `json:"examine_identity"` // 审核中信息
SelectIdentity int `json:"select_identity"` // 当前选择的身份
}
func (c *Instance) company() (bool, model2.ExamineStatusKind, error) {
mUserCompany := model.NewUserCompany()
out, err := mUserCompany.Company(c.UID)
return out.ID > 0, out.ExamineStatus, err
}
func (c *Instance) expert() (bool, model2.ExamineStatusKind, error) {
mUserExpert := model.NewUserExpert()
out, err := mUserExpert.Expert(c.UID)
return out.ID > 0, out.ExamineStatus, err
}
func (c *Instance) research() (bool, model2.ExamineStatusKind, error) {
mUserResearch := model.NewUserResearch()
out, err := mUserResearch.Research(c.UID)
return out.ID > 0, out.ExamineStatus, err
}
func (c *Instance) laboratory() (bool, model2.ExamineStatusKind, error) {
mUserLaboratory := model.NewUserLaboratory()
out, err := mUserLaboratory.Laboratory(c.UID)
return out.ID > 0, out.ExamineStatus, err
}
func (c *Instance) agent() (bool, model2.ExamineStatusKind, error) {
mUserAgent := model.NewUserAgent()
out, err := mUserAgent.Agent(c.UID)
return out.ID > 0, out.ExamineStatus, err
}
func (c *Instance) Index() (*InstanceInfo, error) {
out := &InstanceInfo{
Identity: c.Identity,
ExamineIdentity: make(map[int]model2.ExamineStatusKind, 0),
SelectIdentity: c.SelectIdentity,
}
isExist := false
var kind model2.ExamineStatusKind
var err error
// 查询其他信息
for k := range config.TenantUserIdentityData {
if k&c.SelectIdentity > 0 {
continue
}
if k == config.TenantUserIdentityForCompany {
isExist, kind, err = c.company()
} else if k == config.TenantUserIdentityForExpert {
isExist, kind, err = c.expert()
} else if k == config.TenantUserIdentityForResearch {
isExist, kind, err = c.research()
} else if k == config.TenantUserIdentityForLaboratory {
isExist, kind, err = c.laboratory()
} else if k == config.TenantUserIdentityForAgent {
isExist, kind, err = c.agent()
}
if err != nil {
return nil, err
}
if !isExist {
continue
}
out.ExamineIdentity[k] = kind
}
return out, nil
}
func NewInstance() InstanceHandle {

View File

@ -1,11 +1,27 @@
package model
import "SciencesServer/app/common/model"
import (
"SciencesServer/app/common/model"
"SciencesServer/serve/orm"
"fmt"
)
type UserAgent struct {
*model.UserAgent
}
func (m *UserAgent) Agent(uid uint64) (*UserSettledInfo, error) {
out := new(UserSettledInfo)
err := orm.GetDB().Table(m.TableName()+" AS u").
Select("u.id", "c.examine_status").
Joins(fmt.Sprintf("LEFT JOIN %s AS c ON u.agent_id = c.id", model.NewManageAgent().TableName())).
Where("u.uid = ?", uid).
Where("u.is_deleted = ? AND u.invalid_status = ?", model.DeleteStatusForNot, model.InvalidStatusForNot).
Scan(out).Error
return out, err
}
func NewUserAgent() *UserAgent {
return &UserAgent{model.NewUserAgent()}
}

View File

@ -1,11 +1,33 @@
package model
import "SciencesServer/app/common/model"
import (
"SciencesServer/app/common/model"
"SciencesServer/serve/orm"
"fmt"
)
type UserCompany struct {
*model.UserCompany
}
type UserSettledInfo struct {
ID uint64 `json:"id"`
model.Examine
}
// Company 公司信息
func (m *UserCompany) Company(uid uint64) (*UserSettledInfo, error) {
out := new(UserSettledInfo)
err := orm.GetDB().Table(m.TableName()+" AS u").
Select("u.id", "c.examine_status").
Joins(fmt.Sprintf("LEFT JOIN %s AS c ON u.company_id = c.id", model.NewManageCompany().TableName())).
Where("u.uid = ?", uid).
Where("u.is_deleted = ? AND u.invalid_status = ?", model.DeleteStatusForNot, model.InvalidStatusForNot).
Scan(out).Error
return out, err
}
func NewUserCompany() *UserCompany {
return &UserCompany{model.NewUserCompany()}
}

View File

@ -1,11 +1,27 @@
package model
import "SciencesServer/app/common/model"
import (
"SciencesServer/app/common/model"
"SciencesServer/serve/orm"
"fmt"
)
type UserExpert struct {
*model.UserExpert
}
func (m *UserExpert) Expert(uid uint64) (*UserSettledInfo, error) {
out := new(UserSettledInfo)
err := orm.GetDB().Table(m.TableName()+" AS u").
Select("u.id", "c.examine_status").
Joins(fmt.Sprintf("LEFT JOIN %s AS c ON u.expert_id = c.id", model.NewManageExpert().TableName())).
Where("u.uid = ?", uid).
Where("u.is_deleted = ? AND u.invalid_status = ?", model.DeleteStatusForNot, model.InvalidStatusForNot).
Scan(out).Error
return out, err
}
func NewUserExpert() *UserExpert {
return &UserExpert{model.NewUserExpert()}
}

View File

@ -1,11 +1,27 @@
package model
import "SciencesServer/app/common/model"
import (
"SciencesServer/app/common/model"
"SciencesServer/serve/orm"
"fmt"
)
type UserLaboratory struct {
*model.UserLaboratory
}
func (m *UserLaboratory) Laboratory(uid uint64) (*UserSettledInfo, error) {
out := new(UserSettledInfo)
err := orm.GetDB().Table(m.TableName()+" AS u").
Select("u.id", "c.examine_status").
Joins(fmt.Sprintf("LEFT JOIN %s AS c ON u.laboratory_id = c.id", model.NewManageLaboratory().TableName())).
Where("u.uid = ?", uid).
Where("u.is_deleted = ? AND u.invalid_status = ?", model.DeleteStatusForNot, model.InvalidStatusForNot).
Scan(out).Error
return out, err
}
func NewUserLaboratory() *UserLaboratory {
return &UserLaboratory{model.NewUserLaboratory()}
}

View File

@ -1,11 +1,27 @@
package model
import "SciencesServer/app/common/model"
import (
"SciencesServer/app/common/model"
"SciencesServer/serve/orm"
"fmt"
)
type UserResearch struct {
*model.UserResearch
}
func (m *UserResearch) Research(uid uint64) (*UserSettledInfo, error) {
out := new(UserSettledInfo)
err := orm.GetDB().Table(m.TableName()+" AS u").
Select("u.id", "c.examine_status").
Joins(fmt.Sprintf("LEFT JOIN %s AS c ON u.research_id = c.id", model.NewManageResearch().TableName())).
Where("u.uid = ?", uid).
Where("u.is_deleted = ? AND u.invalid_status = ?", model.DeleteStatusForNot, model.InvalidStatusForNot).
Scan(out).Error
return out, err
}
func NewUserResearch() *UserResearch {
return &UserResearch{model.NewUserResearch()}
}

View File

@ -41,13 +41,19 @@ type (
}
// IdentityForAgent 经纪人
IdentityForAgent struct {
ResearchID uint64 `json:"research_id" form:"research_id" binding:"required"` // 科研机构ID
IDCard string `json:"id_card" form:"id_card" binding:"required"` // 身份证号
WorkExperience string `json:"work_experience" form:"work_experience" binding:"required"` // 工作经历
WorkPlace string `json:"work_place" form:"work_place" binding:"required"` // 工作地点
CredentialImages []string `json:"credential_images" form:"credential_images"` // 资格证书
Longitude float64 `json:"longitude" form:"longitude"` // 经度
Latitude float64 `json:"latitude" form:"latitude"` // 纬度
ResearchID uint64 `json:"research_id" form:"research_id" binding:"required"` // 科研机构ID
IDCard string `json:"id_card" form:"id_card" binding:"required"` // 身份证号
WorkExperience string `json:"work_experience" form:"work_experience" binding:"required"` // 工作经历
WorkPlace string `json:"work_place" form:"work_place" binding:"required"` // 工作地点
// ManageAgentIDImage 身份证信息
IDImage struct {
Front string `json:"front" form:"front" binding:"required"`
Behind string `json:"behind" form:"behind" binding:"required"`
Hold string `json:"hold" form:"hold" binding:"required"`
} `json:"id_image" form:"id_image" binding:"required"`
CredentialImages []string `json:"credential_images" form:"credential_images"` // 资格证书
Longitude float64 `json:"longitude" form:"longitude"` // 经度
Latitude float64 `json:"latitude" form:"latitude"` // 纬度
}
)

View File

@ -113,10 +113,10 @@ type InvalidStatus struct {
type InvalidStatusKind int
const (
// InvalidStatusForNot 未失效
InvalidStatusForNot InvalidStatusKind = iota
// InvalidStatusForYes 已失效
InvalidStatusForYes
InvalidStatusForYes InvalidStatusKind = iota - 1
// InvalidStatusForNot 未失效
InvalidStatusForNot
)
type Area struct {

View File

@ -1,6 +1,9 @@
package model
import "SciencesServer/utils"
import (
"SciencesServer/utils"
"encoding/json"
)
// ManageAgent 经纪人入驻信息管理
type ManageAgent struct {
@ -9,18 +12,22 @@ type ManageAgent struct {
Name string `gorm:"column:name;type:varchar(30);default:'';comment:姓名" json:"name"`
Mobile string `gorm:"column:mobile;type:varchar(15);default:'';comment:联系方式" json:"mobile"`
IDCard string `gorm:"column:id_card;type:varchar(18);default:'';comment:身份证号" json:"id_card"`
IDImage string `gorm:"column:id_image;type:text;comment:身份证图片" json:"-"`
Industry string `gorm:"column:industry;type:varchar(255);default:'';comment:行业领域" json:"industry"`
Keyword string `gorm:"column:keyword;type:varchar(255);default:'';comment:关键词" json:"-"`
WorkExperience string `gorm:"column:work_experience;type:varchar(255);default:'';comment:工作经历" json:"work_experience"`
WorkPlace string `gorm:"column:work_place;type:varchar(255);default:0;comment:工作地点" json:"work_place"`
IDImage string `gorm:"column:id_image;type:text;comment:身份证图片" json:"-"`
CredentialImage string `gorm:"column:credential_image;type:varchar(255);default:'';comment:资格证书" json:"credential_image"`
Examine
ModelDeleted
ModelAt
}
// ManageAgentIDImage 身份证信息
type ManageAgentIDImage struct {
Front string `json:"front"`
Behind string `json:"behind"`
Hold string `json:"hold"`
}
func (m *ManageAgent) TableName() string {
@ -47,6 +54,17 @@ func (m *ManageAgent) SetKeywordAttribute(value []string) {
m.Keyword = utils.AnyToJSON(value)
}
func (m *ManageAgent) GetIDImageAttribute() *ManageAgentIDImage {
out := new(ManageAgentIDImage)
_ = json.Unmarshal([]byte(m.IDImage), out)
return out
}
func (m *ManageAgent) SetIDImageAttribute(value *ManageAgentIDImage) {
_bytes, _ := json.Marshal(value)
m.IDImage = string(_bytes)
}
func (m *ManageAgent) GetCredentialImageAttribute() []string {
out := make([]string, 0)
_ = utils.FromJSON(m.CredentialImage, &out)

View File

@ -1,32 +1,144 @@
package model
import (
GormEngine "github.com/belief428/gorm-engine"
"github.com/belief428/gorm-engine/engine"
"github.com/belief428/gorm-engine/logic"
"SciencesServer/serve/orm"
"SciencesServer/serve/orm/logic"
"SciencesServer/utils"
"gorm.io/gorm"
"strings"
"testing"
"time"
)
var (
_db *gorm.DB
)
// PPatent 专利信息数据模型
type PPatent struct {
Model
Kind string `gorm:"column:kind;type:tinyint(1);default:0;comment:专利类型" json:"kind"`
Title string `gorm:"column:title;type:varchar(255);default:'';comment:名称标题" json:"title"`
FileUrl string `gorm:"column:file_url;type:varchar(255);default:'';comment:文件地址" json:"file_url"`
ApplyCode string `gorm:"column:apply_code;type:varchar(50);default:'';comment:申请号" json:"apply_code"`
ApplyAt string `gorm:"column:apply_at;type:varchar(30);default:'';comment:申请日" json:"apply_at"`
OpenCode string `gorm:"column:open_code;type:varchar(50);default:'';comment:公开(公告)号" json:"open_code"`
OpenAt string `gorm:"column:open_at;type:varchar(30);default:'';comment:公开(公告)日" json:"open_at"`
ApplyName string `gorm:"column:apply_name;type:varchar(100);default:'';comment:申请(专利权)人" json:"apply_name"`
ApplyAddress string `gorm:"column:apply_address;type:varchar(255);default:'';comment:申请人地址" json:"apply_address"`
Inventor string `gorm:"column:inventor;type:varchar(100);default:'';comment:发明人" json:"inventor"`
Description string `gorm:"column:description;type:text;comment:摘要" json:"description"`
PrincipalClaim string `gorm:"column:principal_claim;type:text;comment:主权项" json:"principal_claim"`
IPCCode string `gorm:"column:ipc_code;type:varchar(50);default:'';comment:IPC主分类号" json:"ipc_code"`
Shelf
Status SysParentStatus `gorm:"column:status;type:tinyint(1);default:1;comment:专利状态(1授权2实审3公开)" json:"-"`
ModelDeleted
ModelAt
}
func mysql() logic.IEngine {
return &engine.MConfig{
User: "appuser", Password: "ABCabc01!",
Host: "192.168.99.188", Port: 3306,
DBName: "iot", Parameters: "charset=utf8mb4,utf8&parseTime=True&loc=Asia%2FShanghai",
func (m *PPatent) TableName() string {
return "manage_patent"
}
func mysql() *gorm.DB {
instance := orm.NewInstance(
orm.WithDebug(true),
orm.WithDBMode("mysql"),
orm.WithTablePrefix(""),
orm.WithSingularTable(false),
orm.WithMaxIdleConns(3600),
orm.WithMaxOpenConns(2000),
orm.WithMaxLifetime(1000),
orm.WithMysqlOption(&logic.Mysql{
User: "appuser", Password: "ABCabc01!", Host: "192.168.0.188", Port: 3306,
DBName: "sciences", Parameters: "charset=utf8mb4,utf8&parseTime=True&loc=Local",
}),
).Init()
return instance.Engine
}
func sqlite() *gorm.DB {
instance := orm.NewInstance(
orm.WithDebug(true),
orm.WithDBMode("sqlite"),
orm.WithTablePrefix(""),
orm.WithSingularTable(false),
orm.WithMaxIdleConns(3600),
orm.WithMaxOpenConns(2000),
orm.WithMaxLifetime(1000),
orm.WithSqliteOption(&logic.Sqlite{Path: "../../../lib",
Name: "data.db"}),
).Init()
return instance.Engine
}
func filter(src string) string {
src = utils.ReplaceAllCompile(src, "\t", "")
src = utils.ReplaceAllCompile(src, "\n", "")
src = strings.TrimLeft(src, " ")
src = strings.TrimRight(src, " ")
return src
}
func TestRecoveryPatent(t *testing.T) {
src := make([]*PPatent, 0)
sqlite := sqlite()
var err error
page := 1
mysql := mysql()
mSysPatent := new(SysPatent)
now := time.Now()
limit := 100
for {
if err = sqlite.Offset((page - 1) * limit).Limit(limit).Find(&src).Error; err != nil {
t.Error("Sqlite" + err.Error())
return
}
if len(src) <= 0 {
t.Log("执行结束")
return
}
t.Log(len(src))
out := make([]*SysPatent, 0)
for _, v := range src {
kind := SysParentKindForInvent
if v.Kind == "实用新型" {
kind = SysParentKindForNewPractical
} else if v.Kind == "外观设计" {
kind = SysParentKindForDesign
}
data := &SysPatent{
Kind: kind,
Title: v.Title,
FileUrl: v.FileUrl,
ApplyCode: v.ApplyCode,
ApplyAt: v.ApplyAt,
OpenCode: v.OpenCode,
OpenAt: v.OpenAt,
ApplyName: filter(v.ApplyName),
ApplyAddress: filter(v.ApplyAddress),
Inventor: filter(v.Inventor),
Description: filter(v.Description),
PrincipalClaim: filter(v.PrincipalClaim),
IPCCode: v.IPCCode,
Shelf: Shelf{ShelfStatus: 1},
ModelAt: ModelAt{
CreatedAt: now, UpdatedAt: now,
},
}
out = append(out, data)
}
src = make([]*PPatent, 0)
page++
if err = mysql.Table(mSysPatent.TableName()).Create(out).Error; err != nil {
t.Error("Mysql" + err.Error())
return
}
}
}
func _init() {
_db = GormEngine.NewEngine()(1, &GormEngine.EngineConfig{
Debug: true,
TablePrefix: "",
Complex: false,
MaxIdleConns: 50,
MaxOpenConns: 150,
MaxLifetime: 3600,
}).Start(mysql())
}

View File

@ -10,9 +10,9 @@ type SysPatent struct {
ApplyAt string `gorm:"column:apply_at;type:varchar(30);default:'';comment:申请日" json:"apply_at"`
OpenCode string `gorm:"column:open_code;type:varchar(50);default:'';comment:公开(公告)号" json:"open_code"`
OpenAt string `gorm:"column:open_at;type:varchar(30);default:'';comment:公开(公告)日" json:"open_at"`
ApplyName string `gorm:"column:apply_name;type:varchar(100);default:'';comment:申请(专利权)人" json:"apply_name"`
ApplyName string `gorm:"column:apply_name;type:varchar(255);default:'';comment:申请(专利权)人" json:"apply_name"`
ApplyAddress string `gorm:"column:apply_address;type:varchar(255);default:'';comment:申请人地址" json:"apply_address"`
Inventor string `gorm:"column:inventor;type:varchar(100);default:'';comment:发明人" json:"inventor"`
Inventor string `gorm:"column:inventor;type:varchar(255);default:'';comment:发明人" json:"inventor"`
Description string `gorm:"column:description;type:text;comment:摘要" json:"description"`
PrincipalClaim string `gorm:"column:principal_claim;type:text;comment:主权项" json:"principal_claim"`
IPCCode string `gorm:"column:ipc_code;type:varchar(50);default:'';comment:IPC主分类号" json:"ipc_code"`