project_account_service.go 9.3 KB

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