company.go 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433
  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. CreatorName: request.CreatorName,
  138. CreatedAt: model.Time{},
  139. UpdatedAt: model.Time{},
  140. }
  141. // 创建公司表数据
  142. if err := db.Model(&model.Company{}).Create(&company).Error; err != nil {
  143. response.Fail(c, nil, "公司创建失败,数据库错误。")
  144. return
  145. }
  146. // 设置公司创建申请状态为已同意
  147. request.State = 1
  148. request.UpdatedAt = model.Time{}
  149. if err := db.Model(&model.CompanyCreateRequest{}).Where("id = ?", requestId).
  150. Updates(&request).Error; err != nil {
  151. response.Fail(c, nil, "同意申请失败,数据库错误!")
  152. return
  153. }
  154. // 将申请人加入公司中
  155. admin2user := model.Company2Users{
  156. CompanyId: company.ID,
  157. UserId: company.CreatorId,
  158. State: 1,
  159. CreatedAt: model.Time{},
  160. UpdatedAt: model.Time{},
  161. }
  162. if err := db.Model(&model.Company2Users{}).Create(&admin2user).Error; err != nil {
  163. response.Fail(c, nil, "无法将申请人加入公司列表中,数据库错误!")
  164. return
  165. }
  166. response.Success(c, gin.H{"company": company}, "审批通过!公司创建成功!")
  167. }
  168. func ConfirmRejectCompanyCreateRequest(c *gin.Context) {
  169. db := common.GetDB()
  170. requestId := c.Params.ByName("request_id")
  171. var request model.CompanyCreateRequest
  172. if err := db.Model(&model.CompanyCreateRequest{}).
  173. Where("id = ? and state = 2", requestId).First(&request).Error; err != nil {
  174. response.Fail(c, nil, "创建公司申请不存在或者未被驳回,无法撤回申请")
  175. return
  176. }
  177. if err := db.Model(&model.CompanyCreateRequest{}).Where("id = ?", requestId).Delete(&request).Error; err != nil {
  178. response.Fail(c, nil, "数据库错误,申请撤回失败")
  179. return
  180. }
  181. response.Success(c, nil, "申请撤回成功!")
  182. }
  183. func ApplyJoinCompany(c *gin.Context) {
  184. db := common.GetDB()
  185. db.AutoMigrate(&model.Company2Users{})
  186. // 获取加入公司请求
  187. type JoinCompanyRequest struct {
  188. UserId string `json:"user_id"`
  189. CompanyName string `json:"company_name"`
  190. }
  191. var request JoinCompanyRequest
  192. if err := c.ShouldBind(&request); err != nil {
  193. response.Fail(c, nil, "参数不完整")
  194. return
  195. }
  196. // 查询公司是否存在
  197. var company model.Company
  198. if err := db.Model(&model.Company{}).
  199. Where("name = ?", request.CompanyName).
  200. First(&company).Error; err != nil {
  201. response.Fail(c, nil, "公司不存在,请检查")
  202. return
  203. }
  204. // 查询是否重复申请
  205. var dupRequest model.Company2Users
  206. if err := db.Model(model.Company2Users{}).Where("user_id = ?", request.UserId).
  207. First(&dupRequest).Error; err == nil && dupRequest.UserId != "" {
  208. response.Fail(c, nil, fmt.Sprintf("该申请已经存在,请勿重复提交申请"))
  209. return
  210. }
  211. // 创建申请
  212. applyRequest := model.Company2Users{
  213. CompanyId: company.ID,
  214. UserId: request.UserId,
  215. State: 0,
  216. CreatedAt: model.Time{},
  217. UpdatedAt: model.Time{},
  218. }
  219. if err := db.Model(&model.Company2Users{}).Create(&applyRequest).Error; err != nil {
  220. response.Fail(c, nil, "申请创建失败,数据库错误")
  221. return
  222. }
  223. // 创建成功,返回结果
  224. response.Success(c, gin.H{"applyRequest": applyRequest}, "申请成功,请等待审核!")
  225. }
  226. func AcceptJoinCompany(c *gin.Context) {
  227. db := common.GetDB()
  228. userId := c.Params.ByName("userId")
  229. var request model.Company2Users
  230. if err := db.Model(&model.Company2Users{}).Where("user_id = ?", userId).First(&request).Error; err != nil {
  231. response.Fail(c, nil, "该用户不存在或没有提交过申请")
  232. return
  233. }
  234. if request.State != 0 {
  235. response.Fail(c, nil, "无法重复审批申请")
  236. return
  237. }
  238. request.State = 1
  239. request.UpdatedAt = model.Time{}
  240. if err := db.Model(&model.Company2Users{}).Where("user_id = ?", userId).Updates(&request).Error; err != nil {
  241. response.Fail(c, nil, "数据库错误,同意申请失败")
  242. return
  243. }
  244. response.Success(c, nil, "同意申请成功")
  245. }
  246. func RejectJoinCompany(c *gin.Context) {
  247. db := common.GetDB()
  248. userId := c.Params.ByName("userId")
  249. var request model.Company2Users
  250. if err := db.Model(&model.Company2Users{}).Where("user_id = ?", userId).First(&request).Error; err != nil {
  251. response.Fail(c, nil, "该用户不存在或没有提交过申请")
  252. return
  253. }
  254. if request.State != 0 {
  255. response.Fail(c, nil, "无法重复审批申请")
  256. return
  257. }
  258. request.State = 2
  259. request.UpdatedAt = model.Time{}
  260. if err := db.Model(&model.Company2Users{}).Where("user_id = ?", userId).Updates(&request).Error; err != nil {
  261. response.Fail(c, nil, "数据库错误,驳回申请失败")
  262. return
  263. }
  264. response.Success(c, nil, "驳回申请成功")
  265. }
  266. func GetJoinCompanyRequests(c *gin.Context) {
  267. db := common.GetDB()
  268. companyId := c.Params.ByName("companyId")
  269. type result struct {
  270. model.Company2Users
  271. CreatorName string `json:"creator_name" gorm:"column:username"`
  272. }
  273. var requests []result
  274. if err := db.Raw("SELECT company_users.id,company_id,username,user_id,"+
  275. "state,company_users.create_time,company_users.update_time "+
  276. "FROM `company_users`,`user` WHERE user.id = company_users.user_id and company_id = ?", companyId).
  277. Find(&requests).Error; err != nil {
  278. response.Fail(c, nil, "数据库错误")
  279. return
  280. }
  281. response.Success(c, gin.H{"requestList": requests}, "查询成功")
  282. }
  283. func DelCompanyMember(c *gin.Context) {
  284. db := common.GetDB()
  285. userId := c.Params.ByName("userId")
  286. var request model.Company2Users
  287. if err := db.Model(&model.Company2Users{}).Where("user_id = ?", userId).First(&request).Error; err != nil {
  288. response.Fail(c, nil, "公司成员不存在,请勿重复删除")
  289. return
  290. }
  291. if err := db.Model(&model.Company2Users{}).Where("user_id = ?", userId).Delete(&request).Error; err != nil {
  292. response.Fail(c, nil, "数据库错误,删除失败")
  293. return
  294. }
  295. response.Success(c, nil, "删除成功")
  296. }
  297. func GetCompanyMembers(c *gin.Context) {
  298. db := common.GetDB()
  299. companyId := c.Params.ByName("companyId")
  300. type userInfo struct {
  301. Id string `json:"id" gorm:"column:"`
  302. Username string `json:"username"`
  303. Tel string `json:"tel"`
  304. IsLogin string `json:"is_Login"`
  305. Identify int `json:"identify"`
  306. }
  307. var users []userInfo
  308. if err := db.Raw("SELECT user.id,username,tel,is_login,identify from `user`,`company_users` WHERE "+
  309. "company_users.user_id = user.id and state = 1 and company_id = ?", companyId).Find(&users).Error; err != nil {
  310. response.Fail(c, nil, "数据库错误,获取公司成员失败")
  311. return
  312. }
  313. response.Success(c, gin.H{"userList": users}, "查询成功")
  314. }
  315. func ConfirmRejectInfo(c *gin.Context) {
  316. db := common.GetDB()
  317. userId := c.Params.ByName("userId")
  318. var request model.Company2Users
  319. if err := db.Model(&model.Company2Users{}).Where("user_id = ? and state = 2", userId).First(&request).Error; err != nil {
  320. response.Fail(c, nil, "该用户不在被拒绝列表中,无法撤回申请")
  321. return
  322. }
  323. if err := db.Model(&model.Company2Users{}).Where("user_id = ? and state = 2", userId).Delete(&request).Error; err != nil {
  324. response.Fail(c, nil, "数据库错误,未成功撤回申请")
  325. return
  326. }
  327. response.Success(c, nil, "加入公司的申请已被撤回,您可再次申请加入公司")
  328. }
  329. func GetCompanyStatisticsList(c *gin.Context) {
  330. var companies []model.Company
  331. db := common.GetDB()
  332. db.Model(&model.Company{}).Find(&companies)
  333. type result struct {
  334. model.Company
  335. TotalSendCount int64 `json:"totalSendCount"`
  336. TotalRecvCount int64 `json:"totalRecvCount"`
  337. TotalFinishedCount int64 `json:"totalFinishedCount"`
  338. TotalEngineer int `json:"totalEngineer"`
  339. TotalAdmin int `json:"totalAdmin"`
  340. }
  341. res := make([]result, len(companies))
  342. for i, v := range companies {
  343. totalSendCount, totalRecvCount, totalFinishedCount, totalEngineer, totalAdmin := GetCompanyStatisticsData(v.ID)
  344. res[i].TotalSendCount = totalSendCount
  345. res[i].TotalRecvCount = totalRecvCount
  346. res[i].TotalFinishedCount = totalFinishedCount
  347. res[i].TotalEngineer = totalEngineer
  348. res[i].TotalAdmin = totalAdmin
  349. v.CertificateUrl = ""
  350. res[i].Company = v
  351. }
  352. response.Success(c, gin.H{"companyList": res}, "查询成功")
  353. }
  354. func GetCompanyStatisticsData(companyId int) (int64, int64, int64, int, int) {
  355. db := common.GetDB()
  356. //总发包数
  357. var totalSendCount int64
  358. db.Model(&model.Task{}).Where("company_id = ?", companyId).Count(&totalSendCount)
  359. //发包中总接包数
  360. var totalRecvCount int64
  361. db.Model(&model.Task{}).Where("company_id = ? and state <> 3", companyId).Count(&totalRecvCount)
  362. //发包中总完成数
  363. var totalFinishedCount int64
  364. db.Model(&model.Task{}).Where("company_id = ? and task.state = 2", companyId).Count(&totalFinishedCount)
  365. // 公司中测试工程师的人数
  366. var totalEngineer int
  367. db.Raw("SELECT count(*) FROM company_users left join `user` on company_users.user_id = user.id "+
  368. "WHERE company_users.company_id = ? and company_users.state= 1 AND identify = 2", companyId).First(&totalEngineer)
  369. // 公司中测试管理员的人数
  370. var totalAdmin int
  371. db.Raw("SELECT count(*) FROM company_users left join `user` on company_users.user_id = user.id "+
  372. "WHERE company_users.company_id = ? and company_users.state= 1 AND identify = 1", companyId).First(&totalAdmin)
  373. return totalSendCount, totalRecvCount, totalFinishedCount, totalEngineer, totalAdmin
  374. }
  375. func GetCompanyStatistics(c *gin.Context) {
  376. companyId := c.Params.ByName("companyId")
  377. db := common.GetDB()
  378. var company model.Company
  379. if err := db.Model(&model.Company{}).Where("id = ?", companyId).First(&company).Error; err != nil {
  380. response.Fail(c, nil, "公司不存在")
  381. return
  382. }
  383. companyIntId, _ := strconv.Atoi(companyId)
  384. totalSendCount, totalRecvCount, totalFinishedCount, totalEngineer, totalAdmin := GetCompanyStatisticsData(companyIntId)
  385. response.Success(c, gin.H{
  386. "company": company,
  387. "totalSendCount": totalSendCount,
  388. "totalRecvCount": totalRecvCount,
  389. "totalFinishedCount": totalFinishedCount,
  390. "totalEngineer": totalEngineer,
  391. "totalAdmin": totalAdmin,
  392. }, "查询成功")
  393. }