userapi.go 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452
  1. // 模块模型操作接口-用户
  2. // 秒寻科技
  3. // zt 2024-01-04
  4. package userapi
  5. import (
  6. "errors"
  7. "ipsomc/core/company/companymodel"
  8. "ipsomc/core/dao/mysql/mysqlapi"
  9. "ipsomc/core/dao/mysql/mysqlmodel"
  10. "ipsomc/core/dbtable/dbtableapi"
  11. "ipsomc/core/user/usermodel"
  12. "ipsomc/util"
  13. "strconv"
  14. "strings"
  15. "github.com/jinzhu/gorm"
  16. )
  17. type UserApi struct {
  18. MySqlApi mysqlapi.MySqlApi
  19. dbTableApi dbtableapi.DbTableApi
  20. }
  21. // 检查用户是否已经注册
  22. func (obj *UserApi) CheckOperatorRegister(dataModel *usermodel.Operator) error {
  23. companyModel := new(companymodel.Company)
  24. ciphertext, err := util.EncryptAes([]byte(dataModel.Password)) //加密用户密码
  25. if err != nil {
  26. return err
  27. }
  28. if err := obj.MySqlApi.GetDb().Where("user_name=? and password=?", dataModel.UserName, ciphertext).First(dataModel).Error; err != nil {
  29. return err
  30. }
  31. if dataModel.ID <= 0 {
  32. return errors.New("登录失败,请先注册")
  33. }
  34. //获得公司名称
  35. if dataModel.CompanyID > 0 {
  36. if err := obj.MySqlApi.GetDb().Model(companyModel).Where("id=?", dataModel.CompanyID).First(companyModel).Error; err != nil {
  37. return err
  38. }
  39. dataModel.CompanyName = companyModel.Name
  40. } else {
  41. dataModel.CompanyName = "杭州秒寻科技有限公司"
  42. }
  43. return nil
  44. }
  45. // 系统管理员查重
  46. func (obj *UserApi) CheckOperatorName(userName string) error {
  47. var count uint
  48. dataModel := new(usermodel.Operator)
  49. if err := obj.MySqlApi.GetDb().Model(dataModel).Where("user_name=?", userName).Count(&count).Error; err != nil {
  50. return err
  51. }
  52. if count > 0 {
  53. return errors.New("该用户名已经存在")
  54. }
  55. return nil
  56. }
  57. // 增加操作员
  58. func (obj *UserApi) AddOperator(dataModel *usermodel.Operator) error {
  59. var count uint
  60. //查重
  61. if err := obj.MySqlApi.GetDb().Model(dataModel).Where("user_name=?", dataModel.UserName).Count(&count).Error; err != nil {
  62. return err
  63. }
  64. if count > 0 {
  65. return errors.New("新增失败,该用户名已存在")
  66. }
  67. //用户密码加密
  68. ciphertext, err := util.EncryptAes([]byte(dataModel.Password))
  69. if err != nil {
  70. return err
  71. }
  72. dataModel.Password = ciphertext
  73. dataModel.UserTypeID = 3 //项目管理员
  74. //保存数据
  75. if err := obj.MySqlApi.AddItem(dataModel); err != nil {
  76. return errors.New("新增失败,数据库操作失败")
  77. }
  78. return nil
  79. }
  80. // 修改
  81. func (obj *UserApi) UpdateOperator(dataModel *usermodel.Operator, dataMap map[string]interface{}) error {
  82. var count uint
  83. var tmpModel usermodel.Operator
  84. //查重
  85. if err := obj.MySqlApi.GetDb().Model(&tmpModel).Where("id<>? and user_name=?", dataModel.ID, dataModel.UserName).Count(&count).Error; err != nil {
  86. return err
  87. }
  88. if count > 0 {
  89. return errors.New("该用户已经存在")
  90. }
  91. if err := obj.MySqlApi.UpdateItem(dataModel, dataMap); err != nil {
  92. return err
  93. }
  94. return nil
  95. }
  96. // 修改密码
  97. func (obj *UserApi) UpdateOperatorPwd(dataModel *usermodel.Operator, dataMap map[string]interface{}) error {
  98. operatorModel := new(usermodel.Operator)
  99. db := obj.MySqlApi.GetDb()
  100. if err := db.Model(operatorModel).Where("id=?", dataModel.OwnerID).First(operatorModel).Error; err != nil {
  101. return err
  102. }
  103. //检查原密码是否正确
  104. ciphertextOld, err := util.EncryptAes([]byte(dataModel.Password))
  105. if err != nil {
  106. return err
  107. }
  108. if ciphertextOld != operatorModel.Password {
  109. return errors.New("输入的以前密码不正确")
  110. }
  111. //加密新改密码
  112. ciphertextNew, err := util.EncryptAes([]byte(dataModel.NewPassword))
  113. if err != nil {
  114. return err
  115. }
  116. //修改密码
  117. if err := db.Model(operatorModel).Update("password", ciphertextNew).Error; err != nil {
  118. return err
  119. }
  120. return nil
  121. }
  122. // 重置密码
  123. func (obj *UserApi) ResetOperatorPwd(dataModel *usermodel.Operator) error {
  124. randomStr := util.GenRandomString(6) //生成6位随机密码
  125. ciphertext, err := util.EncryptAes([]byte(randomStr)) //对新密码进行加密
  126. if err != nil {
  127. return err
  128. }
  129. //修改密码
  130. if err := obj.MySqlApi.GetDb().Model(dataModel).Where("id=?", dataModel.ID).Update("password", ciphertext).Error; err != nil {
  131. return err
  132. }
  133. //将新改密码返回
  134. dataModel.Password = randomStr
  135. return nil
  136. }
  137. // 删除
  138. func (obj *UserApi) DeleteOperator(dataModel *usermodel.Operator) error {
  139. if err := obj.MySqlApi.DeleteItem(dataModel); err != nil {
  140. return errors.New("删除记录失败")
  141. }
  142. return nil
  143. }
  144. // 查询单条记录
  145. func (obj *UserApi) GetOperatorById(dataModel *usermodel.Operator) error {
  146. if err := obj.MySqlApi.GetItemByID(dataModel); err != nil {
  147. return errors.New("查询记录失败")
  148. }
  149. dataModel.Password = "******" //密码脱敏
  150. return nil
  151. }
  152. // 分页查询记录
  153. func (obj *UserApi) GetOperatorPageList(dataModel *usermodel.Operator, pageListParam *mysqlmodel.PageListParam, dataList interface{}) (mysqlmodel.PageListData, error) {
  154. pageListData, err := obj.MySqlApi.GetPageItemList(dataModel, pageListParam, dataList)
  155. if err != nil {
  156. return pageListData, err
  157. }
  158. return pageListData, nil
  159. }
  160. // 获得用户角色列表
  161. func (obj *UserApi) GetOperatorRoleList(dataModel *usermodel.Operator) ([]int, error) {
  162. roleList := make([]int, 0)
  163. //获得用户数据
  164. dataModel.ID = int(dataModel.OwnerID)
  165. if err := obj.MySqlApi.GetItemByID(dataModel); err != nil {
  166. return roleList, err
  167. }
  168. roleStrList := strings.Split(dataModel.Role, ",")
  169. for _, v := range roleStrList {
  170. roleId, _ := strconv.Atoi(v)
  171. roleList = append(roleList, roleId)
  172. }
  173. return roleList, nil
  174. }
  175. // 获得用户权限列表
  176. func (obj *UserApi) GetOperatorPermissionList(roleIdList []int) (usermodel.RspOperatorPermission, error) {
  177. var tmpModel usermodel.Role
  178. roleList := []usermodel.Role{}
  179. idTmpList := make([]int, 0)
  180. idList := make([]int, 0)
  181. var pmsModel usermodel.Permission
  182. permissionListList := []usermodel.Permission{}
  183. var resPermission usermodel.RspOperatorPermission
  184. //获得角色记录
  185. if err := obj.MySqlApi.GetDb().Model(&tmpModel).Where("id in (?)", roleIdList).Scan(&roleList).Error; err != nil {
  186. return resPermission, err
  187. }
  188. //遍历列表,组织权限列表
  189. for _, v := range roleList {
  190. permissionStrList := strings.Split(v.Permission, ",")
  191. for _, strId := range permissionStrList {
  192. id, _ := strconv.Atoi(strId)
  193. idTmpList = append(idTmpList, id)
  194. }
  195. }
  196. //过滤重复的权限ID
  197. isExist := false
  198. for _, v := range idTmpList {
  199. isExist = false
  200. for _, id := range idList {
  201. if v == id {
  202. isExist = true
  203. break
  204. }
  205. }
  206. if !isExist {
  207. idList = append(idList, v)
  208. }
  209. }
  210. //获得权限记录
  211. if err := obj.MySqlApi.GetDb().Model(&pmsModel).Where("id in (?)", idList).Scan(&permissionListList).Error; err != nil {
  212. return resPermission, err
  213. }
  214. //组织菜单和按钮权限
  215. for _, v := range permissionListList {
  216. var item usermodel.MenuBtnPermission
  217. item.Pid = v.Pid
  218. item.TypeID = v.TypeID
  219. item.Name = v.Name
  220. item.Flag = v.Flag
  221. if v.TypeID == 1 {
  222. resPermission.Menus = append(resPermission.Menus, item)
  223. } else {
  224. resPermission.Btns = append(resPermission.Btns, item)
  225. }
  226. }
  227. return resPermission, nil
  228. }
  229. // 获得公司系统管理员,每家公司只有一个系统管理员
  230. func (obj *UserApi) GetSysOperatorByCompanyId(companyId int) (*usermodel.Operator, error) {
  231. operatorModel := new(usermodel.Operator)
  232. //获得系统操作员
  233. if err := obj.MySqlApi.GetDb().Model(operatorModel).Where("company_id=? and user_type_id=2", companyId).First(operatorModel).Error; err != nil {
  234. if err != gorm.ErrRecordNotFound {
  235. return operatorModel, err
  236. }
  237. }
  238. //密码脱敏
  239. if len(operatorModel.Password) > 0 {
  240. operatorModel.Password = "******"
  241. }
  242. return operatorModel, nil
  243. }
  244. /**************************************上面是操作员接口***************************************/
  245. /**************************************下面管理角色接口***************************************/
  246. // 增加操作员
  247. func (obj *UserApi) AddRole(dataModel *usermodel.Role) error {
  248. var count uint
  249. //查重
  250. if err := obj.MySqlApi.GetDb().Model(dataModel).Where("company_id=? and name=?", dataModel.CompanyID, dataModel.Name).Count(&count).Error; err != nil {
  251. return err
  252. }
  253. if count > 0 {
  254. return errors.New("该角色已存在")
  255. }
  256. //保存数据
  257. if err := obj.MySqlApi.AddItem(dataModel); err != nil {
  258. return errors.New("数据库操作失败")
  259. }
  260. return nil
  261. }
  262. // 修改
  263. func (obj *UserApi) UpdateRole(dataModel *usermodel.Role, dataMap map[string]interface{}) error {
  264. var count uint
  265. var tmpModel usermodel.Role
  266. //查重
  267. if err := obj.MySqlApi.GetDb().Model(&tmpModel).Where("id<>? and company_id=? and name=?", dataModel.ID, dataModel.CompanyID, dataModel.Name).Count(&count).Error; err != nil {
  268. return err
  269. }
  270. if count > 0 {
  271. return errors.New("该角色已存在")
  272. }
  273. if err := obj.MySqlApi.UpdateItem(dataModel, dataMap); err != nil {
  274. return err
  275. }
  276. return nil
  277. }
  278. // 删除
  279. func (obj *UserApi) DeleteRole(dataModel *usermodel.Role) error {
  280. if err := obj.MySqlApi.DeleteItem(dataModel); err != nil {
  281. return errors.New("删除记录失败")
  282. }
  283. return nil
  284. }
  285. // 查询单条记录
  286. func (obj *UserApi) GetRoleId(dataModel *usermodel.Role) error {
  287. if err := obj.MySqlApi.GetItemByID(dataModel); err != nil {
  288. return errors.New("查询记录失败")
  289. }
  290. return nil
  291. }
  292. // 分页查询记录
  293. func (obj *UserApi) GetRolePageList(dataModel *usermodel.Role, pageListParam *mysqlmodel.PageListParam, dataList interface{}) (mysqlmodel.PageListData, error) {
  294. pageListData, err := obj.MySqlApi.GetPageItemList(dataModel, pageListParam, dataList)
  295. if err != nil {
  296. return pageListData, err
  297. }
  298. return pageListData, nil
  299. }
  300. /**************************************上面管理角色接口***************************************/
  301. /**************************************下面管理权限接口***************************************/
  302. // 增加操作员
  303. func (obj *UserApi) AddPermission(dataModel *usermodel.Permission) error {
  304. var count uint
  305. //查重
  306. if err := obj.MySqlApi.GetDb().Model(dataModel).Where("flag=?", dataModel.Flag).Count(&count).Error; err != nil {
  307. return err
  308. }
  309. if count > 0 {
  310. return errors.New("该权限已存在")
  311. }
  312. //保存数据
  313. if err := obj.MySqlApi.AddItem(dataModel); err != nil {
  314. return errors.New("数据库操作失败")
  315. }
  316. return nil
  317. }
  318. // 修改
  319. func (obj *UserApi) UpdatePermission(dataModel *usermodel.Permission, dataMap map[string]interface{}) error {
  320. var count uint
  321. var tmpModel usermodel.Permission
  322. //查重
  323. if err := obj.MySqlApi.GetDb().Model(&tmpModel).Where("id<>? and company_id=? and pid=? and flag=?", dataModel.ID, dataModel.CompanyID, dataModel.Pid, dataModel.Flag).Count(&count).Error; err != nil {
  324. return err
  325. }
  326. if count > 0 {
  327. return errors.New("该权限已存在")
  328. }
  329. if err := obj.MySqlApi.UpdateItem(dataModel, dataMap); err != nil {
  330. return err
  331. }
  332. return nil
  333. }
  334. // 删除
  335. func (obj *UserApi) DeletePermission(dataModel *usermodel.Permission) error {
  336. if err := obj.MySqlApi.DeleteItem(dataModel); err != nil {
  337. return errors.New("删除记录失败")
  338. }
  339. return nil
  340. }
  341. // 查询单条记录
  342. func (obj *UserApi) GetPermissionId(dataModel *usermodel.Permission) error {
  343. if err := obj.MySqlApi.GetItemByID(dataModel); err != nil {
  344. return errors.New("查询记录失败")
  345. }
  346. return nil
  347. }
  348. // 查询记录
  349. func (obj *UserApi) GetPermissionList(dataModel *usermodel.Permission) ([]usermodel.Permission, error) {
  350. dataList := []usermodel.Permission{}
  351. operatorModel := new(usermodel.Operator)
  352. operatorModel.ID = int(dataModel.OwnerID)
  353. blackList := obj.dbTableApi.GetBlackPageList()
  354. //获得当前用户的类型
  355. if err := obj.GetOperatorById(operatorModel); err != nil {
  356. return dataList, err
  357. }
  358. //操作员是平台管理员
  359. if operatorModel.UserTypeID == 1 {
  360. //查询系统所有权限
  361. if err := obj.MySqlApi.GetDb().Model(dataModel).Where("company_id=0").Scan(&dataList).Error; err != nil {
  362. return dataList, err
  363. }
  364. } else {
  365. if err := obj.MySqlApi.GetDb().Model(dataModel).Where("flag not in (?)", blackList).Scan(&dataList).Error; err != nil {
  366. return dataList, err
  367. }
  368. }
  369. return dataList, nil
  370. }
  371. // 分页查询记录
  372. func (obj *UserApi) GetPermissionPageList(dataModel *usermodel.Permission, pageListParam *mysqlmodel.PageListParam, dataList interface{}) (mysqlmodel.PageListData, error) {
  373. pageListData, err := obj.MySqlApi.GetPageItemList(dataModel, pageListParam, dataList)
  374. if err != nil {
  375. return pageListData, err
  376. }
  377. return pageListData, nil
  378. }