user.go 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553
  1. package casbin
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "strconv"
  6. "strings"
  7. "dashoo.cn/backend/api/business/accountinfo"
  8. "dashoo.cn/backend/api/business/company"
  9. "dashoo.cn/backend/api/business/printscheme"
  10. . "dashoo.cn/backend/api/controllers"
  11. "dashoo.cn/business2/parameter"
  12. "dashoo.cn/backend/api/business/logsinfo"
  13. "dashoo.cn/business2/auth"
  14. "dashoo.cn/backend/api/business/organize"
  15. "dashoo.cn/backend/api/models"
  16. "dashoo.cn/business2/permission"
  17. "dashoo.cn/business2/userRole"
  18. "dashoo.cn/utils"
  19. )
  20. // Operations about Users
  21. type UserController struct {
  22. BaseController
  23. }
  24. type UserModel struct {
  25. Username string `json:"username"`
  26. Realname string `json:"realname"`
  27. Telephone string `json:"telephone"`
  28. Mobile string `json:"mobile"`
  29. Description string `json:"description"`
  30. Photo string `json:"photo"`
  31. Role string `json:"role"`
  32. RoleId int `json:"roleid"`
  33. Id int `json:"id"`
  34. ChannelIds string `json:"channelids"`
  35. Password string `json:"password"`
  36. DepartmentId string `json:"departmentid"`
  37. DepartmentName string `json:"departmentname"`
  38. Sign string `json:"sign"`
  39. IsCompanyUser int `json:"Iscompanyuser"`
  40. Superior string `json:"superior"`
  41. }
  42. type ChangePwdModel struct {
  43. Pwd string `json:"pass"`
  44. NwePwd string `json:"newpass"`
  45. }
  46. type RegisteModel struct {
  47. Companyname string `json:"companyname"`
  48. Username string `json:"username"`
  49. Password string `json:"password"`
  50. Source string `json:"source"`
  51. }
  52. // @Title get
  53. // @Description get user by token
  54. // @Param uid path string true "The key for staticblock"
  55. // @Success 200 {object} models.User
  56. // @Failure 403 :uid is empty
  57. // @router /me [get]
  58. func (this *UserController) Get() {
  59. svc := userRole.GetUserService(utils.DBE)
  60. usermodel := svc.GetUserInfoSelf(this.User.Username)
  61. // var companyentity company.Base_Company
  62. // svc.GetEntityById(usermodel.AccCode, &companyentity)
  63. var user models.User
  64. user.Id = utils.ToStr(usermodel.Id)
  65. user.Username = usermodel.Username
  66. user.Profile.Address = usermodel.Homeaddress
  67. user.Profile.Email = usermodel.Email
  68. user.Profile.Realname = usermodel.Realname
  69. user.Profile.Roleid = usermodel.Roleid
  70. user.Profile.Mobile = usermodel.Mobile
  71. user.Profile.Telephone = usermodel.Telephone
  72. user.Profile.Photo = usermodel.Photo
  73. user.Profile.Description = usermodel.Description
  74. user.Profile.Host = this.Ctx.Request.Host
  75. user.Profile.AccCode = usermodel.AccCode
  76. user.Profile.DepartmentId = usermodel.Departmentid
  77. user.Profile.IsCompanyUser = usermodel.IsCompanyUser
  78. user.Profile.Superior = usermodel.Superior
  79. user.Profile.Id = usermodel.Id
  80. // todo 从this.User获取用户名,再查询出具体用户
  81. // user := models.User{"user01", "张三", models.Profile{Gender: "male", Age: 20, Address: "china", Email: "123zs@gmail.com", Realname: "ppppppp"}}
  82. this.Data["json"] = user
  83. this.ServeJSON()
  84. }
  85. // @Title 获取用户菜单权限
  86. // @Description 获取用户菜单权限
  87. // @Success 200 {object} controllers.Request
  88. // @router /getusermodule [get]
  89. func (this *UserController) GetUserModule() {
  90. //svc := permission.GetPermissionService(utils.DBE)
  91. //var model UserModuleModel
  92. //model.A1list = svc.GetModuleAllNamesByCode(this.User.Id, "A1")
  93. //model.A2list = svc.GetModuleAllNamesByCode(this.User.Id, "A2")
  94. //this.Data["json"] = model
  95. //this.ServeJSON()
  96. }
  97. // @Title 获取用户菜单权限
  98. // @Description 获取用户菜单权限
  99. // @Success 200 {object} controllers.Request
  100. // @router /getusermoduletree [get]
  101. func (this *UserController) GetUserModuleTree() {
  102. svc := permission.GetPermissionService(utils.DBE)
  103. list := svc.GetModuleAll(this.User.Id, "30000000")
  104. this.Data["json"] = list
  105. this.ServeJSON()
  106. }
  107. // @Title 获得用户角色id
  108. // @Description 获得用户角色id
  109. // @Success 200 {object} controllers.Request
  110. // @router /getuserrole/:id [get]
  111. func (this *UserController) UserPowerCheckRole() {
  112. userid := this.Ctx.Input.Param(":id")
  113. roleofuser := utils.RBAC.GetRolesForUserInDomain("uid_"+userid, utils.DOMAIN)
  114. for i := 0; i < len(roleofuser); i++ {
  115. roleofuser[i] = strings.Replace(roleofuser[i], "rid_", "", 1)
  116. }
  117. this.Data["json"] = &roleofuser
  118. this.ServeJSON()
  119. }
  120. // @Title get
  121. // @Description get user by token
  122. // @Success 200 {object} models.User
  123. // @router /list [get]
  124. func (this *UserController) List() {
  125. page := this.GetPageInfoForm()
  126. keyword := this.GetString("keyword")
  127. IsCompanyUser := this.GetString("IsCompanyUser")
  128. svc := permission.GetPermissionService(utils.DBE)
  129. var users []userRole.Base_User
  130. where := "IsVisible=1 and IsCompanyUser = 0 and CreateUserId='" + utils.ToStr(this.User.Id) + "' or Id = '" + utils.ToStr(this.User.Id) + "' "
  131. //外部用户 IsCompanyUser == 1
  132. if IsCompanyUser == "1" {
  133. where = "IsVisible=1 and IsCompanyUser = 1 and CreateUserId='" + utils.ToStr(this.User.Id) + "' or Id = '" + utils.ToStr(this.User.Id) + "' "
  134. }
  135. if keyword != "" {
  136. where = where + " and Realname like '%" + keyword + "%'"
  137. }
  138. total := svc.GetPagingEntitiesWithOrder(page.CurrentPage, page.Size, "Id", false, &users, where)
  139. var datainfo DataInfo
  140. datainfo.Items = users
  141. datainfo.CurrentItemCount = total
  142. this.Data["json"] = &datainfo
  143. this.ServeJSON()
  144. }
  145. // @Title 用户角色设置
  146. // @Description 用户角色设置
  147. // @Success 200 {object} controllers.Request
  148. // @router /setuserrole/:id [put]
  149. func (this *UserController) UserPowerPostRole() {
  150. inputstr := this.Ctx.Input.Param(":id")
  151. serial := strings.Split(inputstr, "_")
  152. userid := serial[0]
  153. var errinfo ErrorInfo
  154. if userid == "" || userid == "0" {
  155. errinfo.Message = "操作失败!请求信息不完整"
  156. errinfo.Code = -2
  157. this.Data["json"] = &errinfo
  158. this.ServeJSON()
  159. return
  160. }
  161. roleids := strings.Split(serial[1], ",")
  162. utils.RBAC.DeleteRolesForUser("uid_" + userid)
  163. var err error = nil
  164. for i := 0; i < len(roleids); i++ {
  165. if roleids[i] != "0" && roleids[i] != "" {
  166. //err = svc.AddUserToRole(userid, roleids[i], entity[0])
  167. utils.RBAC.AddRoleForUserInDomain("uid_"+userid, "rid_"+roleids[i], utils.DOMAIN)
  168. }
  169. }
  170. if err == nil {
  171. errinfo.Message = utils.AlertProcess("用户角色调整成功!")
  172. errinfo.Code = 0
  173. this.Data["json"] = &errinfo
  174. this.ServeJSON()
  175. } else {
  176. errinfo.Message = utils.AlertProcess("用户角色调整失败!" + err.Error())
  177. errinfo.Code = -1
  178. this.Data["json"] = &errinfo
  179. this.ServeJSON()
  180. }
  181. }
  182. // @Title 创建用户
  183. // @Description 创建用户
  184. // @Param body body business.device.DeviceChannels "传感器信息"
  185. // @Success 200 {object} controllers.Request
  186. // @router / [post]
  187. func (this *UserController) AddUser() {
  188. var model UserModel
  189. var jsonblob = this.Ctx.Input.RequestBody
  190. json.Unmarshal(jsonblob, &model)
  191. var errinfo ErrorDataInfo
  192. departidint, _ := utils.StrTo(model.DepartmentId).Int()
  193. if departidint < 1 {
  194. errinfo.Message = "请选择所属组织!"
  195. errinfo.Code = -3
  196. this.Data["json"] = &errinfo
  197. this.ServeJSON()
  198. return
  199. }
  200. // 获取组织名称
  201. svcorg := organize.GetOrganizeService(utils.DBE)
  202. model.DepartmentName = svcorg.GetNameById(model.DepartmentId)
  203. //获取组织上级组织
  204. //var orginizeentity organize.Base_Organize
  205. //svcorg.GetEntityById(model.DepartmentId, &orginizeentity)
  206. var userentity userRole.Base_User
  207. userentity.Superior = model.Superior
  208. userentity.Roleid, _ = utils.StrTo(model.Role).Int()
  209. if userentity.Roleid == 0 {
  210. //userentity.Roleid = 10000123 //普通用户
  211. }
  212. if model.IsCompanyUser == 1 {
  213. parameterSvc := baseparameter.GetBaseparameterService(utils.DBE) //取出外部门ID
  214. extOrganizeId := parameterSvc.GetBaseparameterMessage("GFGL", "paramset", "ExtRoleId")
  215. model.RoleId, _ = strconv.Atoi(extOrganizeId)
  216. userentity.Roleid = model.RoleId
  217. userentity.IsCompanyUser = model.IsCompanyUser
  218. }
  219. userentity.Username = model.Username
  220. userentity.Realname = model.Realname
  221. userentity.Telephone = model.Telephone
  222. userentity.Mobile = model.Mobile
  223. if model.Sign == "" {
  224. userentity.Description = model.Description
  225. } else {
  226. userentity.Description = model.Sign
  227. }
  228. userentity.Photo = model.Photo
  229. currentuser := this.User
  230. userentity.Createuserid, _ = utils.StrTo(currentuser.Id).Int()
  231. userentity.Createby = currentuser.Realname
  232. userentity.AccCode = this.GetAccode()
  233. userentity.QRCode = utils.GetGuid()
  234. userentity.Departmentid = model.DepartmentId
  235. userentity.Departmentname = model.DepartmentName
  236. //salt := utils.GetRandomString(5)
  237. //userentity.Userpassword = fmt.Sprintf("%s$%s", salt, utils.EncodePassword("123456", salt))
  238. //更改密码算法2014-11-21
  239. pwd, key, errrk := utils.TripleDesEncrypt("123456")
  240. if errrk != nil {
  241. errinfo.Message = "添加失败!" + utils.AlertProcess(errrk.Error())
  242. errinfo.Code = -2
  243. this.Data["json"] = &errinfo
  244. this.ServeJSON()
  245. return
  246. }
  247. userentity.Userpassword = pwd
  248. userentity.Publickey = key
  249. userentity.Auditstatus = 1
  250. userentity.Email = userentity.Username
  251. svc := userRole.GetUserService(utils.DBE)
  252. err := svc.AddUser(&userentity)
  253. if err == nil {
  254. errinfo.Message = "添加用户成功,初始密码为123456!"
  255. errinfo.Code = 0
  256. errinfo.Item = userentity.Id
  257. this.Data["json"] = &errinfo
  258. this.ServeJSON()
  259. return
  260. } else {
  261. errinfo.Message = "添加失败!" + utils.AlertProcess(err.Error())
  262. errinfo.Code = -1
  263. this.Data["json"] = &errinfo
  264. this.ServeJSON()
  265. return
  266. }
  267. }
  268. // @Title 编辑用户
  269. // @Description 编辑用户
  270. // @Param id path string true "需要修改的传感器编号"
  271. // @Param body body business.device.DeviceChannels "传感器信息"
  272. // @Success 200 {object} controllers.Request
  273. // @router /:id [put]
  274. func (this *UserController) EditUser() {
  275. id := this.Ctx.Input.Param(":id")
  276. var errinfo ErrorInfo
  277. if id == "" {
  278. errinfo.Message = "操作失败!请求信息不完整"
  279. errinfo.Code = -2
  280. this.Data["json"] = &errinfo
  281. this.ServeJSON()
  282. return
  283. }
  284. var model UserModel
  285. var jsonblob = this.Ctx.Input.RequestBody
  286. json.Unmarshal(jsonblob, &model)
  287. var userentity userRole.Base_User
  288. var userentityempty userRole.Base_User
  289. svc := userRole.GetUserService(utils.DBE)
  290. has := svc.GetEntityById(id, &userentity)
  291. if has {
  292. //获取组织名称
  293. svcorg := organize.GetOrganizeService(utils.DBE)
  294. model.DepartmentName = svcorg.GetNameById(model.DepartmentId)
  295. //获取组织上级组织
  296. //var orginizeentity organize.Base_Organize
  297. //svcorg.GetEntityById(model.DepartmentId, &orginizeentity)
  298. userentity.Superior = model.Superior
  299. userentity.Realname = model.Realname
  300. userentity.Telephone = model.Telephone
  301. userentity.Mobile = model.Mobile
  302. if model.Sign == "" {
  303. userentity.Description = model.Description
  304. } else {
  305. userentity.Description = model.Sign
  306. }
  307. userentity.Photo = model.Photo
  308. // userentity.Roleid = roleid
  309. userentity.Modifieduserid, _ = utils.StrTo(this.User.Id).Int()
  310. userentity.Modifiedby = this.User.Realname
  311. userentity.Departmentid = model.DepartmentId
  312. userentity.Departmentname = model.DepartmentName
  313. var cols []string = []string{"Realname", "CompanyId", "DepartmentId", "DepartmentName", "Telephone", "Mobile", "Description", "Photo", "Modifieduserid", "Modifiedby", "Superior"}
  314. err := svc.UpdateEntityAndBackupByCols(id, &userentity, &userentityempty, cols, utils.ToStr(this.User.Id), this.User.Realname)
  315. if err == nil {
  316. errinfo.Message = "保存成功!"
  317. errinfo.Code = 0
  318. this.Data["json"] = &errinfo
  319. this.ServeJSON()
  320. } else {
  321. errinfo.Message = "操作失败!" + utils.AlertProcess(err.Error())
  322. errinfo.Code = -1
  323. this.Data["json"] = &errinfo
  324. this.ServeJSON()
  325. }
  326. } else {
  327. errinfo.Message = "操作失败!操作数据不存在"
  328. errinfo.Code = -3
  329. this.Data["json"] = &errinfo
  330. this.ServeJSON()
  331. return
  332. }
  333. }
  334. // @Title 删除用户
  335. // @Description 删除用户
  336. // @Param id path string true "需要删除的用户编号"
  337. // @Success 200 {object} ErrorInfo
  338. // @Failure 403 :id 为空
  339. // @router /:id [delete]
  340. func (this *UserController) Delete() {
  341. id := this.Ctx.Input.Param(":id")
  342. var errinfo ErrorInfo
  343. if id == "" {
  344. errinfo.Message = "操作失败!请求信息不完整"
  345. errinfo.Code = -2
  346. this.Data["json"] = &errinfo
  347. this.ServeJSON()
  348. return
  349. }
  350. var entity userRole.Base_User
  351. var entityempty userRole.Base_User
  352. svc := userRole.GetUserService(utils.DBE)
  353. err := svc.DeleteEntityAndBackup(id, &entity, &entityempty, utils.ToStr(this.User.Id), this.User.Username)
  354. if err == nil {
  355. svc.ClearUserRole(id) //清除角色
  356. errinfo.Message = "删除成功"
  357. errinfo.Code = 0
  358. this.Data["json"] = &errinfo
  359. this.ServeJSON()
  360. } else {
  361. errinfo.Message = "删除失败!" + utils.AlertProcess(err.Error())
  362. errinfo.Code = -1
  363. this.Data["json"] = &errinfo
  364. this.ServeJSON()
  365. }
  366. }
  367. // @Title 修改密码
  368. // @Description 修改密码
  369. // @Param body body business.device.DeviceChannels "传感器信息"
  370. // @Success 200 {object} controllers.Request
  371. // @router /userchangepwd [put]
  372. func (this *UserController) UserChangePWD() {
  373. var model ChangePwdModel
  374. var jsonblob = this.Ctx.Input.RequestBody
  375. json.Unmarshal(jsonblob, &model)
  376. var errinfo ErrorInfo
  377. svcauth := auth.GetAuthServic(utils.DBE)
  378. var user userRole.Base_User
  379. if svcauth.VerifyUser3DES(this.User.Username, model.Pwd, &user) {
  380. var entitypaw1, entitypaw2 logsinfo.Userpassword
  381. idint, _ := utils.StrTo(this.User.Id).Int()
  382. var umodel userRole.Base_User = userRole.Base_User{Id: idint}
  383. svcauth.UpdateLog(this.User.Id, &entitypaw1, &entitypaw2, this.User.Id, this.User.Realname)
  384. err := svcauth.SetNewPassword3DES(&umodel, model.NwePwd)
  385. if err != nil {
  386. errinfo.Message = "修改失败!" + err.Error()
  387. errinfo.Code = -2
  388. this.Data["json"] = &errinfo
  389. this.ServeJSON()
  390. } else {
  391. errinfo.Message = "密码修改成功"
  392. errinfo.Code = 0
  393. this.Data["json"] = &errinfo
  394. this.ServeJSON()
  395. }
  396. } else {
  397. errinfo.Message = "修改失败!当前密码输入错误"
  398. errinfo.Code = -1
  399. this.Data["json"] = &errinfo
  400. this.ServeJSON()
  401. return
  402. }
  403. }
  404. // @Title 注册管理账号
  405. // @Description 注册管理账号
  406. // @Param body body business.device.DeviceChannels "传感器信息"
  407. // @Success 200 {object} controllers.Request
  408. // @router /registemanage [put]
  409. func (this *UserController) Registerput() {
  410. var model RegisteModel
  411. var jsonblob = this.Ctx.Input.RequestBody
  412. json.Unmarshal(jsonblob, &model)
  413. var errinfo ErrorInfo
  414. var user userRole.Base_User
  415. user.Username = model.Username
  416. user.Realname = model.Companyname
  417. // this.ParseForm(&user) //去页面数值
  418. svc := company.GetCompanyService(utils.DBE)
  419. err, comacccode := svc.AddCompany(user.Realname, user.Username) //这两个参数传到company库,返回id
  420. if err == nil {
  421. svcuser := userRole.GetUserService(utils.DBE)
  422. user.AccCode = comacccode //id传到 user库的acccode
  423. pass := model.Password //取到前台密码
  424. //更改密码算法2014-11-21
  425. pwd, key, errrk := utils.TripleDesEncrypt(pass)
  426. if errrk != nil {
  427. errinfo.Message = "添加失败!" + utils.AlertProcess(errrk.Error())
  428. errinfo.Code = -2
  429. this.Data["json"] = &errinfo
  430. this.ServeJSON()
  431. return
  432. }
  433. user.Roleid = 10000120 //企业用户
  434. user.Auditstatus = 1
  435. user.Userpassword = pwd
  436. user.Publickey = key
  437. user.Email = user.Username
  438. err = svcuser.AddUser(&user)
  439. //svcSampleOrgan := sampleorgan.GetSampleOrganService(utils.DBE)
  440. //var entityOrgan sampleorgan.SampleOrgan
  441. //entityOrgan.AccCode = comacccode
  442. //entityOrgan.TNode = "SystemInner"
  443. //entityOrgan.TNodeParent = "0"
  444. //entityOrgan.Item = 1
  445. //entityOrgan.Code = "ALL"
  446. //entityOrgan.Name = "全部"
  447. //entityOrgan.CreateBy = user.Username
  448. //entityOrgan.CreateUserId = user.Id
  449. //_, err = svcSampleOrgan.InsertEntity(&entityOrgan)
  450. svcPrintScheme := printscheme.GetPrintSchemeService(utils.DBE)
  451. var listPrintScheme []printscheme.PrintScheme
  452. var listPrintScheme_new []printscheme.PrintScheme
  453. listPrintScheme = svcPrintScheme.GetPrintSchemeList("IsSystem=2")
  454. for i := 0; i < len(listPrintScheme); i++ {
  455. listPrintScheme[i].IsSystem = 1
  456. listPrintScheme[i].CreateBy = user.Username
  457. listPrintScheme[i].CreateUserId = user.Id
  458. listPrintScheme[i].AccCode = user.AccCode
  459. listPrintScheme_new = append(listPrintScheme_new, listPrintScheme[i])
  460. }
  461. svc.InsertEntity(&listPrintScheme_new)
  462. if err == nil {
  463. //创建表结构
  464. err := svc.CreateSampleDonorTable(user.AccCode, model.Source)
  465. if err != nil {
  466. fmt.Println(err.Error())
  467. }
  468. //写入账户信息,赠送短信
  469. var accountinfo accountinfo.AccountInfo
  470. accountinfo.ProjectSourse = "biobank"
  471. accountinfo.ProjectAccount = user.AccCode
  472. accountinfo.ProjectAccountName = user.Realname
  473. accountinfo.SurplusCount = 50
  474. accountinfo.ActionType = "sms"
  475. u, p := this.GetuAndp()
  476. strUrl := utils.Cfg.MustValue("server", "apiurl") + "/accountinfos/?u=" + u + "&p=" + p
  477. Apipost(strUrl, "POST", accountinfo)
  478. //添加一条组织根节点
  479. var entityorg organize.Base_Organize
  480. // 编辑后添加一条数据
  481. entityorg.Fullname = model.Companyname
  482. entityorg.Parentid = 0
  483. entityorg.Createuserid = user.Id
  484. entityorg.Createby = user.Realname
  485. entityorg.AccCode = user.AccCode
  486. svcuser.InsertEntity(&entityorg)
  487. //修改用户的组织id
  488. user.Departmentid = utils.ToStr(entityorg.Id)
  489. user.Departmentname = entityorg.Fullname
  490. var usercols []string = []string{"Departmentid", "Departmentname"}
  491. svcuser.UpdateEntityByIdCols(user.Id, &user, usercols)
  492. errinfo.Message = "注册用户成功!"
  493. errinfo.Code = 0
  494. this.Data["json"] = &errinfo
  495. this.ServeJSON()
  496. } else {
  497. errinfo.Message = "注册失败!" + utils.AlertProcess(err.Error())
  498. errinfo.Code = -2
  499. this.Data["json"] = &errinfo
  500. this.ServeJSON()
  501. return
  502. }
  503. } else {
  504. errinfo.Message = "注册失败!" + utils.AlertProcess(err.Error())
  505. errinfo.Code = -3
  506. this.Data["json"] = &errinfo
  507. this.ServeJSON()
  508. return
  509. }
  510. }