project_account_service.go 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306
  1. /*
  2. * @description:项目用户相关数据处理
  3. * @Author: CP
  4. * @Date: 2020-08-27 17:23:58
  5. * @FilePath: \construction_management\services\project_account_service.go
  6. */
  7. package services
  8. import (
  9. "errors"
  10. "html"
  11. "log"
  12. "strconv"
  13. "strings"
  14. "time"
  15. "github.com/kataras/iris/v12"
  16. "go.mod/comm"
  17. "go.mod/models"
  18. "go.mod/web/utils"
  19. "go.mod/web/viewmodels"
  20. "go.mod/dao"
  21. "go.mod/datasource"
  22. )
  23. //定义项目用户Service接口
  24. type ProjectAccountService interface {
  25. ValidRule(ctx iris.Context) (viewmodels.ProjectAccount, error)
  26. ValidRulePermission(ctx iris.Context) (viewmodels.Permission, error)
  27. Get(accountId int, projectId int) *viewmodels.ProjectAccount
  28. GetAll(projectId int) []viewmodels.ProjectAccount
  29. GetBidAccount(bidsectionId int, projectId int, projectAccountId int) []viewmodels.ProjectAccount
  30. Search(name string, projectId int) []viewmodels.ProjectAccount
  31. Add(viewAccount viewmodels.ProjectAccount, projectId int) error
  32. Save(viewAccount viewmodels.ProjectAccount, id int, projectId int) error
  33. Enable(id int, projectId int, enable int) error
  34. ChangeAccount(id int, projectId int, viewAccount viewmodels.ProjectAccount) error
  35. GetProjectInfo(id int) (viewmodels.ProjectInfo, error)
  36. Delete(id int, projectId int) error
  37. SaveAuth(permission viewmodels.Permission, projectId int) error
  38. }
  39. //返回service操作类
  40. type projectAccountService struct {
  41. dao *dao.ProjectAccountDao
  42. bidAccountDao *dao.BidAccountDao
  43. validSave string
  44. validAdd string
  45. validPassword string
  46. }
  47. //创建项目用户service
  48. func NewProjectAccountService() ProjectAccountService {
  49. return &projectAccountService{
  50. dao: dao.NewProjectAccountDao(datasource.InstanceDbMaster()),
  51. bidAccountDao: dao.NewBidAccountDao(datasource.InstanceDbMaster()),
  52. validSave: "/api/projectSetting/account/save",
  53. validAdd: "/api/projectSetting/account/create",
  54. validPassword: "/api/projectSetting/account/change",
  55. }
  56. }
  57. // 用户规则验证
  58. func (s *projectAccountService) ValidRule(ctx iris.Context) (viewmodels.ProjectAccount, error) {
  59. accountVaild := viewmodels.ProjectAccount{}
  60. err := ctx.ReadJSON(&accountVaild)
  61. if err != nil {
  62. log.Println("account-ValidRule-ReadForm转换异常, error=", err)
  63. return accountVaild, err
  64. }
  65. if ctx.Path() == s.validAdd {
  66. err = accountVaild.Validate()
  67. } else if ctx.Path() == s.validSave {
  68. err = accountVaild.ValidateUpdate()
  69. } else if ctx.Path() == s.validPassword {
  70. err = accountVaild.ValidatePassword()
  71. } else {
  72. log.Println("请求路径找不到对应的验证规则")
  73. return accountVaild, errors.New("验证错误-未找到验证规则")
  74. }
  75. if err != nil {
  76. log.Println("用户验证, error=", err)
  77. return accountVaild, err
  78. }
  79. // 验证账号组
  80. if ctx.Path() != s.validPassword {
  81. accountGroup := comm.NewAccountGroup()
  82. err = accountGroup.ValidRule(accountVaild.AccountGroup)
  83. if err != nil {
  84. log.Println("用户验证, error=", err)
  85. return accountVaild, err
  86. }
  87. }
  88. // xss
  89. accountVaild.Account = html.EscapeString(accountVaild.Account)
  90. accountVaild.Password = html.EscapeString(accountVaild.Password)
  91. accountVaild.Name = html.EscapeString(accountVaild.Name)
  92. accountVaild.Company = html.EscapeString(accountVaild.Company)
  93. accountVaild.Position = html.EscapeString(accountVaild.Position)
  94. accountVaild.Mobile = html.EscapeString(accountVaild.Mobile)
  95. accountVaild.Telephone = html.EscapeString(accountVaild.Telephone)
  96. return accountVaild, nil
  97. }
  98. // 用户规则验证
  99. func (s *projectAccountService) ValidRulePermission(ctx iris.Context) (viewmodels.Permission, error) {
  100. accountVaild := viewmodels.Permission{}
  101. err := ctx.ReadJSON(&accountVaild)
  102. if err != nil {
  103. log.Println("account-ValidRule-ReadForm转换异常, error=", err)
  104. return accountVaild, err
  105. }
  106. err = accountVaild.Validate()
  107. if err != nil {
  108. log.Println("权限验证, error=", err)
  109. return accountVaild, err
  110. }
  111. return accountVaild, nil
  112. }
  113. // 获得一个项目用户
  114. func (s *projectAccountService) Get(id int, projectId int) *viewmodels.ProjectAccount {
  115. modelsAccount := s.dao.Get(id, projectId)
  116. viewAccountData := viewmodels.ProjectAccount{}
  117. if modelsAccount.Id == 0 {
  118. viewAccountData.Id = "0"
  119. return &viewAccountData
  120. }
  121. viewAccountData = comm.MakeProjectAccountVM(modelsAccount)
  122. return &viewAccountData
  123. }
  124. // 获得项目下所有账号信息
  125. func (s *projectAccountService) GetAll(projectId int) []viewmodels.ProjectAccount {
  126. accountList := s.dao.GetAll(projectId)
  127. accountListVM := make([]viewmodels.ProjectAccount, 0)
  128. for _, data := range accountList {
  129. //if data.IsAdmin != 1 {
  130. account := comm.MakeProjectAccountVM(&data)
  131. accountListVM = append(accountListVM, account)
  132. //}
  133. }
  134. return accountListVM
  135. }
  136. // 获得标段下的账号
  137. func (s *projectAccountService) GetBidAccount(bidsectionId int, projectId int, projectAccountId int) []viewmodels.ProjectAccount {
  138. // 1.获得标段账号ID
  139. bidAccountData := s.bidAccountDao.GetBidAccount(bidsectionId, projectId)
  140. // 组合账号ID集合
  141. idList := []string{}
  142. // 管理员账号-可能不必要
  143. // idList = append(idList, strconv.Itoa(projectAccountId))
  144. for _, item := range bidAccountData {
  145. idList = append(idList, strconv.Itoa(item.BidsectionId))
  146. }
  147. inId := strings.Join(idList, ",")
  148. // 获得账号信息
  149. accountData := s.dao.GetInId(inId)
  150. // 格式化账号数据
  151. accountListVM := make([]viewmodels.ProjectAccount, 0)
  152. for _, data := range accountData {
  153. account := comm.MakeProjectAccountVM(&data)
  154. accountListVM = append(accountListVM, account)
  155. }
  156. return accountListVM
  157. }
  158. // 检索 账号姓名单位手机
  159. func (s *projectAccountService) Search(name string, projectId int) []viewmodels.ProjectAccount {
  160. accountList := s.dao.Search(name, projectId)
  161. accountListVM := make([]viewmodels.ProjectAccount, 0)
  162. for _, data := range accountList {
  163. account := comm.MakeProjectAccountVM(&data)
  164. accountListVM = append(accountListVM, account)
  165. }
  166. return accountListVM
  167. }
  168. // 新增账号
  169. func (s *projectAccountService) Add(viewAccount viewmodels.ProjectAccount, projectId int) error {
  170. // 验证该项目下是否有同名账号
  171. accountValid := s.dao.GetAccount(viewAccount.Account)
  172. if accountValid.Id != 0 {
  173. return errors.New("已存在相同的账号")
  174. }
  175. account := models.CmProjectAccount{}
  176. account.ProjectId = projectId
  177. account.Account = viewAccount.Account
  178. account.Password = comm.CreatePasswordSign(viewAccount.Password, viewAccount.Account)
  179. account.Name = viewAccount.Name
  180. account.Company = viewAccount.Company
  181. account.Position = viewAccount.Position
  182. account.Mobile = viewAccount.Mobile
  183. account.Telephone = viewAccount.Telephone
  184. account.AccountGroup = viewAccount.AccountGroup
  185. account.CreateTime = time.Now()
  186. err := s.dao.Add(&account)
  187. return err
  188. }
  189. // 保存用户信息
  190. func (s *projectAccountService) Save(viewAccount viewmodels.ProjectAccount, id int, projectId int) error {
  191. account := models.CmProjectAccount{}
  192. account.Id = id
  193. account.ProjectId = projectId
  194. account.Name = viewAccount.Name
  195. account.Company = viewAccount.Company
  196. account.Position = viewAccount.Position
  197. //account.Mobile = viewAccount.Mobile
  198. account.Telephone = viewAccount.Telephone
  199. account.AccountGroup = viewAccount.AccountGroup
  200. err := s.dao.Update(&account, []string{"Name", "Company", "Position", "Telephone", "AccountGroup"})
  201. return err
  202. }
  203. // 设置启用/禁止
  204. func (s *projectAccountService) Enable(id int, projectId int, enable int) error {
  205. account := models.CmProjectAccount{}
  206. account.Id = id
  207. account.ProjectId = projectId
  208. account.Enable = enable
  209. err := s.dao.Update(&account, []string{"Enable"})
  210. return err
  211. }
  212. // 删除账号
  213. func (s *projectAccountService) Delete(id int, projectId int) error {
  214. account := models.CmProjectAccount{}
  215. account.Id = id
  216. account.ProjectId = projectId
  217. err := s.dao.Delete(&account)
  218. return err
  219. }
  220. // 更改账号或者密码
  221. func (s *projectAccountService) ChangeAccount(id int, projectId int, viewAccount viewmodels.ProjectAccount) error {
  222. // 1.是否修改账号
  223. field := []string{"Password"}
  224. account := models.CmProjectAccount{}
  225. account.Id = id
  226. account.ProjectId = projectId
  227. // 2.修改密码
  228. account.Password = comm.CreatePasswordSign(viewAccount.Password, viewAccount.Account)
  229. accountData := s.dao.Get(id, projectId)
  230. if accountData.Account != viewAccount.Account {
  231. account.Account = viewAccount.Account
  232. field = append(field, "Account")
  233. }
  234. // 3.发送短信-TODO
  235. utils.SendSMS()
  236. s.dao.Update(&account, field)
  237. return nil
  238. }
  239. func (s *projectAccountService) GetProjectInfo(id int) (viewmodels.ProjectInfo, error) {
  240. projectInfo, err := s.dao.FindById(id)
  241. return projectInfo, err
  242. }
  243. // 保存权限设置
  244. func (s *projectAccountService) SaveAuth(permission viewmodels.Permission, projectId int) error {
  245. // 1.构造权限字符串
  246. // contractPermission := map[string]int{
  247. // "add": permission.ContractAdd,
  248. // "delete": permission.ContractDelete,
  249. // "access": permission.ContractAccess,
  250. // }
  251. // safePermission := map[string]int{
  252. // "add": permission.SafeAdd,
  253. // "delete": permission.SafeDelete,
  254. // "access": permission.SafeAccess,
  255. // }
  256. // qualityPermission := map[string]int{
  257. // "add": permission.QualityAdd,
  258. // "delete": permission.QualityDelete,
  259. // "access": permission.QualityAccess,
  260. // }
  261. return nil
  262. }