| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251 | /* * @description: 标段账号的-数据库操作 * @Author: CP * @Date: 2020-10-21 11:54:10 * @FilePath: \construction_management\dao\bid_account_dao.go */package daoimport (	"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}
 |