userapi.go 12 KB

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