project_account_service.go 7.9 KB

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