project_account_service.go 19 KB

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