project_account_service.go 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648
  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/lib"
  20. "go.mod/models"
  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. ValidRuleChangePassword(ctx iris.Context) (viewmodels.AccountPassword, error)
  29. ValidRulePermission(ctx iris.Context) (viewmodels.Permission, error)
  30. ValidRuleAccount(ctx iris.Context) (viewmodels.ProjectAccount, error)
  31. ValidGetPermission(ctx iris.Context) (viewmodels.Permission, error)
  32. ValidRuleProjectId(ctx iris.Context) (viewmodels.ProjectAccount, error)
  33. Get(accountId int, projectId int) *viewmodels.ProjectAccount
  34. GetAll(projectId int) []viewmodels.ProjectAccount
  35. GetBidAccount(bidsectionId int, projectId int, projectAccountId int, name string) []viewmodels.ProjectAccount
  36. Search(name string, projectId int) []viewmodels.ProjectAccount
  37. AddBs(viewAccount viewmodels.ProjectAccount, projectId int) error
  38. SaveBs(viewAccount viewmodels.ProjectAccount, id int, projectId int, staffName string) error
  39. Add(viewAccount viewmodels.ProjectAccount, projectId int) error
  40. Save(viewAccount viewmodels.ProjectAccount, id int, projectId int) error
  41. SaveAccount(viewAccount viewmodels.ProjectAccount, id int, projectId int) error
  42. SyncAccountBs(projectId int) error
  43. Enable(id int, projectId int, enable int) error
  44. ChangeAccount(id int, projectId int, viewAccount viewmodels.ProjectAccount) error
  45. ChangeAccountBS(id int, projectId int, viewAccount viewmodels.ProjectAccount) error
  46. GetProjectInfo(id int) (viewmodels.ProjectInfo, error)
  47. Delete(id int, projectId int) error
  48. ChangePassword(AccountData viewmodels.AccountPassword, projectId int, projectAccountId int) error
  49. SaveAuth(permission viewmodels.Permission, projectId int, bidsectionId int, accountId int) error
  50. }
  51. //返回service操作类
  52. type projectAccountService struct {
  53. dao *dao.ProjectAccountDao
  54. bidAccountDao *dao.BidAccountDao
  55. permissionAccountDao *dao.PermissionAccountDao
  56. projectDao *dao.ProjectDao
  57. validSave string
  58. validAdd string
  59. validPassword string
  60. }
  61. //创建项目用户service
  62. func NewProjectAccountService() ProjectAccountService {
  63. return &projectAccountService{
  64. dao: dao.NewProjectAccountDao(datasource.InstanceDbMaster()),
  65. bidAccountDao: dao.NewBidAccountDao(datasource.InstanceDbMaster()),
  66. permissionAccountDao: dao.NewPermissionAccountDao(datasource.InstanceDbMaster()),
  67. projectDao: dao.NewProjectDao(datasource.InstanceDbMaster()),
  68. validSave: "/api/projectSetting/account/save",
  69. validAdd: "/api/projectSetting/account/create",
  70. validPassword: "/api/projectSetting/account/change",
  71. }
  72. }
  73. // 用户规则验证
  74. func (s *projectAccountService) ValidRule(ctx iris.Context) (viewmodels.ProjectAccount, error) {
  75. accountVaild := viewmodels.ProjectAccount{}
  76. err := ctx.ReadJSON(&accountVaild)
  77. if err != nil {
  78. log.Println("account-ValidRule-ReadForm转换异常, error=", err)
  79. return accountVaild, err
  80. }
  81. if ctx.Path() == s.validAdd {
  82. err = accountVaild.Validate()
  83. } else if ctx.Path() == s.validSave {
  84. err = accountVaild.ValidateUpdate()
  85. } else if ctx.Path() == s.validPassword {
  86. err = accountVaild.ValidatePassword()
  87. } else {
  88. log.Println("请求路径找不到对应的验证规则")
  89. return accountVaild, errors.New("验证错误-未找到验证规则")
  90. }
  91. if err != nil {
  92. log.Println("用户验证, error=", err)
  93. return accountVaild, err
  94. }
  95. // 验证账号组
  96. if ctx.Path() != s.validPassword {
  97. accountGroup := comm.NewAccountGroup()
  98. err = accountGroup.ValidRule(accountVaild.AccountGroup)
  99. if err != nil {
  100. log.Println("用户验证, error=", err)
  101. return accountVaild, err
  102. }
  103. }
  104. // xss
  105. accountVaild.Account = html.EscapeString(accountVaild.Account)
  106. accountVaild.Password = html.EscapeString(accountVaild.Password)
  107. accountVaild.Name = html.EscapeString(accountVaild.Name)
  108. accountVaild.Company = html.EscapeString(accountVaild.Company)
  109. accountVaild.Position = html.EscapeString(accountVaild.Position)
  110. accountVaild.Mobile = html.EscapeString(accountVaild.Mobile)
  111. accountVaild.Telephone = html.EscapeString(accountVaild.Telephone)
  112. return accountVaild, nil
  113. }
  114. // 验证密码
  115. func (s *projectAccountService) ValidRuleChangePassword(ctx iris.Context) (viewmodels.AccountPassword, error) {
  116. accountVaild := viewmodels.AccountPassword{}
  117. err := ctx.ReadJSON(&accountVaild)
  118. if err != nil {
  119. log.Println("account-ValidRule-ReadForm转换异常, error=", err)
  120. return accountVaild, err
  121. }
  122. err = accountVaild.ValidateChangePassword()
  123. if err != nil {
  124. log.Println("权限验证, error=", err)
  125. return accountVaild, err
  126. }
  127. return accountVaild, nil
  128. }
  129. // 用户规则验证
  130. func (s *projectAccountService) ValidRulePermission(ctx iris.Context) (viewmodels.Permission, error) {
  131. accountVaild := viewmodels.Permission{}
  132. err := ctx.ReadJSON(&accountVaild)
  133. if err != nil {
  134. log.Println("account-ValidRule-ReadForm转换异常, error=", err)
  135. return accountVaild, err
  136. }
  137. err = accountVaild.Validate()
  138. if err != nil {
  139. log.Println("权限验证, error=", err)
  140. return accountVaild, err
  141. }
  142. return accountVaild, nil
  143. }
  144. // 用户规则验证
  145. func (s *projectAccountService) ValidGetPermission(ctx iris.Context) (viewmodels.Permission, error) {
  146. accountVaild := viewmodels.Permission{}
  147. err := ctx.ReadForm(&accountVaild)
  148. if err != nil {
  149. log.Println("account-ValidRule-ReadForm转换异常, error=", err)
  150. return accountVaild, err
  151. }
  152. err = accountVaild.ValidateSinglePermission()
  153. if err != nil {
  154. log.Println("权限验证, error=", err)
  155. return accountVaild, err
  156. }
  157. return accountVaild, nil
  158. }
  159. // 验证编辑用户
  160. func (s *projectAccountService) ValidRuleAccount(ctx iris.Context) (viewmodels.ProjectAccount, error) {
  161. accountVaild := viewmodels.ProjectAccount{}
  162. err := ctx.ReadJSON(&accountVaild)
  163. if err != nil {
  164. log.Println("account-ValidRule-ReadForm转换异常, error=", err)
  165. return accountVaild, err
  166. }
  167. err = accountVaild.ValidateAccount()
  168. if err != nil {
  169. log.Println("权限验证, error=", err)
  170. return accountVaild, err
  171. }
  172. return accountVaild, nil
  173. }
  174. // 验证用户项目ID
  175. func (s *projectAccountService) ValidRuleProjectId(ctx iris.Context) (viewmodels.ProjectAccount, error) {
  176. accountVaild := viewmodels.ProjectAccount{}
  177. err := ctx.ReadForm(&accountVaild)
  178. if err != nil {
  179. log.Println("account-ValidRule-ReadForm转换异常, error=", err)
  180. return accountVaild, err
  181. }
  182. err = accountVaild.ValidateProjectId()
  183. if err != nil {
  184. log.Println("权限验证, error=", err)
  185. return accountVaild, err
  186. }
  187. return accountVaild, nil
  188. }
  189. // 获得一个项目用户
  190. func (s *projectAccountService) Get(id int, projectId int) *viewmodels.ProjectAccount {
  191. modelsAccount := s.dao.Get(id, projectId)
  192. viewAccountData := viewmodels.ProjectAccount{}
  193. if modelsAccount.Id == 0 {
  194. viewAccountData.Id = "0"
  195. return &viewAccountData
  196. }
  197. viewAccountData = comm.MakeProjectAccountVM(modelsAccount)
  198. return &viewAccountData
  199. }
  200. // 获得项目下所有账号信息
  201. func (s *projectAccountService) GetAll(projectId int) []viewmodels.ProjectAccount {
  202. accountList := s.dao.GetAll(projectId)
  203. accountListVM := make([]viewmodels.ProjectAccount, 0)
  204. for _, data := range accountList {
  205. //if data.IsAdmin != 1 {
  206. account := comm.MakeProjectAccountVM(&data)
  207. accountListVM = append(accountListVM, account)
  208. //}
  209. }
  210. return accountListVM
  211. }
  212. // 获得标段下的账号
  213. func (s *projectAccountService) GetBidAccount(bidsectionId int, projectId int, projectAccountId int, name string) []viewmodels.ProjectAccount {
  214. // 1.获得标段账号ID
  215. bidAccountData := s.bidAccountDao.GetBidAccount(bidsectionId, projectId)
  216. // 组合账号ID集合
  217. idList := []string{}
  218. // 管理员账号-可能不必要-加入管理员ID
  219. projectDao := dao.NewProjectDao(datasource.InstanceDbMaster())
  220. projectData := projectDao.Get(projectId)
  221. idList = append(idList, strconv.Itoa(projectData.UserId))
  222. for _, item := range bidAccountData {
  223. idList = append(idList, strconv.Itoa(item.AccountId))
  224. }
  225. inId := strings.Join(idList, ",")
  226. // 获得账号信息
  227. accountData := s.dao.GetInId(inId, name)
  228. // 2.获得账号权限
  229. permissionData := s.permissionAccountDao.GetBidsectionId(bidsectionId)
  230. // 格式化账号数据
  231. accountListVM := make([]viewmodels.ProjectAccount, 0)
  232. for _, data := range accountData {
  233. account := comm.MakeProjectAccountVM(&data)
  234. for _, item := range permissionData {
  235. if data.Id == item.AccountId {
  236. account.ContractPermission = item.ContractPermission
  237. account.QualityPermission = item.QualityPermission
  238. account.SafePermission = item.SafePermission
  239. break
  240. }
  241. }
  242. accountListVM = append(accountListVM, account)
  243. }
  244. return accountListVM
  245. }
  246. // 检索 账号姓名单位手机
  247. func (s *projectAccountService) Search(name string, projectId int) []viewmodels.ProjectAccount {
  248. accountList := s.dao.Search(name, projectId)
  249. accountListVM := make([]viewmodels.ProjectAccount, 0)
  250. for _, data := range accountList {
  251. account := comm.MakeProjectAccountVM(&data)
  252. accountListVM = append(accountListVM, account)
  253. }
  254. return accountListVM
  255. }
  256. // 新增账号-后台
  257. func (s *projectAccountService) AddBs(viewAccount viewmodels.ProjectAccount, projectId int) error {
  258. // 验证该项目下是否有同名账号
  259. // accountValid := s.dao.GetAccount(viewAccount.Account)
  260. accountValid := s.dao.GetAccountProjectId(viewAccount.Account, projectId)
  261. if accountValid.Id != 0 {
  262. return errors.New("项目下已存在相同的账号")
  263. }
  264. account := models.CmProjectAccount{}
  265. if viewAccount.BoolAdmin {
  266. account.IsAdmin = 1
  267. if err := s.updateAdminZero(projectId); err != nil {
  268. return err
  269. }
  270. }
  271. account.ProjectId = projectId
  272. account.Account = viewAccount.Account
  273. account.Password = comm.CreatePasswordSign(viewAccount.Password, viewAccount.Account)
  274. account.AccountGroup = viewAccount.AccountGroup
  275. account.Name = viewAccount.Name
  276. account.Company = viewAccount.Company
  277. account.Position = viewAccount.Position
  278. account.Mobile = viewAccount.Mobile
  279. account.Telephone = viewAccount.Telephone
  280. account.Enable = 1
  281. account.CreateTime = time.Now()
  282. err := s.dao.Add(&account)
  283. // 同步更新项目管理员信息
  284. projectDao := dao.NewProjectDao(datasource.InstanceDbMaster())
  285. project := &models.CmProject{}
  286. project.Id = projectId
  287. project.UserId = account.Id
  288. project.UserAccount = viewAccount.Name
  289. if err := projectDao.Update(project, []string{"user_id", "user_account"}); err != nil {
  290. return err
  291. }
  292. return err
  293. }
  294. // 保存用户信息
  295. func (s *projectAccountService) SaveBs(viewAccount viewmodels.ProjectAccount, id int, projectId int, staffName string) error {
  296. // 1.获得项目信息
  297. projectDao := dao.NewProjectDao(datasource.InstanceDbMaster())
  298. // projectData, _ := projectDao.FindById(projectId)
  299. // if staffName != projectData.StaffName {
  300. // return errors.New("无权编辑")
  301. // }
  302. account := models.CmProjectAccount{}
  303. updateField := []string{"name", "company", "position", "telephone", "account_group"}
  304. // 是否重新设置管理员
  305. if viewAccount.BoolAdmin {
  306. account.IsAdmin = 1
  307. updateField = append(updateField, "is_admin")
  308. // 1.更新项目管理员信息
  309. project := &models.CmProject{}
  310. project.Id = projectId
  311. project.UserId = id
  312. project.UserAccount = viewAccount.Name
  313. if err := projectDao.Update(project, []string{"user_id", "user_account"}); err != nil {
  314. return err
  315. }
  316. // 去除其他账号的管理员
  317. if err := s.updateAdminZero(projectId); err != nil {
  318. return err
  319. }
  320. }
  321. account.Id = id
  322. account.ProjectId = projectId
  323. account.Name = viewAccount.Name
  324. account.Company = viewAccount.Company
  325. account.Position = viewAccount.Position
  326. account.Mobile = viewAccount.Mobile
  327. account.Telephone = viewAccount.Telephone
  328. account.AccountGroup = viewAccount.AccountGroup
  329. err := s.dao.Update(&account, updateField)
  330. return err
  331. }
  332. // 同步账号后台
  333. func (s *projectAccountService) SyncAccountBs(projectId int) error {
  334. var (
  335. accountList []map[string]interface{}
  336. err error
  337. )
  338. // 1.先获得项目信息
  339. projectData := s.projectDao.Get(projectId)
  340. if projectData.Id == 0 {
  341. return errors.New("项目不存在")
  342. }
  343. // 获得计量
  344. Jlzf := lib.NewJlzf()
  345. if accountList, err = Jlzf.GetAccountList(projectData.Code); err != nil {
  346. return err
  347. }
  348. fmt.Println(accountList)
  349. // 同步账号数据
  350. // s.dao.JlSync(accountList)
  351. return nil
  352. }
  353. // 设置is_admin为0
  354. func (s *projectAccountService) updateAdminZero(projectId int) error {
  355. dataDao := s.dao.GetAdmin(projectId)
  356. if dataDao.Id != 0 {
  357. updateData := models.CmProjectAccount{}
  358. updateData.Id = dataDao.Id
  359. updateData.ProjectId = projectId
  360. updateData.IsAdmin = 0
  361. if err := s.dao.Update(&updateData, []string{"is_admin"}); err != nil {
  362. return errors.New("原管理员取消失败")
  363. }
  364. }
  365. return nil
  366. }
  367. // 新增账号
  368. func (s *projectAccountService) Add(viewAccount viewmodels.ProjectAccount, projectId int) error {
  369. // 验证该项目下是否有同名账号
  370. accountValid := s.dao.GetAccountProjectId(viewAccount.Account, projectId)
  371. if accountValid.Id != 0 {
  372. return errors.New("已存在相同的账号")
  373. }
  374. account := models.CmProjectAccount{}
  375. account.ProjectId = projectId
  376. account.Account = viewAccount.Account
  377. account.Password = comm.CreatePasswordSign(viewAccount.Password, viewAccount.Account)
  378. account.Name = viewAccount.Name
  379. account.Company = viewAccount.Company
  380. account.Position = viewAccount.Position
  381. account.Mobile = viewAccount.Mobile
  382. account.Telephone = viewAccount.Telephone
  383. account.AccountGroup = viewAccount.AccountGroup
  384. account.Enable = 1
  385. account.CreateTime = time.Now()
  386. err := s.dao.Add(&account)
  387. return err
  388. }
  389. // 保存用户信息
  390. func (s *projectAccountService) Save(viewAccount viewmodels.ProjectAccount, id int, projectId int) error {
  391. account := models.CmProjectAccount{}
  392. account.Id = id
  393. account.ProjectId = projectId
  394. account.Name = viewAccount.Name
  395. account.Company = viewAccount.Company
  396. account.Position = viewAccount.Position
  397. account.Mobile = viewAccount.Mobile
  398. account.Telephone = viewAccount.Telephone
  399. account.AccountGroup = viewAccount.AccountGroup
  400. err := s.dao.Update(&account, []string{"Name", "Company", "Position", "Telephone", "AccountGroup"})
  401. return err
  402. }
  403. func (s *projectAccountService) SaveAccount(viewAccount viewmodels.ProjectAccount, id int, projectId int) error {
  404. account := models.CmProjectAccount{}
  405. account.Id = id
  406. account.ProjectId = projectId
  407. account.Name = viewAccount.Name
  408. account.Company = viewAccount.Company
  409. account.Position = viewAccount.Position
  410. account.Telephone = viewAccount.Telephone
  411. err := s.dao.Update(&account, []string{"Name", "Company", "Position", "Telephone"})
  412. return err
  413. }
  414. // 设置启用/禁止
  415. func (s *projectAccountService) Enable(id int, projectId int, enable int) error {
  416. account := models.CmProjectAccount{}
  417. account.Id = id
  418. account.ProjectId = projectId
  419. account.Enable = enable
  420. err := s.dao.Update(&account, []string{"Enable"})
  421. return err
  422. }
  423. // 删除账号
  424. func (s *projectAccountService) Delete(id int, projectId int) error {
  425. account := models.CmProjectAccount{}
  426. account.Id = id
  427. account.ProjectId = projectId
  428. err := s.dao.Delete(&account)
  429. return err
  430. }
  431. // 更改账号或者密码
  432. func (s *projectAccountService) ChangeAccount(id int, projectId int, viewAccount viewmodels.ProjectAccount) error {
  433. // 1.是否修改账号
  434. field := []string{"Password"}
  435. account := models.CmProjectAccount{}
  436. account.Id = id
  437. account.ProjectId = projectId
  438. // 2.修改密码
  439. account.Password = comm.CreatePasswordSign(viewAccount.Password, viewAccount.Account)
  440. accountData := s.dao.Get(id, projectId)
  441. if accountData.Account != viewAccount.Account {
  442. account.Account = viewAccount.Account
  443. field = append(field, "Account")
  444. }
  445. // 3.发送短信-TODO
  446. // utils.SendSMS()
  447. s.dao.Update(&account, field)
  448. return nil
  449. }
  450. // 更改账号或者密码-后台
  451. func (s *projectAccountService) ChangeAccountBS(id int, projectId int, viewAccount viewmodels.ProjectAccount) error {
  452. // 1.是否修改账号
  453. field := []string{"Password"}
  454. account := models.CmProjectAccount{}
  455. account.Id = id
  456. account.ProjectId = projectId
  457. // 2.修改密码
  458. account.Password = comm.CreatePasswordSign(viewAccount.Password, viewAccount.Account)
  459. accountData := s.dao.Get(id, projectId)
  460. if accountData.Account != viewAccount.Account {
  461. account.Account = viewAccount.Account
  462. field = append(field, "Account")
  463. }
  464. s.dao.Update(&account, field)
  465. return nil
  466. }
  467. // 更换密码
  468. func (s *projectAccountService) ChangePassword(AccountData viewmodels.AccountPassword, projectId int, projectAccountId int) error {
  469. // 1.获得账号
  470. accountData := s.dao.Get(projectAccountId, projectId)
  471. // 2.比对密码
  472. password := comm.CreatePasswordSign(AccountData.Password, accountData.Account)
  473. if accountData.Password == "JL" {
  474. return errors.New("计量密码不允许修改密码")
  475. }
  476. if accountData.Password != password {
  477. return errors.New("原密码输入不正确")
  478. }
  479. // 3修改密码
  480. field := []string{"Password"}
  481. account := models.CmProjectAccount{}
  482. account.Id = projectAccountId
  483. account.ProjectId = projectId
  484. account.Password = comm.CreatePasswordSign(AccountData.NewPassword, accountData.Account)
  485. err := s.dao.Update(&account, field)
  486. if err != nil {
  487. return errors.New("密码更新失败")
  488. }
  489. return nil
  490. }
  491. func (s *projectAccountService) GetProjectInfo(id int) (viewmodels.ProjectInfo, error) {
  492. projectInfo, err := s.dao.FindById(id)
  493. return projectInfo, err
  494. }
  495. // 保存权限设置
  496. func (s *projectAccountService) SaveAuth(permission viewmodels.Permission, projectId int, bidsectionId int, accountId int) error {
  497. // 1.构造权限字符串
  498. // 1-1.合同权限
  499. contractPermission := map[string]int{
  500. "add": permission.ContractAdd,
  501. "delete": permission.ContractDelete,
  502. "access": permission.ContractAccess,
  503. }
  504. contractPermissionByte, err := json.Marshal(contractPermission)
  505. if err != nil {
  506. return errors.New("合同权限解析失败")
  507. }
  508. contractPermissionStr := string(contractPermissionByte)
  509. // 1.2 安全巡检权限
  510. safePermission := map[string]int{
  511. "add": permission.SafeAdd,
  512. "delete": permission.SafeDelete,
  513. "access": permission.SafeAccess,
  514. }
  515. safePermissionByte, err := json.Marshal(safePermission)
  516. if err != nil {
  517. return errors.New("合同权限解析失败")
  518. }
  519. safePermissionStr := string(safePermissionByte)
  520. // 1.3 质量巡检权限
  521. qualityPermission := map[string]int{
  522. "add": permission.QualityAdd,
  523. "delete": permission.QualityDelete,
  524. "access": permission.QualityAccess,
  525. }
  526. qualityPermissionByte, err := json.Marshal(qualityPermission)
  527. if err != nil {
  528. return errors.New("合同权限解析失败")
  529. }
  530. qualityPermissionStr := string(qualityPermissionByte)
  531. // 2.保存权限
  532. permissionAccount := models.CmPermissionAccount{}
  533. permissionAccount.ProjectId = projectId
  534. permissionAccount.BidsectionId = bidsectionId
  535. permissionAccount.AccountId = accountId
  536. permissionAccount.ContractPermission = contractPermissionStr
  537. permissionAccount.SafePermission = safePermissionStr
  538. permissionAccount.QualityPermission = qualityPermissionStr
  539. err = s.permissionAccountDao.Update(&permissionAccount, []string{"ContractPermission", "SafePermission", "QualityPermission"})
  540. return err
  541. }