project_account_service.go 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255
  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. Get(accountId int, projectId int) *viewmodels.ProjectAccount
  27. GetAll(projectId int) []viewmodels.ProjectAccount
  28. GetBidAccount(bidsectionId int, projectId int, projectAccountId int) []viewmodels.ProjectAccount
  29. Search(name string, projectId int) []viewmodels.ProjectAccount
  30. Add(viewAccount viewmodels.ProjectAccount, projectId int) error
  31. Save(viewAccount viewmodels.ProjectAccount, id int, projectId int) error
  32. Enable(id int, projectId int, enable int) error
  33. ChangeAccount(id int, projectId int, viewAccount viewmodels.ProjectAccount) error
  34. Delete(id int, projectId int) error
  35. }
  36. //返回service操作类
  37. type projectAccountService struct {
  38. dao *dao.ProjectAccountDao
  39. bidAccountDao *dao.BidAccountDao
  40. validSave string
  41. validAdd string
  42. validPassword string
  43. }
  44. //创建项目用户service
  45. func NewProjectAccountService() ProjectAccountService {
  46. return &projectAccountService{
  47. dao: dao.NewProjectAccountDao(datasource.InstanceDbMaster()),
  48. bidAccountDao: dao.NewBidAccountDao(datasource.InstanceDbMaster()),
  49. validSave: "/api/projectSetting/account/save",
  50. validAdd: "/api/projectSetting/account/add",
  51. validPassword: "/api/projectSetting/account/change",
  52. }
  53. }
  54. // 用户规则验证
  55. func (s *projectAccountService) ValidRule(ctx iris.Context) (viewmodels.ProjectAccount, error) {
  56. accountVaild := viewmodels.ProjectAccount{}
  57. err := ctx.ReadJSON(&accountVaild)
  58. if err != nil {
  59. log.Println("account-ValidRule-ReadForm转换异常, error=", err)
  60. return accountVaild, err
  61. }
  62. if ctx.Path() == s.validAdd {
  63. err = accountVaild.Validate()
  64. } else if ctx.Path() == s.validSave {
  65. err = accountVaild.ValidateUpdate()
  66. } else if ctx.Path() == s.validPassword {
  67. err = accountVaild.ValidatePassword()
  68. } else {
  69. return accountVaild, errors.New("验证错误")
  70. }
  71. if err != nil {
  72. log.Println("用户验证, error=", err)
  73. return accountVaild, err
  74. }
  75. // 验证账号组
  76. if ctx.Path() != s.validPassword {
  77. accountGroup := comm.NewAccountGroup()
  78. err = accountGroup.ValidRule(accountVaild.AccountGroup)
  79. if err != nil {
  80. log.Println("用户验证, error=", err)
  81. return accountVaild, err
  82. }
  83. }
  84. // xss
  85. accountVaild.Account = html.EscapeString(accountVaild.Account)
  86. accountVaild.Password = html.EscapeString(accountVaild.Password)
  87. accountVaild.Name = html.EscapeString(accountVaild.Name)
  88. accountVaild.Company = html.EscapeString(accountVaild.Company)
  89. accountVaild.Position = html.EscapeString(accountVaild.Position)
  90. accountVaild.Mobile = html.EscapeString(accountVaild.Mobile)
  91. accountVaild.Telephone = html.EscapeString(accountVaild.Telephone)
  92. return accountVaild, nil
  93. }
  94. // 获得一个项目用户
  95. func (s *projectAccountService) Get(id int, projectId int) *viewmodels.ProjectAccount {
  96. modelsAccount := s.dao.Get(id, projectId)
  97. viewAccountData := viewmodels.ProjectAccount{}
  98. if modelsAccount.Id == 0 {
  99. viewAccountData.Id = "0"
  100. return &viewAccountData
  101. }
  102. viewAccountData = comm.MakeProjectAccountVM(modelsAccount)
  103. return &viewAccountData
  104. }
  105. // 获得项目下所有账号信息
  106. func (s *projectAccountService) GetAll(projectId int) []viewmodels.ProjectAccount {
  107. accountList := s.dao.GetAll(projectId)
  108. accountListVM := make([]viewmodels.ProjectAccount, 0)
  109. for _, data := range accountList {
  110. if data.IsAdmin != 1 {
  111. account := comm.MakeProjectAccountVM(&data)
  112. accountListVM = append(accountListVM, account)
  113. }
  114. }
  115. return accountListVM
  116. }
  117. // 获得标段下的账号
  118. func (s *projectAccountService) GetBidAccount(bidsectionId int, projectId int, projectAccountId int) []viewmodels.ProjectAccount {
  119. // 1获得标段账号ID
  120. bidAccountData := s.bidAccountDao.GetBidAccount(bidsectionId, projectId)
  121. // 组合账号ID集合
  122. idList := []string{}
  123. // 管理员账号-可能不必要
  124. // idList = append(idList, strconv.Itoa(projectAccountId))
  125. for _, item := range bidAccountData {
  126. idList = append(idList, strconv.Itoa(item.BidsectionId))
  127. }
  128. inId := strings.Join(idList, ",")
  129. // 获得账号信息
  130. accountData := s.dao.GetInId(inId)
  131. // 格式化账号数据
  132. accountListVM := make([]viewmodels.ProjectAccount, 0)
  133. for _, data := range accountData {
  134. account := comm.MakeProjectAccountVM(&data)
  135. accountListVM = append(accountListVM, account)
  136. }
  137. return accountListVM
  138. }
  139. // 检索 账号姓名单位手机
  140. func (s *projectAccountService) Search(name string, projectId int) []viewmodels.ProjectAccount {
  141. accountList := s.dao.Search(name, projectId)
  142. accountListVM := make([]viewmodels.ProjectAccount, 0)
  143. for _, data := range accountList {
  144. account := comm.MakeProjectAccountVM(&data)
  145. accountListVM = append(accountListVM, account)
  146. }
  147. return accountListVM
  148. }
  149. // 新增账号
  150. func (s *projectAccountService) Add(viewAccount viewmodels.ProjectAccount, projectId int) error {
  151. // 验证该项目下是否有同名账号--TODO
  152. accountValid := &models.CmProjectAccount{}
  153. s.dao.GetOne(accountValid)
  154. if accountValid.Id != 0 {
  155. return errors.New("已存在相同的账号")
  156. }
  157. account := models.CmProjectAccount{}
  158. account.ProjectId = projectId
  159. account.Account = viewAccount.Account
  160. account.Password = comm.CreatePasswordSign(viewAccount.Password, viewAccount.Account)
  161. account.Name = viewAccount.Name
  162. account.Company = viewAccount.Company
  163. account.Position = viewAccount.Position
  164. account.Mobile = viewAccount.Mobile
  165. account.Telephone = viewAccount.Telephone
  166. account.AccountGroup = viewAccount.AccountGroup
  167. account.CreateTime = time.Now()
  168. err := s.dao.Add(&account)
  169. return err
  170. }
  171. // 保存用户信息
  172. func (s *projectAccountService) Save(viewAccount viewmodels.ProjectAccount, id int, projectId int) error {
  173. account := models.CmProjectAccount{}
  174. account.Id = id
  175. account.ProjectId = projectId
  176. account.Name = viewAccount.Name
  177. account.Company = viewAccount.Company
  178. account.Position = viewAccount.Position
  179. //account.Mobile = viewAccount.Mobile
  180. account.Telephone = viewAccount.Telephone
  181. account.AccountGroup = viewAccount.AccountGroup
  182. err := s.dao.Update(&account, []string{"Name", "Company", "Position", "Telephone", "AccountGroup"})
  183. return err
  184. }
  185. // 设置启用/禁止
  186. func (s *projectAccountService) Enable(id int, projectId int, enable int) error {
  187. account := models.CmProjectAccount{}
  188. account.Id = id
  189. account.ProjectId = projectId
  190. account.Enable = enable
  191. err := s.dao.Update(&account, []string{"Enable"})
  192. return err
  193. }
  194. // 删除账号
  195. func (s *projectAccountService) Delete(id int, projectId int) error {
  196. account := models.CmProjectAccount{}
  197. account.Id = id
  198. account.ProjectId = projectId
  199. err := s.dao.Delete(&account)
  200. return err
  201. }
  202. // 更改账号或者密码
  203. func (s *projectAccountService) ChangeAccount(id int, projectId int, viewAccount viewmodels.ProjectAccount) error {
  204. // 1.是否修改账号
  205. field := []string{"Password"}
  206. account := models.CmProjectAccount{}
  207. account.Id = id
  208. account.ProjectId = projectId
  209. // 2.修改密码
  210. account.Password = comm.CreatePasswordSign(viewAccount.Password, viewAccount.Account)
  211. accountData := s.dao.Get(id, projectId)
  212. if accountData.Account != viewAccount.Account {
  213. account.Account = viewAccount.Account
  214. field = append(field, "Account")
  215. }
  216. // 3.发送短信-TODO
  217. utils.SendSMS()
  218. s.dao.Update(&account, field)
  219. return nil
  220. }