Browse Source

完成用户申请加入公司模块相关功能

bigcat 2 years ago
parent
commit
45cf72cf97
4 changed files with 180 additions and 0 deletions
  1. 134 0
      controller/company.go
  2. 25 0
      controller/user.go
  3. 15 0
      model/company.go
  4. 6 0
      router.go

+ 134 - 0
controller/company.go

@@ -1,6 +1,7 @@
 package controller
 
 import (
+	"fmt"
 	"github.com/gin-gonic/gin"
 	"lims-extend/common"
 	"lims-extend/model"
@@ -45,6 +46,14 @@ func SubmitCompanyCreateRequest(c *gin.Context) {
 		response.Fail(c, nil, "保存文件出错")
 		return
 	}
+
+	// 查询创建者信息
+	var user model.User
+	if err := db.Model(&model.User{}).Where("id = ?", creatorId).First(&user).Error; err != nil {
+		response.Fail(c, nil, "用户不存在")
+		return
+	}
+
 	// 创建公司创建请求实体
 	request = model.CompanyCreateRequest{
 		Name:           companyName,
@@ -52,6 +61,7 @@ func SubmitCompanyCreateRequest(c *gin.Context) {
 		CertificateUrl: baseURL + certificateURL,
 		State:          0, //状态0表示未审核
 		CreatorId:      creatorId,
+		CreatorName:    user.Username,
 		CreatedAt:      model.Time{},
 		UpdatedAt:      model.Time{},
 	}
@@ -159,3 +169,127 @@ func AcceptCompanyCreateRequest(c *gin.Context) {
 
 	response.Success(c, gin.H{"company": company}, "审批通过!公司创建成功!")
 }
+
+func ApplyJoinCompany(c *gin.Context) {
+	db := common.GetDB()
+	db.AutoMigrate(&model.Company2Users{})
+	// 获取加入公司请求
+	type JoinCompanyRequest struct {
+		UserId      string `json:"user_id"`
+		CompanyName string `json:"company_name"`
+	}
+	var request JoinCompanyRequest
+	if err := c.ShouldBind(&request); err != nil {
+		response.Fail(c, nil, "参数不完整")
+		return
+	}
+	// 查询公司是否存在
+	var company model.Company
+	if err := db.Model(&model.Company{}).
+		Where("name = ?", request.CompanyName).
+		First(&company).Error; err != nil {
+		response.Fail(c, nil, "公司不存在,请检查")
+		return
+	}
+	// 查询是否重复申请
+	var dupRequest model.Company2Users
+	if err := db.Model(model.Company2Users{}).Where("user_id = ?", request.UserId).
+		First(&dupRequest).Error; err == nil && dupRequest.UserId != "" {
+		response.Fail(c, nil, fmt.Sprintf("该申请已经存在,请勿重复提交申请"))
+		return
+	}
+	// 创建申请
+	applyRequest := model.Company2Users{
+		CompanyId: company.ID,
+		UserId:    request.UserId,
+		State:     0,
+		CreatedAt: model.Time{},
+		UpdatedAt: model.Time{},
+	}
+	if err := db.Model(&model.Company2Users{}).Create(&applyRequest).Error; err != nil {
+		response.Fail(c, nil, "申请创建失败,数据库错误")
+		return
+	}
+	// 创建成功,返回结果
+	response.Success(c, gin.H{"applyRequest": applyRequest}, "申请成功,请等待审核!")
+}
+
+func AcceptJoinCompany(c *gin.Context) {
+	db := common.GetDB()
+	userId := c.Params.ByName("userId")
+	var request model.Company2Users
+	if err := db.Model(&model.Company2Users{}).Where("user_id = ?", userId).First(&request).Error; err != nil {
+		response.Fail(c, nil, "该用户不存在或没有提交过申请")
+		return
+	}
+	if request.State != 0 {
+		response.Fail(c, nil, "无法重复审批申请")
+		return
+	}
+	request.State = 1
+	request.UpdatedAt = model.Time{}
+	if err := db.Model(&model.Company2Users{}).Where("user_id = ?", userId).Updates(&request).Error; err != nil {
+		response.Fail(c, nil, "数据库错误,同意申请失败")
+		return
+	}
+	response.Success(c, nil, "同意申请成功")
+}
+
+func RejectJoinCompany(c *gin.Context) {
+	db := common.GetDB()
+	userId := c.Params.ByName("userId")
+	var request model.Company2Users
+	if err := db.Model(&model.Company2Users{}).Where("user_id = ?", userId).First(&request).Error; err != nil {
+		response.Fail(c, nil, "该用户不存在或没有提交过申请")
+		return
+	}
+	if request.State != 0 {
+		response.Fail(c, nil, "无法重复审批申请")
+		return
+	}
+	request.State = 2
+	request.UpdatedAt = model.Time{}
+	if err := db.Model(&model.Company2Users{}).Where("user_id = ?", userId).Updates(&request).Error; err != nil {
+		response.Fail(c, nil, "数据库错误,驳回申请失败")
+		return
+	}
+	response.Success(c, nil, "驳回申请成功")
+}
+
+func GetJoinCompanyRequests(c *gin.Context) {
+	db := common.GetDB()
+	companyId := c.Params.ByName("companyId")
+
+	type result struct {
+		model.Company2Users
+		CreatorName string `json:"creator_name" gorm:"column:username"`
+	}
+
+	var requests []result
+
+	if err := db.Raw("SELECT company_users.id,company_id,username,user_id,"+
+		"state,company_users.create_time,company_users.update_time "+
+		"FROM `company_users`,`user` WHERE user.id = company_users.user_id and company_id = ?", companyId).
+		Find(&requests).Error; err != nil {
+		response.Fail(c, nil, "数据库错误")
+		return
+	}
+	response.Success(c, gin.H{"requestList": requests}, "查询成功")
+}
+
+func DelCompanyMember(c *gin.Context) {
+	db := common.GetDB()
+	userId := c.Params.ByName("userId")
+
+	var request model.Company2Users
+	if err := db.Model(&model.Company2Users{}).Where("user_id = ?", userId).First(&request).Error; err != nil {
+		response.Fail(c, nil, "公司成员不存在,请勿重复删除")
+		return
+	}
+
+	if err := db.Model(&model.Company2Users{}).Where("user_id = ?", userId).Delete(&request).Error; err != nil {
+		response.Fail(c, nil, "数据库错误,删除失败")
+		return
+	}
+	response.Success(c, nil, "删除成功")
+}

+ 25 - 0
controller/user.go

@@ -56,3 +56,28 @@ func GetStatisticsInfoForUser(c *gin.Context) {
 		"totalFinishedCount": totalFinishedCount,
 	}, "success")
 }
