bid_account_dao.go 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251
  1. /*
  2. * @description: 标段账号的-数据库操作
  3. * @Author: CP
  4. * @Date: 2020-10-21 11:54:10
  5. * @FilePath: \construction_management\dao\bid_account_dao.go
  6. */
  7. package dao
  8. import (
  9. "encoding/json"
  10. "errors"
  11. "log"
  12. "github.com/go-xorm/xorm"
  13. "go.mod/lib"
  14. "go.mod/models"
  15. )
  16. //数据库操作引擎
  17. type BidAccountDao struct {
  18. engine *xorm.Engine
  19. }
  20. //获得一个DAO对象
  21. func NewBidAccountDao(engine *xorm.Engine) *BidAccountDao {
  22. return &BidAccountDao{
  23. engine: engine,
  24. }
  25. }
  26. //获得标段下的账号数据
  27. func (d *BidAccountDao) GetBidAccount(bidsectionId int, projectId int) []models.CmBidAccount {
  28. datalist := make([]models.CmBidAccount, 0)
  29. err := d.engine.
  30. Where("bidsection_id = ? and project_id=?", bidsectionId, projectId).
  31. Asc("id").
  32. Find(&datalist)
  33. if err != nil {
  34. return datalist
  35. } else {
  36. return datalist
  37. }
  38. }
  39. //获得标段下的账号数据
  40. func (d *BidAccountDao) GetAccountId(projectId int, bidsectionId int, accountId int) *models.CmBidAccount {
  41. data := &models.CmBidAccount{}
  42. ok, err := d.engine.
  43. Where("project_id=? and bidsection_id = ? and account_id= ? ", projectId, bidsectionId, accountId).
  44. Get(data)
  45. if ok && err == nil {
  46. return data
  47. } else {
  48. data.Id = 0
  49. return data
  50. }
  51. }
  52. // 创建标段成员关系
  53. func (d *BidAccountDao) Create(bidsectionId int, accountData *models.CmProjectAccount, treeId int, projectId int) error {
  54. session := d.engine.NewSession()
  55. defer session.Close()
  56. err := session.Begin()
  57. if err != nil {
  58. return errors.New("新增标段成员出错-dbsession")
  59. }
  60. // -更新树成员量
  61. // 1.获得标段成员量
  62. bidAccountData := d.GetBidAccount(bidsectionId, projectId)
  63. accounts := len(bidAccountData) + 1
  64. _, err = session.Exec("UPDATE cm_tree SET `accounts` = ? where id = ?", accounts, treeId)
  65. if err != nil {
  66. session.Rollback()
  67. log.Println(err)
  68. return errors.New("更新标段成员量出错")
  69. }
  70. // 2.初始化账号权限
  71. permissionAccount := &models.CmPermissionAccount{}
  72. _, err = d.engine.
  73. Where("project_id=? and bidsection_id = ? and account_id= ? ", projectId, bidsectionId, accountData.Id).
  74. Get(permissionAccount)
  75. // 2-1
  76. permiss := "{\"access\":1,\"add\":0,\"delete\":0}"
  77. if permissionAccount.Id == 0 {
  78. permissionAccount.ProjectId = projectId
  79. permissionAccount.BidsectionId = bidsectionId
  80. permissionAccount.AccountId = accountData.Id
  81. permissionAccount.ContractPermission = permiss
  82. permissionAccount.QualityPermission = permiss
  83. permissionAccount.SafePermission = permiss
  84. _, err = session.Insert(permissionAccount)
  85. if err != nil {
  86. session.Rollback()
  87. return errors.New("初始化账号权限出错")
  88. }
  89. } else {
  90. _, err = session.Exec("UPDATE cm_permission_account SET `contract_permission` = ? ,`quality_permission` = ? ,`safe_permission` = ? where id = ?",
  91. permiss, permiss, permiss, permissionAccount.Id)
  92. if err != nil {
  93. session.Rollback()
  94. return errors.New("更新账号下标段出错")
  95. }
  96. }
  97. // -更新账号表的标段ID
  98. // 1.获得账号中已绑定的标段
  99. bidsectionIdsString := accountData.BidsectionIds
  100. bidsectionIds := make([]lib.BidsectionIds, 0)
  101. bidsectionIdsByte := []byte("")
  102. // 2.未有标段
  103. if bidsectionIdsString == "" {
  104. BidsectionIdsItem := lib.BidsectionIds{}
  105. BidsectionIdsItem.Id = bidsectionId
  106. bidsectionIds = append(bidsectionIds, BidsectionIdsItem)
  107. bidsectionIdsByte, err = json.Marshal(bidsectionIds)
  108. if err != nil {
  109. session.Rollback()
  110. return err
  111. }
  112. } else {
  113. // 2.获得已有的标段ID
  114. err := json.Unmarshal([]byte(bidsectionIdsString), &bidsectionIds)
  115. if err != nil {
  116. session.Rollback()
  117. return err
  118. }
  119. bidId := lib.BidsectionIds{}
  120. bidId.Id = bidsectionId
  121. // 加入ID
  122. bidsectionIds = append(bidsectionIds, bidId)
  123. // 转换JSON字符byte
  124. bidsectionIdsByte, err = json.Marshal(bidsectionIds)
  125. if err != nil {
  126. return err
  127. }
  128. }
  129. bidsectionIdsString = string(bidsectionIdsByte[:])
  130. // 3.更新账号标段ID组
  131. _, err = session.Exec("UPDATE cm_project_account SET `bidsection_ids` = ? where id = ?", bidsectionIdsString, accountData.Id)
  132. if err != nil {
  133. session.Rollback()
  134. return errors.New("更新账号下标段出错")
  135. }
  136. // -写入标段用户关系
  137. bidAccount := models.CmBidAccount{}
  138. bidAccount.AccountId = accountData.Id
  139. bidAccount.BidsectionId = bidsectionId
  140. bidAccount.ProjectId = projectId
  141. _, err = session.Insert(bidAccount)
  142. if err != nil {
  143. session.Rollback()
  144. return errors.New("账号关联标段出错")
  145. }
  146. err = session.Commit()
  147. if err != nil {
  148. session.Rollback()
  149. return errors.New("新增标段成员出错-dbsession")
  150. }
  151. return nil
  152. }
  153. // 移除标段中的成员
  154. func (d *BidAccountDao) Delete(bidsectionId int, accountData *models.CmProjectAccount, treeId int, projectId int) error {
  155. session := d.engine.NewSession()
  156. defer session.Close()
  157. err := session.Begin()
  158. if err != nil {
  159. return errors.New("移除标段成员出错-dbsession")
  160. }
  161. // 1.移除标段账号关系中的账号
  162. _, err = session.Exec("DELETE FROM `cm_bid_account` WHERE account_id = ? and bidsection_id = ? and project_id= ? limit 1",
  163. accountData.Id, bidsectionId, projectId)
  164. if err != nil {
  165. session.Rollback()
  166. return errors.New("移除标段成员出错")
  167. }
  168. // 1-1 移除账号权限
  169. _, err = session.Exec("DELETE FROM `cm_permission_account` WHERE project_id= ? and bidsection_id = ? and account_id = ? limit 1",
  170. projectId, bidsectionId, accountData.Id)
  171. if err != nil {
  172. session.Rollback()
  173. return errors.New("移除成员权限出错")
  174. }
  175. // -更新树成员量
  176. // 2.获得标段成员量
  177. bidAccountData := d.GetBidAccount(bidsectionId, projectId)
  178. accounts := len(bidAccountData)
  179. _, err = session.Exec("UPDATE cm_tree SET `accounts` = ? where id = ?", accounts, treeId)
  180. if err != nil {
  181. session.Rollback()
  182. return errors.New("更新标段成员量出错")
  183. }
  184. // 3.移除账号表中的标段ID
  185. bidsectionIdsString := accountData.BidsectionIds
  186. bidsectionIds := make([]lib.BidsectionIds, 0)
  187. bidsectionIdsByte := []byte("")
  188. // 2.未有标段
  189. if bidsectionIdsString == "" {
  190. return errors.New("移除标段成员出错")
  191. }
  192. // 2.获得已有的标段ID
  193. err = json.Unmarshal([]byte(bidsectionIdsString), &bidsectionIds)
  194. if err != nil {
  195. session.Rollback()
  196. return err
  197. }
  198. // 获得需要删除标段ID的下标
  199. bidsectionIdsIndex := -1
  200. for index, data := range bidsectionIds {
  201. if data.Id == bidsectionId {
  202. bidsectionIdsIndex = index
  203. break
  204. }
  205. }
  206. if bidsectionIdsIndex == -1 {
  207. session.Rollback()
  208. return errors.New("移除标段成员出错")
  209. }
  210. // 删除标段ID
  211. bidsectionIds = append(bidsectionIds[:bidsectionIdsIndex], bidsectionIds[bidsectionIdsIndex+1:]...)
  212. // 转换JSON字符byte
  213. bidsectionIdsByte, err = json.Marshal(bidsectionIds)
  214. if err != nil {
  215. session.Rollback()
  216. return err
  217. }
  218. bidsectionIdsString = string(bidsectionIdsByte[:])
  219. // 3.更新账号标段ID组
  220. _, err = session.Exec("UPDATE cm_project_account SET `bidsection_ids` = ? where id = ?", bidsectionIdsString, accountData.Id)
  221. if err != nil {
  222. session.Rollback()
  223. return errors.New("移除账号下标段出错")
  224. }
  225. err = session.Commit()
  226. if err != nil {
  227. session.Rollback()
  228. return errors.New("移除标段成员出错-dbsession")
  229. }
  230. return nil
  231. }