123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251 |
- /*
- * @description: 标段账号的-数据库操作
- * @Author: CP
- * @Date: 2020-10-21 11:54:10
- * @FilePath: \construction_management\dao\bid_account_dao.go
- */
- package dao
- import (
- "encoding/json"
- "errors"
- "log"
- "github.com/go-xorm/xorm"
- "go.mod/lib"
- "go.mod/models"
- )
- //数据库操作引擎
- type BidAccountDao struct {
- engine *xorm.Engine
- }
- //获得一个DAO对象
- func NewBidAccountDao(engine *xorm.Engine) *BidAccountDao {
- return &BidAccountDao{
- engine: engine,
- }
- }
- //获得标段下的账号数据
- func (d *BidAccountDao) GetBidAccount(bidsectionId int, projectId int) []models.CmBidAccount {
- datalist := make([]models.CmBidAccount, 0)
- err := d.engine.
- Where("bidsection_id = ? and project_id=?", bidsectionId, projectId).
- Asc("id").
- Find(&datalist)
- if err != nil {
- return datalist
- } else {
- return datalist
- }
- }
- //获得标段下的账号数据
- func (d *BidAccountDao) GetAccountId(projectId int, bidsectionId int, accountId int) *models.CmBidAccount {
- data := &models.CmBidAccount{}
- ok, err := d.engine.
- Where("project_id=? and bidsection_id = ? and account_id= ? ", projectId, bidsectionId, accountId).
- Get(data)
- if ok && err == nil {
- return data
- } else {
- data.Id = 0
- return data
- }
- }
- // 创建标段成员关系
- func (d *BidAccountDao) Create(bidsectionId int, accountData *models.CmProjectAccount, treeId int, projectId int) error {
- session := d.engine.NewSession()
- defer session.Close()
- err := session.Begin()
- if err != nil {
- return errors.New("新增标段成员出错-dbsession")
- }
- // -更新树成员量
- // 1.获得标段成员量
- bidAccountData := d.GetBidAccount(bidsectionId, projectId)
- accounts := len(bidAccountData) + 1
- _, err = session.Exec("UPDATE cm_tree SET `accounts` = ? where id = ?", accounts, treeId)
- if err != nil {
- session.Rollback()
- log.Println(err)
- return errors.New("更新标段成员量出错")
- }
- // 2.初始化账号权限
- permissionAccount := &models.CmPermissionAccount{}
- _, err = d.engine.
- Where("project_id=? and bidsection_id = ? and account_id= ? ", projectId, bidsectionId, accountData.Id).
- Get(permissionAccount)
- // 2-1
- permiss := "{\"access\":1,\"add\":0,\"delete\":0}"
- if permissionAccount.Id == 0 {
- permissionAccount.ProjectId = projectId
- permissionAccount.BidsectionId = bidsectionId
- permissionAccount.AccountId = accountData.Id
- permissionAccount.ContractPermission = permiss
- permissionAccount.QualityPermission = permiss
- permissionAccount.SafePermission = permiss
- _, err = session.Insert(permissionAccount)
- if err != nil {
- session.Rollback()
- return errors.New("初始化账号权限出错")
- }
- } else {
- _, err = session.Exec("UPDATE cm_permission_account SET `contract_permission` = ? ,`quality_permission` = ? ,`safe_permission` = ? where id = ?",
- permiss, permiss, permiss, permissionAccount.Id)
- if err != nil {
- session.Rollback()
- return errors.New("更新账号下标段出错")
- }
- }
- // -更新账号表的标段ID
- // 1.获得账号中已绑定的标段
- bidsectionIdsString := accountData.BidsectionIds
- bidsectionIds := make([]lib.BidsectionIds, 0)
- bidsectionIdsByte := []byte("")
- // 2.未有标段
- if bidsectionIdsString == "" {
- BidsectionIdsItem := lib.BidsectionIds{}
- BidsectionIdsItem.Id = bidsectionId
- bidsectionIds = append(bidsectionIds, BidsectionIdsItem)
- bidsectionIdsByte, err = json.Marshal(bidsectionIds)
- if err != nil {
- session.Rollback()
- return err
- }
- } else {
- // 2.获得已有的标段ID
- err := json.Unmarshal([]byte(bidsectionIdsString), &bidsectionIds)
- if err != nil {
- session.Rollback()
- return err
- }
- bidId := lib.BidsectionIds{}
- bidId.Id = bidsectionId
- // 加入ID
- bidsectionIds = append(bidsectionIds, bidId)
- // 转换JSON字符byte
- bidsectionIdsByte, err = json.Marshal(bidsectionIds)
- if err != nil {
- return err
- }
- }
- bidsectionIdsString = string(bidsectionIdsByte[:])
- // 3.更新账号标段ID组
- _, err = session.Exec("UPDATE cm_project_account SET `bidsection_ids` = ? where id = ?", bidsectionIdsString, accountData.Id)
- if err != nil {
- session.Rollback()
- return errors.New("更新账号下标段出错")
- }
- // -写入标段用户关系
- bidAccount := models.CmBidAccount{}
- bidAccount.AccountId = accountData.Id
- bidAccount.BidsectionId = bidsectionId
- bidAccount.ProjectId = projectId
- _, err = session.Insert(bidAccount)
- if err != nil {
- session.Rollback()
- return errors.New("账号关联标段出错")
- }
- err = session.Commit()
- if err != nil {
- session.Rollback()
- return errors.New("新增标段成员出错-dbsession")
- }
- return nil
- }
- // 移除标段中的成员
- func (d *BidAccountDao) Delete(bidsectionId int, accountData *models.CmProjectAccount, treeId int, projectId int) error {
- session := d.engine.NewSession()
- defer session.Close()
- err := session.Begin()
- if err != nil {
- return errors.New("移除标段成员出错-dbsession")
- }
- // 1.移除标段账号关系中的账号
- _, err = session.Exec("DELETE FROM `cm_bid_account` WHERE account_id = ? and bidsection_id = ? and project_id= ? limit 1",
- accountData.Id, bidsectionId, projectId)
- if err != nil {
- session.Rollback()
- return errors.New("移除标段成员出错")
- }
- // 1-1 移除账号权限
- _, err = session.Exec("DELETE FROM `cm_permission_account` WHERE project_id= ? and bidsection_id = ? and account_id = ? limit 1",
- projectId, bidsectionId, accountData.Id)
- if err != nil {
- session.Rollback()
- return errors.New("移除成员权限出错")
- }
- // -更新树成员量
- // 2.获得标段成员量
- bidAccountData := d.GetBidAccount(bidsectionId, projectId)
- accounts := len(bidAccountData)
- _, err = session.Exec("UPDATE cm_tree SET `accounts` = ? where id = ?", accounts, treeId)
- if err != nil {
- session.Rollback()
- return errors.New("更新标段成员量出错")
- }
- // 3.移除账号表中的标段ID
- bidsectionIdsString := accountData.BidsectionIds
- bidsectionIds := make([]lib.BidsectionIds, 0)
- bidsectionIdsByte := []byte("")
- // 2.未有标段
- if bidsectionIdsString == "" {
- return errors.New("移除标段成员出错")
- }
- // 2.获得已有的标段ID
- err = json.Unmarshal([]byte(bidsectionIdsString), &bidsectionIds)
- if err != nil {
- session.Rollback()
- return err
- }
- // 获得需要删除标段ID的下标
- bidsectionIdsIndex := -1
- for index, data := range bidsectionIds {
- if data.Id == bidsectionId {
- bidsectionIdsIndex = index
- break
- }
- }
- if bidsectionIdsIndex == -1 {
- session.Rollback()
- return errors.New("移除标段成员出错")
- }
- // 删除标段ID
- bidsectionIds = append(bidsectionIds[:bidsectionIdsIndex], bidsectionIds[bidsectionIdsIndex+1:]...)
- // 转换JSON字符byte
- bidsectionIdsByte, err = json.Marshal(bidsectionIds)
- if err != nil {
- session.Rollback()
- return err
- }
- bidsectionIdsString = string(bidsectionIdsByte[:])
- // 3.更新账号标段ID组
- _, err = session.Exec("UPDATE cm_project_account SET `bidsection_ids` = ? where id = ?", bidsectionIdsString, accountData.Id)
- if err != nil {
- session.Rollback()
- return errors.New("移除账号下标段出错")
- }
- err = session.Commit()
- if err != nil {
- session.Rollback()
- return errors.New("移除标段成员出错-dbsession")
- }
- return nil
- }
|