+
+func IsJoinedCompany(c *gin.Context) {
+	db := common.GetDB()
+	userId := c.Params.ByName("userId")
+
+	var company2user model.Company2Users
+	if err := db.Model(&model.Company2Users{}).Where("user_id = ?", userId).First(&company2user).Error; err != nil {
+		// 状态3 是指没有提交过申请
+		company2user.State = 3
+		response.Success(c, gin.H{"res": company2user}, "未加入任何公司")
+		return
+	}
+	var company model.Company
+	db.Model(&model.Company{}).Where("id = ?", company2user.CompanyId).First(&company)
+	type result struct {
+		model.Company2Users
+		CompanyName string `json:"company_name"`
+	}
+	res := result{
+		Company2Users: company2user,
+		CompanyName:   company.Name,
+	}
+	response.Success(c, gin.H{"res": res}, "查询成功")
+
+}

+ 15 - 0
model/company.go

@@ -17,10 +17,25 @@ type CompanyCreateRequest struct {
 	CertificateUrl string `json:"certificate_url" gorm:"type:varchar(128);not null"`
 	State          int    `json:"state" gorm:"type:int; not null"`
 	CreatorId      string `json:"creator_id" gorm:"type:varchar(128);not null"`
+	CreatorName    string `json:"creator_name" gorm:"type:varchar(128);not null"`
 	CreatedAt      Time   `json:"created_at" gorm:"column:create_time;type:datetime default CURRENT_TIMESTAMP"`
 	UpdatedAt      Time   `json:"updated_at" gorm:"column:update_time;type:datetime default CURRENT_TIMESTAMP"`
 }
 
+type Company2Users struct {
+	ID        int    `json:"id" gorm:"type:bigint(20);not null"`
+	CompanyId int    `json:"company_id" gorm:"type:bigint(20);not null"`
+	UserId    string `json:"user_id" gorm:"type:varchar(128);not null"`
+	State     int    `json:"state" gorm:"type:int; not null"`
+	CreatedAt Time   `json:"created_at" gorm:"column:create_time;type:datetime default CURRENT_TIMESTAMP"`
+	UpdatedAt Time   `json:"updated_at" gorm:"column:update_time;type:datetime default CURRENT_TIMESTAMP"`
+}
+
+func (Company2Users) TableName() string {
+	return "company_users"
+
+}
+
 func (CompanyCreateRequest) TableName() string {
 	return "company_create_request"
 }

+ 6 - 0
router.go

@@ -33,6 +33,7 @@ func CollectRoute(r *gin.Engine) *gin.Engine {
 	{
 		user.GET("infoSender/:userId", controller.GetStatisticsInfoForAdmin)
 		user.GET("infoReceiver/:userId", controller.GetStatisticsInfoForUser)
+		user.GET("isJoinedCompany/:userId", controller.IsJoinedCompany)
 	}
 
 	company := r.Group("/api/v-go/company")
@@ -42,6 +43,11 @@ func CollectRoute(r *gin.Engine) *gin.Engine {
 		company.GET("createRequest/lists", controller.GetCompanyCreateRequestsList)
 		company.PUT("createRequest/reject/:request_id", controller.RejectCompanyCreateRequest)
 		company.POST("createRequest/accept/:request_id", controller.AcceptCompanyCreateRequest)
+		company.POST("applyRequest/join", controller.ApplyJoinCompany)
+		company.PUT("applyRequest/accept/:userId", controller.AcceptJoinCompany)
+		company.PUT("applyRequest/reject/:userId", controller.RejectJoinCompany)
+		company.GET("applyRequest/lists/:companyId", controller.GetJoinCompanyRequests)
+		company.DELETE("member/delete/:userId", controller.DelCompanyMember)
 	}
 	file := r.Group("files")
 	{