company.go 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295
  1. package controller
  2. import (
  3. "fmt"
  4. "github.com/gin-gonic/gin"
  5. "lims-extend/common"
  6. "lims-extend/model"
  7. "lims-extend/response"
  8. "lims-extend/util"
  9. "strconv"
  10. "time"
  11. )
  12. func SubmitCompanyCreateRequest(c *gin.Context) {
  13. db := common.GetDB()
  14. db.AutoMigrate(&model.CompanyCreateRequest{})
  15. // 获取数据
  16. companyName := c.PostForm("company_name")
  17. creatorId := c.PostForm("user_id")
  18. certificateFile, err := c.FormFile("business_license")
  19. // 数据验证
  20. if err != nil {
  21. response.Fail(c, nil, "营业执照上传发生错误")
  22. return
  23. }
  24. logoFile, err := c.FormFile("logo")
  25. if err != nil {
  26. response.Fail(c, nil, "公司logo上传发生错误")
  27. return
  28. }
  29. var request model.CompanyCreateRequest
  30. if err := db.Model(&model.CompanyCreateRequest{}).
  31. Where("name = ?", companyName).First(&request).Error; err == nil || request.Name != "" {
  32. response.Fail(c, nil, "该公司已存在,无法重复提交申请")
  33. return
  34. }
  35. timestamp := strconv.FormatInt(time.Now().Unix(), 10)
  36. // 将获取到的图片文件保存到本地
  37. logoURL := "files/logo/" + timestamp + "_" + logoFile.Filename
  38. certificateURL := "files/cert/" + timestamp + "_" + certificateFile.Filename
  39. err = c.SaveUploadedFile(logoFile, logoURL)
  40. err = c.SaveUploadedFile(certificateFile, certificateURL)
  41. baseURL := util.GetHTTPHead()
  42. if err != nil {
  43. response.Fail(c, nil, "保存文件出错")
  44. return
  45. }
  46. // 查询创建者信息
  47. var user model.User
  48. if err := db.Model(&model.User{}).Where("id = ?", creatorId).First(&user).Error; err != nil {
  49. response.Fail(c, nil, "用户不存在")
  50. return
  51. }
  52. // 创建公司创建请求实体
  53. request = model.CompanyCreateRequest{
  54. Name: companyName,
  55. LogoUrl: baseURL + logoURL,
  56. CertificateUrl: baseURL + certificateURL,
  57. State: 0, //状态0表示未审核
  58. CreatorId: creatorId,
  59. CreatorName: user.Username,
  60. CreatedAt: model.Time{},
  61. UpdatedAt: model.Time{},
  62. }
  63. // 提交至数据库
  64. if err := db.Model(&model.CompanyCreateRequest{}).Create(&request).Error; err != nil {
  65. response.Fail(c, nil, "公司创建请求出现问题,请检查")
  66. return
  67. }
  68. // 返回创建成功提醒
  69. response.Success(c, gin.H{"company": request}, "公司创建请求提交成功,请等待审核!")
  70. }
  71. func GetCompanyCreateRequest(c *gin.Context) {
  72. db := common.GetDB()
  73. creatorId := c.Params.ByName("creator_id")
  74. var request model.CompanyCreateRequest
  75. if err := db.Model(&model.CompanyCreateRequest{}).
  76. Where("creator_id = ?", creatorId).First(&request).Error; err != nil {
  77. response.Fail(c, nil, "查无此创建公司请求")
  78. return
  79. }
  80. response.Success(c, gin.H{"request": request}, "查询成功")
  81. }
  82. func GetCompanyCreateRequestsList(c *gin.Context) {
  83. db := common.GetDB()
  84. //creatorId := c.Params.ByName("creator_id")
  85. var requestList []model.CompanyCreateRequest
  86. if err := db.Model(&model.CompanyCreateRequest{}).
  87. Find(&requestList).Error; err != nil {
  88. response.Fail(c, nil, "查询出错")
  89. return
  90. }
  91. response.Success(c, gin.H{"requestList": requestList}, "查询成功")
  92. }
  93. func RejectCompanyCreateRequest(c *gin.Context) {
  94. db := common.GetDB()
  95. requestId := c.Params.ByName("request_id")
  96. var request model.CompanyCreateRequest
  97. if err := db.Model(&model.CompanyCreateRequest{}).
  98. Where("id = ?", requestId).
  99. First(&request).Error; err != nil {
  100. response.Fail(c, nil, "该创建请求不存在,请检查!")
  101. return
  102. }
  103. if request.State != 0 {
  104. response.Fail(c, nil, "该创建请求状态不为【未审核】,无法再次变更状态!")
  105. return
  106. }
  107. request.State = 2
  108. request.UpdatedAt = model.Time{}
  109. if err := db.Model(&model.CompanyCreateRequest{}).Where("id = ?", requestId).
  110. Updates(&request).Error; err != nil {
  111. response.Fail(c, nil, "拒绝失败,数据库错误!")
  112. return
  113. }
  114. response.Success(c, gin.H{"requestList": request}, "该申请已被驳回!")
  115. }
  116. func AcceptCompanyCreateRequest(c *gin.Context) {
  117. db := common.GetDB()
  118. requestId := c.Params.ByName("request_id")
  119. var request model.CompanyCreateRequest
  120. if err := db.Model(&model.CompanyCreateRequest{}).
  121. Where("id = ?", requestId).
  122. First(&request).Error; err != nil {
  123. response.Fail(c, nil, "该创建请求不存在,请检查!")
  124. return
  125. }
  126. if request.State != 0 {
  127. response.Fail(c, nil, "该创建请求状态不为【未审核】,无法再次变更状态!")
  128. return
  129. }
  130. db.AutoMigrate(&model.Company{})
  131. // 开始创建公司实体
  132. company := model.Company{
  133. Name: request.Name,
  134. LogoUrl: request.LogoUrl,
  135. CertificateUrl: request.CertificateUrl,
  136. CreatorId: request.CreatorId,
  137. CreatedAt: model.Time{},
  138. UpdatedAt: model.Time{},
  139. }
  140. // 创建公司表数据
  141. if err := db.Model(&model.Company{}).Create(&company).Error; err != nil {
  142. response.Fail(c, nil, "公司创建失败,数据库错误。")
  143. return
  144. }
  145. // 设置公司创建申请状态为已同意
  146. request.State = 1
  147. request.UpdatedAt = model.Time{}
  148. if err := db.Model(&model.CompanyCreateRequest{}).Where("id = ?", requestId).
  149. Updates(&request).Error; err != nil {
  150. response.Fail(c, nil, "同意申请失败,数据库错误!")
  151. return
  152. }
  153. response.Success(c, gin.H{"company": company}, "审批通过!公司创建成功!")
  154. }
  155. func ApplyJoinCompany(c *gin.Context) {
  156. db := common.GetDB()
  157. db.AutoMigrate(&model.Company2Users{})
  158. // 获取加入公司请求
  159. type JoinCompanyRequest struct {
  160. UserId string `json:"user_id"`
  161. CompanyName string `json:"company_name"`
  162. }
  163. var request JoinCompanyRequest
  164. if err := c.ShouldBind(&request); err != nil {
  165. response.Fail(c, nil, "参数不完整")
  166. return
  167. }
  168. // 查询公司是否存在
  169. var company model.Company
  170. if err := db.Model(&model.Company{}).
  171. Where("name = ?", request.CompanyName).
  172. First(&company).Error; err != nil {
  173. response.Fail(c, nil, "公司不存在,请检查")
  174. return
  175. }
  176. // 查询是否重复申请
  177. var dupRequest model.Company2Users
  178. if err := db.Model(model.Company2Users{}).Where("user_id = ?", request.UserId).
  179. First(&dupRequest).Error; err == nil && dupRequest.UserId != "" {
  180. response.Fail(c, nil, fmt.Sprintf("该申请已经存在,请勿重复提交申请"))
  181. return
  182. }
  183. // 创建申请
  184. applyRequest := model.Company2Users{
  185. CompanyId: company.ID,
  186. UserId: request.UserId,
  187. State: 0,
  188. CreatedAt: model.Time{},
  189. UpdatedAt: model.Time{},
  190. }
  191. if err := db.Model(&model.Company2Users{}).Create(&applyRequest).Error; err != nil {
  192. response.Fail(c, nil, "申请创建失败,数据库错误")
  193. return
  194. }
  195. // 创建成功,返回结果
  196. response.Success(c, gin.H{"applyRequest": applyRequest}, "申请成功,请等待审核!")
  197. }
  198. func AcceptJoinCompany(c *gin.Context) {
  199. db := common.GetDB()
  200. userId := c.Params.ByName("userId")
  201. var request model.Company2Users
  202. if err := db.Model(&model.Company2Users{}).Where("user_id = ?", userId).First(&request).Error; err != nil {
  203. response.Fail(c, nil, "该用户不存在或没有提交过申请")
  204. return
  205. }
  206. if request.State != 0 {
  207. response.Fail(c, nil, "无法重复审批申请")
  208. return
  209. }
  210. request.State = 1
  211. request.UpdatedAt = model.Time{}
  212. if err := db.Model(&model.Company2Users{}).Where("user_id = ?", userId).Updates(&request).Error; err != nil {
  213. response.Fail(c, nil, "数据库错误,同意申请失败")
  214. return
  215. }
  216. response.Success(c, nil, "同意申请成功")
  217. }
  218. func RejectJoinCompany(c *gin.Context) {
  219. db := common.GetDB()
  220. userId := c.Params.ByName("userId")
  221. var request model.Company2Users
  222. if err := db.Model(&model.Company2Users{}).Where("user_id = ?", userId).First(&request).Error; err != nil {
  223. response.Fail(c, nil, "该用户不存在或没有提交过申请")
  224. return
  225. }
  226. if request.State != 0 {
  227. response.Fail(c, nil, "无法重复审批申请")
  228. return
  229. }
  230. request.State = 2
  231. request.UpdatedAt = model.Time{}
  232. if err := db.Model(&model.Company2Users{}).Where("user_id = ?", userId).Updates(&request).Error; err != nil {
  233. response.Fail(c, nil, "数据库错误,驳回申请失败")
  234. return
  235. }
  236. response.Success(c, nil, "驳回申请成功")
  237. }
  238. func GetJoinCompanyRequests(c *gin.Context) {
  239. db := common.GetDB()
  240. companyId := c.Params.ByName("companyId")
  241. type result struct {
  242. model.Company2Users
  243. CreatorName string `json:"creator_name" gorm:"column:username"`
  244. }
  245. var requests []result
  246. if err := db.Raw("SELECT company_users.id,company_id,username,user_id,"+
  247. "state,company_users.create_time,company_users.update_time "+
  248. "FROM `company_users`,`user` WHERE user.id = company_users.user_id and company_id = ?", companyId).
  249. Find(&requests).Error; err != nil {
  250. response.Fail(c, nil, "数据库错误")
  251. return
  252. }
  253. response.Success(c, gin.H{"requestList": requests}, "查询成功")
  254. }
  255. func DelCompanyMember(c *gin.Context) {
  256. db := common.GetDB()
  257. userId := c.Params.ByName("userId")
  258. var request model.Company2Users
  259. if err := db.Model(&model.Company2Users{}).Where("user_id = ?", userId).First(&request).Error; err != nil {
  260. response.Fail(c, nil, "公司成员不存在,请勿重复删除")
  261. return
  262. }
  263. if err := db.Model(&model.Company2Users{}).Where("user_id = ?", userId).Delete(&request).Error; err != nil {
  264. response.Fail(c, nil, "数据库错误,删除失败")
  265. return
  266. }
  267. response.Success(c, nil, "删除成功")
  268. }